vim 中有类似 Bash 的代码完成吗?

vim 中有类似 Bash 的代码完成吗?

我目前在 Vim 中使用 superTab 进行补全。但是,我希望补全更像 bash。例如,如果我输入

st

可能的完成情况是

struct, string

如果我按下 tab 键,我希望它能够完成为 str,并且理想情况下显示一个可能完成的菜单。

插件没问题。

答案1

我认为以下插件可以满足您的要求:
你让我完整

根据描述:

YouCompleteMe 是一款快速、输入时、模糊搜索的 Vim 代码补全引擎。它有两个补全引擎:一个基于标识符的引擎,适用于所有编程语言;另一个基于语义的 Clang 引擎,为 C/C++/Objective-C/Objective-C++(以下称为“C 系列语言”)提供语义代码补全。

答案2

事实证明,大部分情况下,输入操作 set completeopt=menu,longest 都能解决问题。不幸的是,输入更多文本后,再次按下 Tab 键会尝试进行完整补全,而不是给出下一个最长的公共前缀。

答案3

根据亚历山大的回答,我的 .vimrc 中有类似这些行的内容

"unix like completion - longest substring
set completeopt+=longest
"add command to retrigger longest substring
"Naive version... see below
inoremap <C-m> <C-e><C-n>

因此,‘最长’位完成了大部分工作,但是随后按下<C-n>只会开始循环显示选项。如果您按下<C-e>该位(e)nds 自动完成,则再次触发它以<C-n>匹配下一个最长的子字符串...为此添加快捷方式可以让您不必按两个键....

你不想把它绑定到,<C-n>因为它会阻止你以熟悉的方式骑行

我选择 M 因为它就在 N 旁边,并且检查 ( :h insert-index) 默认仅绑定到same as <CR>.... 因为这是 vim 并且没有什么是容易的,事实证明这意味着 vim 实际上不能区分两次按键

如果您不介意使用,<C-m>那么就选择别的东西,否则请继续阅读...

根据另一篇文章,我修改了底部的答案,并稍微整理了语法(基于

我最终得到了这个:

"add command to retrigger longest substring
inoremap <expr> <C-M> pumvisible() ? "\<C-e><C-n>" : "\<C-m>"

pumvisible() 返回一个标志,表示弹出菜单是否打开。当弹出菜单未打开时,这将阻止我们在插入模式下更改回车键的行为。

不幸的是,我找不到有关 ? 和 : 的任何文档,以及为什么我们必须传入字符串。

相关内容