vim+YouCompleteMe中设置回车自动选择第一项配置
配置
vim默认的youcompleteme.vim中做了选择补齐的快捷键(ctrl+n或下箭头),使用起来感觉不方便。决定映射为回车。
在vimrc中添加如下配置
inoremap <expr> <CR> pumvisible() ? "<Down>\<CR> " : "\<CR>"
解释
inoremap在输入(i)的模式下,非递归(nore[cursive])做符号映射(map), 这里<expr>
表示rhs是个表达式,而不是直接做映射。
rhs的表达式意思是,若当前为pumvisible模式,将回车映射为“down键盘加回车再加空格”,down键即选择下一项,最后有一个空格是为了退出候选模式。
更新
上面映射回车为选择补齐的缺点是会加一个空格。不加空格又无法退出提示截面。
还有一种方法,就是回车单纯表示选择,要在pumvisible强制使用回车的话就再映射一个控件到回车。这样补齐后,同一行内,直接按空格退出,真想换行就直接按下面AnyKey
.
inoremap <expr> <CR> pumvisible()? "<Down>\<CR>" : "\<CR>"
inoremap AnyKey <CR>
这里AnyKey习惯用Ctrl+Enter
组合, <c-cr>
(大小写不区分)。但这个只有window下Gvim才可以用,linux的终端中用vim(测试的ubuntu)不行,
但参考下面的说明,xterm中(putty唤起的)中用vim,输入ctrl+enter(shift+enter也是),xterm收到的就是enter, 进而vim只收到enter。
https://unix.stackexchange.com/questions/166294/vim-x-terminal-key-mapping#:~:text=Other function keys should be mappable without any,to enable the mapping for every vim session.
这个问题虽然不行,但回答得很好。特别是如何确定自己在xterm中输入的是什么,可以用od -c
命令。如ctrl-[输入得到的就是0x1b,表示的就是escape, 和敲escape键是一样的结果(可以到vim里面看)。
参考 https://vi.stackexchange.com/questions/15630/how-to-map-alt-enter
linux下AnyKey可以设置为<a-cr>
,即ALT+Enter, 实际就是输入escape+enter。虽然用起来没ctrl+enter方便。