在 Vim 中,当我编程时,我经常希望 Ctrl-N 表现得像-
关键字的一部分;换句话说,将其包含在内iskeyword
。但是,我想为此创建一个新的键映射,并让 Ctrl-N 保留其现有行为。
我尝试过这个:
inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N>
...哪种方法可行,但 iskeyword 选项-
随后包含额外内容,这不是所需的行为。
这也有一定的作用:
inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N><C-O>:set iskeyword-=-<CR>
...但弹出菜单被杀死了<C-O>
。
有没有办法可以两全其美?让弹出菜单出现并保留在原处,但iskeyword
之后又恢复到原来的状态?
或者,还有其他方法可以解决这个问题吗?
答案1
这似乎有效。
function! CustomComplete(type)
set iskeyword+=-
return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-
我们使用表达式映射来运行iskeyword
每次运行时都会设置的函数(似乎没有问题。我也没有找到 ins-completion 之前的自动命令。)然后使用该函数的返回值作为映射的替换。在这种情况下,您需要行为。然后,要从set iskeyword 中<C-N>
删除 set,我们使用ins-completion 完成后发生的自动命令。-
CompleteDone
另外,我也尝试了你的两个映射,但第一个映射并没有真正按预期工作,因为它也会<C-O>
关闭完成窗口。