Vim 成套设备+=k[文件]不能完成整条生产线?
我有Vim 成套设备+=k[文件]不能完成整条生产线?,vim,Vim,我有~/.bash_history,其中包含sudo apt get install,aplay foo.wav等行。我想如果在编写shell脚本时可以使用这些行来完成整行,那会很方便 :h compl整条线表示: k k{dict} scan the file {dict}. Several "k" flags can be given, patterns are valid too. For example: > :set cpt=k/u
~/.bash_history
,其中包含sudo apt get install
,aplay foo.wav
等行。我想如果在编写shell脚本时可以使用这些行来完成整行,那会很方便
:h compl整条线
表示:
k k{dict} scan the file {dict}. Several "k" flags can be given,
patterns are valid too. For example: >
:set cpt=k/usr/dict/*,k~/spanish
CTRL-X CTRL-L向后搜索以 与前一行中的字符相同 光标。缩进被忽略。匹配行是 插入到光标的前面。 **“complete”选项用于确定哪些缓冲区 正在搜索匹配项。装载和卸载 使用缓冲区** 注意我插入的星号<代码>:h“完成”表示:
k k{dict} scan the file {dict}. Several "k" flags can be given,
patterns are valid too. For example: >
:set cpt=k/usr/dict/*,k~/spanish
所以我想:set complete+=k~/。bash_history
可以完成这项工作。没有
启动vim
$ vim -u NONE -N
然后
,我进入插入模式(I
),当我键入
su<C-x><C-l>
su<C-p>
建议使用sudo
我错过了什么?如果没有
:sp~/.bash_history
?set complete+=k[文件]
与行完成无关:您提供给它的任何文件都将仅通过字典完成(
)和关键字完成(
/)用作源代码
:help i\u ctrl-x\u ctrl-l
很清楚:行完成仅适用于加载和卸载缓冲区中的行。由于~/.bash\u history
未作为缓冲区加载,因此行完成显然永远不会将其用作源
所以,是的,唯一实用的解决方案是加载该文件
:sp~/.bash_history
并不是最理想的,因为a)它占用了太多的空间,包括物理空间和缓冲区列表,b)它需要太多的按键
问题的“空间过大”部分可以通过更合适的命令轻松解决:
:badd ~/.bash_history
问题的“击键次数过多”部分可以通过在每次编辑shell脚本时在上面运行命令的自动命令来解决:
augroup shell
autocmd!
autocmd BufNewFile,BufRead *.sh badd ~/.bash_history
augroup END
+n对于:添加,它似乎非常实用。“complete”选项用于决定搜索哪些缓冲区以查找匹配项”这一部分让我有点困惑——complete
的哪些选项实际上会影响整行完成?整行完成使用加载和卸载的缓冲区,因此与缓冲区相关的选项适用:,w,b,u,u
。请注意,:help i\u ctrl-x\u ctrl-l
和:help“complete”
在未加载缓冲区的问题上不一致。前者说“使用加载和卸载的缓冲区”。而后者说“未加载的缓冲区不扫描以完成整条生产线”。前者可以证明是正确的,后者可以证明是错误的。感谢您的澄清。