我的~/.bash_history
包含sudo apt-get install
,aplay foo.wav
等行。我认为如果我可以在编写shell脚本时使用这些行来完成整行,这将会很方便。
:h compl-whole-line
说:
CTRL-X CTRL-L
向后搜索以。开头的行 与之前的当前行中的字符相同 光标。缩进被忽略。匹配线是 插在光标前面。 **'完整'选项用于决定哪些缓冲区 搜索匹配。既加载又卸载 使用缓冲区。**
请注意我插入的星号。 :h 'complete'
说:
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
然后
:set complete+=k~/.bash_history
:set complete?
" complete=.,w,b,u,t,i,k~/.bash_history
,我进入插入模式(i
),然后输入
su<C-x><C-l>
,vim说Whole line completion (^L^N^P) Pattern not found
。完成是为单词,所以当我键入
su<C-p>
建议 sudo
。
我错过了什么?如何在没有:sp ~/.bash_history
的情况下使用我的历史记录进行整行完成?
答案 0 :(得分:2)
set complete+=k[file]
与行完成无关:您提供给它的任何文件都只会被字典完成(<C-x><C-k>
)和用作来源关键字完成(<C-n>
/ <C-p>
)。
:help i_ctrl-x_ctrl-l
很明确:行完成仅适用于在加载和卸载缓冲区中找到的行。由于~/.bash_history
未作为缓冲区加载,因此行完成显然永远将其用作来源。
所以是的,唯一的实用解决方案是加载该文件。
:sp ~/.bash_history
并不是最佳选择,因为a)它在物理上和缓冲区列表中占用了太多空间,并且b)它需要太多的击键。
&#34;太多的空间&#34; 部分问题可以通过更合适的命令轻松解决:
:badd ~/.bash_history
&#34;太多的键击&#34; 部分问题可以通过自动命令解决,每次编辑shell脚本时都会运行上面的命令:
augroup shell
autocmd!
autocmd BufNewFile,BufRead *.sh badd ~/.bash_history
augroup END