【问题标题】:How to ignore some files for Vim word complete?如何忽略 Vim 单词完成的一些文件?
【发布时间】:2017-07-11 18:50:42
【问题描述】:

假设我正在解析非常大的数据文件(每个文件大约有几兆字节)。我想通过查看这些数据文件来编写解析代码,所以我在 Vim 中有几个窗口,一些是代码文件,一些是数据文件。

在这种情况下,插入模式下的 Vim 单词补全非常慢,因为它会尝试扫描数据文件。为了避免这种情况,我想忽略这些具有非程序扩展名的数据文件(例如 dat、txt 而不是 c、rb、py),但继续观看程序文件。所以最好的情况是我可以注册一些扩展,以便在单词完成期间忽略。

我怎样才能做到这一点?我查看了h: 'complete',但找不到我想做的事情。例如,.vimrc 中的set complete-=w 不满足我,因为它不仅忽略了数据文件,还忽略了程序文件,完全破坏了单词补全。

感谢您的帮助。

【问题讨论】:

  • 一个非常简单且非常明显的解决方法是在另一个 Vim 实例中打开您的数据文件,或者因为您不打算编辑它们,所以在像 @987654323 这样的寻呼机中打开它们@(恰好与 Vi[m] 共享许多命令)。
  • 是的,我正在考虑。要一次查看所有内容(这是我想做的一部分),我可以使用 Screen、iTerm2 或其他任何东西来分屏并打开数据。但是,我真的很想在纯 vim 环境中找到一种方法,原因有很多:less 没有插件,即使只是在查看文件时我也会使用它。此外,如果我在一个屏幕中有多个 Vim 实例,例如使用 Screen 分屏,我肯定会混淆如何转到另一个窗口,因为它混合了 Vim 功能和 Screen 功能,这很痛苦。
  • 所有优点。在 Vim 本身中,我知道从扫描中排除文件的唯一方法是从缓冲区列表中删除它或卸载它,但这也意味着 不显示它,这样就达不到目的了。或者,您可以使用<C-x><C-o><C-x><C-n>

标签: vim autocomplete


【解决方案1】:

您有两个选择:使用/重新配置 'complete' 选项中的补全源,或者自己编写自定义补全。

对于后者,我的CompleteHelper library 提供了帮助函数,使这变得非常简单。例如,SameFiletypeComplete plugin(基于该库)仅考虑具有相同文件类型的缓冲区。当然,任何自定义补全都没有内置补全快,而且我的库目前仅限于缓冲区搜索(没有标签、字典等)

我个人会通过:setlocal nobuflisted 将这些大数据文件不列出,并在单独的标签页中打开它们; 'complete' 的默认值将忽略这些(因为它不包含 U 值)。

【讨论】:

  • 你的插件听起来很不错,但它对我不起作用。我提取了 vimball、CompleteHelper 和 SameFileTypeComplete,我看到 SameFiletypeComplete.vim 安装了 :scriptnames。我在我的普通 .vimrc 中设置了let g:SameFiletypeComplete_complete = '.,w,b',然后输入了 但它不会搜索在其他窗口中编写的关键字。本地完成照常工作。知道有什么问题吗?我的环境:VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 10 2017 18:00:13) MacOS X (unix) version Included patches: 1-703 Compiled by Homebrew
  • 你还需要安装这个库:vim.org/scripts/script.php?script_id=4433哦,通过<C-x>=触发相同的文件类型完成(默认;可以更改)。
  • 完美运行!这正是我想要的,非常感谢!!
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多