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”
在未加载缓冲区的问题上不一致。前者说“使用加载和卸载的缓冲区”。而后者说“未加载的缓冲区不扫描以完成整条生产线”。前者可以证明是正确的,后者可以证明是错误的。感谢您的澄清。