我正试图在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插件在编辑模式下使用向上/向下键给我带来麻烦。我刚刚卸载了这个插件。
答案 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>
。