Skip to content

Vim 中命令行更改 Tab 不起作用

故事的开始是因为 vim 在 cmdline-mode 下的自动补全是 <Tab>,而 insert-mode 下是 <C-N>,所以就打算把 cmdline 下改掉。

但是直接 cnoremap <C-N> <Tab> 不可以,实际情况会输出 ^I 字符(TabC-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>,搞定...

Comments