vim内部代码完成

Gar*_*ler 5 regex vim code-completion

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

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

我想用这个实际的完成系统.存在使用函数的"用户定义"完成,并且在帮助替换给定列表方面具有良好示例.但是,我似乎无法追踪到实现这一目标所需要的许多细节,包括:

  1. 如何从vim函数获取文件中所有单词的列表?
  2. 我可以列出所有缓冲区中的单词(带文件名),因为vim完整吗?
  3. 如何在插入模式下获取光标前/后单词中的文本?
  4. 完成可以替换整个单词,而不仅仅是光标吗?

我已经在这几个小时了.我一直在努力达到死胡同,就像这个一样,它将我引入了\%#以匹配光标位置,这似乎对我不起作用.例如,搜索\ w*\%#只返回我所在单词的第一个字符,无论我在哪里.\%#似乎没有锚定.

mic*_*ael 0

尽管它不完全遵循您过去想要的方法,但我已经编写了https://github.com/mjbrownie/swapit,如果您正在寻找相关关键字,它可能会执行您的任务。如果您有数百个匹配项,那么在这种情况下它就会失败。

它主要适用于 2-10 个可能的有序匹配。

您将定义一个列表

:SwapList 真棒 真棒 更多真棒 超级疯狂真棒 完全完全真棒 令人难以置信真棒

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

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

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