1

我用这种词添加了一个字典:

foo.bar
this.is.a.test

尽管有点,我还是:set iskeyword+=.完成了工作:

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

但我也希望有这样的完成:

test<TAB>-->this.is.a.test

我的意思是,我不会总是输入单词的开头。

我希望我很清楚

提前致谢

4

2 回答 2

1

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

至于通过@Ingo Karkat 建议的自定义完成可能最好通过单词结尾完成。但是,我个人还没有遇到过需要这样的完成。

如何使用<c-x><c-p>以下<c-p>/<c-n>

  • 输入第一个单词或其中的一部分。例如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>例如通过, tags: <c-x><c-]>, filename:等完成整行<c-x><c-f>。通常使用像SuperTab<tab>之类的巧妙映射或插件来完成会隐藏这些其他完成模式,让它们感觉不那么熟悉。注意:SuperTab 因引起冲突或不良行为而臭名昭著。

如需更多帮助,请参阅:

:h i_ctrl-x_ctrl-p
:h ins-completion
:h 'complete'
:h 'completeopt'
于 2014-11-11T16:28:50.323 回答
0

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

如果您的字典是加载缓冲区(不是内置字典完成:help i_CTRL-X_CTRL-K),我的CompleteHelper 插件可以更轻松地实现匹配项的提取。有了它,BidiComplete 插件提供了一些相关的东西:this.is.a.test光标在. (我的作品中还有一个 MiddleEndComplete 插件,可能接近你想要的。)|test

于 2014-11-11T15:53:51.780 回答