【问题标题】:Vim plugin to auto complete across multiple open buffersVim 插件可跨多个打开的缓冲区自动完成
【发布时间】:2015-03-09 04:35:40
【问题描述】:

是否有一个 vim 插件可以跨多个文件自动完成?

例子:

  • 打开的文件是a.txt 和b.txt。
  • 在使用vim 编辑b.txt 时,我希望能够从a.txt 和b.txt 接收自动完成结果

我已经使用了youCompleteMe 插件,但是对于来自该语言的方法,它只能在一个文件中完成。

有什么建议吗?

【问题讨论】:

  • 如果你需要代码完成,比如C++,YCM 是最好的选择,但你需要配置它来做你想做的事。不确定是否可以使用平庸的.txt 文件...

标签: vim autocomplete vim-plugin


【解决方案1】:

带有Ctrl-N in Insert Mode 的Vim 内置补全已经支持这个。不需要插件。

您可以通过以下测试看到这一点:

  1. 创建一个文件very-basic-vimrc,内容如下:

    set nocompatible
    filetype plugin indent on
    syntax enable
    
  2. 运行vim -u very-basic-vimrc。这将使用该文件作为您的 vimrc 启动 Vim,因此您可以在没有任何插件的情况下测试 Vim 的工作方式。

  3. 在空缓冲区中,键入文本“一二三”。

  4. 运行:new打开另一个缓冲区,然后输入“四五六”。

  5. 使用 Ctrl-W W 切换回第一个缓冲区,然后使用 o 打开新行。

  6. 键入“fi”并按 Ctrl-N。这会触发下一个自动完成匹配——参见Vim’s documentation for i_CTRL-N。即使单词“five”在不同的缓冲区中,“five”也会成功完成。

如果此功能不适用于您的普通 vimrc,则您安装的插件之一(例如 YouCompleteMe)可能会干扰该行为。更改该插件的设置或禁用它。

我个人使用Supertab。使用 Supertab,我可以成功键入 Tab 以完成来自不同缓冲区的单词。其他流行的补全插件可能也支持该功能。

我看到 YouCompleteMe 声称无需键入 Tab 即可提供补全。如果来自其他缓冲区的完成没有显示在自动触发的列表中,YouCompleteMe 可能是故意这样做的,这样正常的输入就不会减慢太多。您必须在 YCM 的文档中查找启用它的选项,或者扩展完成列表以包含来自其他缓冲区的完成的映射。如果这些都不存在,您可以在YouCompleteMe’s issue tracker 上创建一个请求该问题的问题。

【讨论】:

  • 这是跨缓冲区而不是文件... :/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2021-09-03
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多