是否有一个单行来告诉vim / ctags自动完成从一个单词的中间搜索?

时间:2017-09-30 14:13:14

标签: vim ctags

在vim中(在插入模式下,在运行旺盛的ctags之后),我使用ctrl-x后跟ctrl-]来显示各种可能的单词/标记的下拉列表。这是一个很棒的功能。

问题在于,默认情况下,此列表以一堆数字选项开头并自动插入第一个数字选项,如果我退格以摆脱数字并开始输入一个单词的一部分 - 从单词的中间搜索的想法 - 自动完成行为完全退出。

我知道我可以输入我想要的单词的第一个字母,然后从那里开始。但这假设我知道这个词的第一个字母,这不一定是给定的。

例如,如果我在一个长周末期间与朋友一起进行一对编程项目,我可能不记得他在任何特定时刻是否调用了他的方法promoteRecordStatus(),updateRecordStatus()或boostRecordStatus( )。在这个例子中,我想输入RecordStatus并获得相关结果,这似乎与当前行为一目了然。

所以考虑到这种情况:是否有一种简单的vim-native方式告诉编辑器在没有任何假设的情况下开始自动完成,然后在每个令牌的所有部分中搜索所有可用的令牌以查找我的类型字符串?

我当然会认为插件建议很有帮助,但我更喜欢一个简短的vim-native答案,如果可能的话,它不需要任何插件。理想情况下,可以仅使用一行或两行来设置配置。

1 个答案:

答案 0 :(得分:0)

内置的完成都需要在起始位置匹配。在某些情况下,您可以从'iskeyword'选项中删除分隔符(例如,在Vimscript中,删除#以便能够从foo#bar#BazFunction()完成单个组件),但这不会成功完全为camelCaseWords工作。

自定义:help complete-functions可以实现任何完成搜索。要基于标记数据库,必须使用taglist()作为源,并根据在触发完成之前输入的完成基来进行过滤。如果您没有在开始时锚定此模式匹配,则可以获得所需的完成。