如何在Vim中禁用箭头键?


24

我想教自己使用hjkl多于使用箭头键,以便留在首页上。是的,我非常清楚,不应使用hjkl作为主要导航键。但是我的习惯很强,我什至没有意识到那会导致手向箭头键移动,所以我想不学习它。

为了打破这种习惯:如何禁用箭头键,以使我不得不使用hjkl或其他导航方法?

另外,如果显示的消息Dont't use this!不是强制性的,则将很有帮助。如果他们不起作用,那将使我重新思考自己的习惯会感到困惑。


4
这样做绝对没有意义;HJKL和箭一样吸。
romainl 2015年

6
我认为@romainl可能指出,专注于使用vim强大的动作(例如w下一个单词,}下一个段落,n下一个搜索结果匹配,fz下一个z在当前行中出现等)比移动更多内容更为重要。按单个字符细化。我绝对同意这一点。但是,HJKL绝对比箭头键更好,因为您不必将手从主行移开。我会经常输入类似的内容jA,它比快很多<Down>A,而且无法真正被任何动作击败。
wchargin

4
@romainl:我想我之前曾与您进行过讨论。非Vimmer用于箭头,而不用于HJKL。理想情况下,您都不想要使用任何一个。但是遮住箭头(而不是HJKL)会使人们停下来并思考他们的工作(同时仍然保持HJKL处于打开状态,以防它实际上是最佳选择,或者如果用户对如何使用它感到困惑)更强大的动作)。即不是要学习HJKL,而是要阻止在其他编辑器中学习到的自动知识。
阿玛丹2015年

1
@Carpetsmoker hjkl密钥的绝对优势在于不必离开主行。对于箭头键,手必须在键盘上移动。
k0pernikus 2015年

1
@Carpetsmoker对我来说一定感觉更好。;)
k0pernikus 2015年

Answers:


24

您可以安装hardmode插件.vimrc放入

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

如果你不想使用插件,使用(可能是一个更好的选择,因为你自己定制一切!) nnoremapvnoremapinoremap<Left><Right><Up><Down><PageUp><PageDown>,例如:

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>

1
另外,<nop>如果您想完全禁用键盘映射,请执行以下操作:nnoremap h <nop>
akshay

25

如果您或正在阅读本主题的其他人仅想禁用键移动而没有文本警告,请在.vimrc中输入以下行

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

这些命令将仅在正常模式下禁用按键移动。它们仍然在插入模式下工作。如果使用inoremap,则箭头移动也将从插入模式中删除。

这个广受欢迎的主题涉及noremap,nnoremap,inoremap等之间的差异:在Vim中重新映射

重新映射的一般思路如下:

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

因此,在给出的其他示例中,您将左命令重新映射到文本提示符,这偶然地删除了实际移动光标的动作。我在上面给出的示例仅将操作所做的操作重新映射为无,而不是其他操作。考虑删除而不是替换vim功能。


2

您可以将其添加到.vimrc命令中以禁用“命令”,“插入”,“普通”和“可视”模式下的箭头键:

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

注意:请查看:help map-overview有关不同类型映射的更多详细信息


1
您可以使用noremap ... ...(对于普通,可视,选择和操作员待定模式)和noremap! ... ...(对于插入和命令行模式)减少所需命令的数量。
尔根·克雷默(JürgenKrämer)

真正。我认为更明确的noremaps做法对于希望自定义受影响模式的人会有所帮助
NonlinearFruit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.