vim内部代码完成

时间:2011-10-17 02:00:00

标签: regex vim code-completion

有一个未在vim帮助文件中列出的完成类型(特别是:insert.txt),但我本能地感觉到需要经常使用。假设我的文件中有“Awesome”和“SuperCrazyAwesome”字样。我发现Awesome的一个实例应该是SuperCrazyAwesome,所以我跳到单词的开头,进入插入模式,然后必须输入“SuperCrazy”。

我觉得我应该可以键入“S”,创建“SCrazy”,然后只需点击一两个完成热键即可找到光标左侧的内容(“S”),右边是什么(“疯狂”),正则表达式反对文件中的所有单词(“/ S \ w * Crazy /”),并为我提供选择的完成弹出菜单,或者如果只有一个匹配则执行替换。

我想使用实际的完成系统。存在使用函数的“用户定义”完成,并且在帮助替换给定列表方面具有良好示例。但是,我似乎无法追查我需要做出的许多细节,包括:

  1. 如何从vim函数中获取文件中所有单词的列表?
  2. 我可以列出所有缓冲区中的单词(带文件名),如vim的完整吗?
  3. 如何在插入模式下获取光标前/后单词中的文字?
  4. 可以完成替换整个单词,而不仅仅是光标吗?
  5. 我已经在这里呆了几个小时了。我一直在追求死胡同,例如this one,它将我引入\%#以匹配光标位置,这对我来说似乎不起作用。例如,搜索\ w * \%#只返回我所在单词的第一个字符,无论我在哪里。 \%#似乎没有锚定。

2 个答案:

答案 0 :(得分:0)

虽然它过去并没有完全遵循您想要的方法,但我写了https://github.com/mjbrownie/swapit,如果您正在寻找相关的关键字,它可能会执行您的任务。如果您有数百场比赛,它将在这种情况下失败。

它主要用于2-10种可能的测序匹配。

您将定义一个列表

:SwapList非常棒令人敬畏更多令人敬畏的SuperCrazyAwesome完全令人难以置信的令人难以置信的

并使用递增器递减键(c + a)(c + x)移动匹配

还有一些其他的循环类型插件,比如我在vim.org和github上所知的交换字。

这里的优点是您不必将单词与正则表达式组合在一起。

答案 1 :(得分:0)

我在几年前写过类似于第三方库的东西,在每个组件的每个函数中使用相当长的CamelCasePrefixes。但它是在Git Hub之前的时代,我认为它是一个失落的宝石,但搜索引擎说我不是一个完整的屁股,并将其发布到Vim维基。

这是:http://vim.wikia.com/wiki/Custom_keyword_completion

请不要问我'MKw'是什么意思。不知道。

这需要一些适应你的需求,因为它只查找到光标的单词,但想法就在那里。它仅适用于当前缓冲区。迭代所有缓冲区将会缓慢,因为它没有创建任何索引。出于这些目的,我会选择外部grep。