Vim 中命令行更改 Tab 不起作用
故事的开始是因为 vim 在 cmdline-mode 下的自动补全是 <Tab>
,而 insert-mode 下是 <C-N>
,所以就打算把 cmdline 下改掉。
但是直接 cnoremap <C-N> <Tab>
不可以,实际情况会输出 ^I
字符(Tab
和 C-I
相当于是一个键位),而不是预期的自动补全。
这就非常奇怪了啊,查了一个多小时,终于明白了,首先看 vim 帮助文档中关于 wildcharm
定义。
'wildcharm' 'wcm' number (default: none (0))
global
'wildcharm' works exactly like 'wildchar', except that it is
recognized when used inside a macro. You can find "spare" command-line
keys suitable for this option by looking at |ex-edit-index|. Normally
you'll never actually type 'wildcharm', just use it in mappings that
automatically invoke completion mode, e.g.: >
:set wcm=<C-Z>
:cnoremap ss so $vim/sessions/*.vim<C-Z>
< Then after typing :ss you can use CTRL-P & CTRL-N.
意思就是 wildcharm 是用来定义自动补全的键位,默认是 Tab,但是默认是不允许这个值去被扩展,所以直接改 wildcharm
就可以了,set wildcharm=<C-N>
,搞定...