【发布时间】:2014-12-18 04:49:46
【问题描述】:
VIM 有没有办法让按键调用下拉菜单(类似于代码完成),但会列出文本文件中的文本行以供选择?
我有一个我想从中选择的宏列表。例子是这样的......
- `ABX_ERR("消息",值);
- `ADD_TASK(命名任务); 等等……
我想在一个下拉菜单中查看所有这些内容,我可以从中选择插入到文件中。
【问题讨论】:
标签: vim plugins vim-plugin
VIM 有没有办法让按键调用下拉菜单(类似于代码完成),但会列出文本文件中的文本行以供选择?
我有一个我想从中选择的宏列表。例子是这样的......
我想在一个下拉菜单中查看所有这些内容,我可以从中选择插入到文件中。
【问题讨论】:
标签: vim plugins vim-plugin
Vim 提供行补全功能 (:h compl-whole-line)
Completing whole lines compl-whole-line
i_CTRL-X_CTRL-L
CTRL-X CTRL-L Search backwards for a line that starts with the
same characters as those in the current line before
the cursor. Indent is ignored. The matching line is
inserted in front of the cursor.
The 'complete' option is used to decide which buffers
are searched for a match. Both loaded and unloaded
buffers are used.
CTRL-L or
CTRL-P Search backwards for next matching line. This line
replaces the previous matching line.
CTRL-N Search forward for next matching line. This line
replaces the previous matching line.
CTRL-X CTRL-L After expanding a line you can additionally get the
line next to it by typing CTRL-X CTRL-L again, unless
a double CTRL-X is used. Only works for loaded
buffers.
如果您使用<C-X><C-L>,您可以在任何打开的缓冲区中完成行。因此,只需在后台打开您想要完成行的文件,然后使用<C-X><C-L> 打开一个菜单来选择匹配的行以与当前行相同的字符开头。
【讨论】:
完整的行完成(如@FDinoff 所建议的)有几个缺点:它考虑 所有 开放缓冲区,并且仅适用于在新行开头的完成。 sn-p 插件可以做到这一点,但有不同的语法和额外的、不必要的复杂性。
解决方案是自定义补全,例如我的EntryComplete plugin 实现的补全。这个插件提供了在指定文件或缓冲区中找到的行的高度可配置的完成,由光标前的关键字触发。
【讨论】: