Vim - 如何在插入模式下使用箭头键时显示有用的错误消息?

时间:2012-06-11 21:03:30

标签: keyboard-shortcuts vim

我正试图在vim中停止使用箭头键。但是,与其他人一样,不要将它们设置为<nop>,而是希望它们显示错误消息。这是正常模式下的事情:

noremap <up>    :echoerr 'USE K TO GO UP'<CR>
noremap <down>  :echoerr 'USE J TO GO DOWN'<CR>
noremap <left>  :echoerr 'USE H TO GO LEFT'<CR>
noremap <right> :echoerr 'USE L TO GO RIGHT'<CR>

我尝试在插入模式下执行相同的操作,但它不起作用:

inoremap <up>    :echoerr 'USE K TO GO UP'<CR>
inoremap <down>  :echoerr 'USE J TO GO DOWN'<CR>
inoremap <left>  :echoerr 'USE H TO GO LEFT'<CR>
inoremap <right> :echoerr 'USE L TO GO RIGHT'<CR>

当我按插入模式按下时,这会打印:echoerr 'USE K TO GO UP'我的光标所在的位置。

如何修复inoremap指令,以便按预期工作? (另外,解释为什么它不起作用会有所帮助)。

编辑:感谢所有帮助过我的人。我很喜欢这个:

noremap <up>    :echom 'USE K TO GO UP'<CR>
noremap <down>  :echom 'USE J TO GO DOWN'<CR>
noremap <left>  :echom 'USE H TO GO LEFT'<CR>
noremap <right> :echom 'USE L TO GO RIGHT'<CR>
inoremap <up>    <ESC>:echom 'USE K TO GO UP'<CR>
inoremap <down>  <ESC>:echom 'USE J TO GO DOWN'<CR>
inoremap <right> <ESC>:echom 'USE L TO GO RIGHT'<CR>
inoremap <left>  <ESC>:echom 'USE H TO GO LEFT'<CR>         

vim-autoclose插件在编辑模式下使用向上/向下键给我带来麻烦。我刚刚卸载了这个插件。

3 个答案:

答案 0 :(得分:6)

:inoremap <up> <Esc>:echoerr 'MSG HERE'<CR>

答案 1 :(得分:3)

而不是<Esc>:echoe 'message'<CR>我会在这里建议<C-o>:echoe 'message'<CR>:它不会离开插入模式。 <C-o>:throw 'message'<CR>让它更烦人:你会得到Press ENTER提示,而不仅仅是突出显示的消息:

inoremap <Up> <C-o>:throw 'USE “<Esc>k” TO GO UP'<CR>

。请注意,我还建议使用等效的echohl ErrorMsg | echomsg 'Message' | echohl NONE代替:echoerr:虽然这里不相关,但:echoe应该被遗忘,因为它高度依赖于上下文:与{{1}不同永远不会中断执行的:echom:throw如果它在:echoe块内,则会中断执行,否则不执行此操作。这使得任何构造都像

try

不稳定:如果SomeCommand if error_cond echoe 'abc' endif SomeCommand2 为真,你永远不会知道SomeCommand2是否会被执行。这里不相关,因为没有后续命令,并且不太可能在error_cond块内运行,但是不要让自己认为try可能是回显错误的好选择。

答案 2 :(得分:0)

除了尝试使用hjkl而不是箭头之外,您还有更紧迫的问题。

您应该阅读:help mapping,例如。

使用inoremap <up> :echoerr 'USE K TO GO UP'<CR>,当您按:echoerr 'USE K TO GO UP'<CR>时,指示Vim将<Up>置于光标处。它是一个插入模式映射,因此,只要您在映射序列中的某处不包含<Esc><C-o>,整个事物就会按原样插入。

要执行命令序列,必须先退出插入模式;因此,在Eric的回答中<Esc>