在vim之前和之后完成

时间:2014-11-11 14:43:49

标签: vim completion

我用这样的词添加了一个词典:

foo.bar
this.is.a.test

我做:set iskeyword+=.尽管有点完成工作:

当我输入fo<TAB> - &gt; foo.bar

但我想也有这样的完成:

test<TAB> - &gt; this.is.a.test

我的意思是,我不会一直打字。

我希望我很清楚

提前致谢

2 个答案:

答案 0 :(得分:1)

使用<c-x><c-p> / <c-p>之后的插入模式<c-n>,您可以完成上一次完成后的字词。这假设单词出现在一起之前。这意味着您无需将.添加到'iskeyword'(最好不要这样做!)。

至于通过自定义完成最好的单词结尾完成,如@Ingo Karkat建议的那样。不过,我个人并没有遇到过这种完成的需要。

如何在<c-x><c-p> / <c-p>

之后使用<c-n>
  • 输入第一个单词或部分单词。例如<{li>中的test
  • 点击<c-p>开始完成并打开完成菜单
  • 通过<c-n><c-p>(可选)
  • 找到正确的完成情况
  • 点击<c-x><c-p>完成下一个单词,例如示例
  • 中的.is
  • 通过<c-n><c-p>(可选)
  • 找到正确的完成情况
  • 根据需要重复<c-x><c-p><c-p> / <c-n>步骤

总而言之:test<c-p><c-x><c-p><c-x><c-p><c-x><c-p>将产生this.is.a.test

结论

使用<c-x><c-p>很难解释,但尝试几次后更容易理解。相信我,这是值得的。您也可以使用整行完成类似的技巧,即<c-x><c-l>。帮自己一个忙,只需阅读所有:h ins-completion,你会更好。

除了使用<tab>完成

之外

Vim提供各种完成选项。例如,整行完成通过<c-x><c-l>,标记:<c-x><c-]>,文件名:<c-x><c-f>等。通常使用聪明的<tab>映射或类似SuperTab的插件来完成隐藏这些其他完成模式,使他们感觉不那么熟悉。注意:SuperTab因引发冲突或不良行为而臭名昭着。

如需更多帮助,请参阅:

:h i_ctrl-x_ctrl-p
:h ins-completion
:h 'complete'
:h 'completeopt'

答案 1 :(得分:0)

内置完成程序始终提供 start 与完成基础的匹配。但是,您可以编写实现不同策略的自定义完成。

如果你的字典是一个加载的缓冲区(不是内置的字典完成:help i_CTRL-X_CTRL-K),我的CompleteHelper plugin可以更容易地实现匹配的提取。有了它,BidiComplete plugin提供了相关的内容:当光标到this.is.a.test left 时,|test完成。 (我的作品中还有一个MiddleEndComplete插件,可能与你想要的一样。)