我想教自己更多使用hjkl而不是使用箭头键,以便留在首页上。 (我很清楚,不应该使用hjkl作为主要的导航键,因为可以使用更强大的移动命令,但这更多的是打破了我的箭头键习惯。)
为了打破这种习惯:如何禁用箭头键,以使我不得不使用hjkl或其他导航方法?
作为奖励,如果显示Dont't use this!消息但不是强制性的,这将很有帮助。如果他们不起作用,那么我重新思考自己的习惯将变得很困惑。

评论

这样做绝对没有意义; HJKL的吸力与箭头一样多。

我认为@romainl可能会指出,更重要的是集中精力使用vim强大的动作(例如w表示下一个单词,}表示下一段,n表示下一个搜索结果匹配,fz表示当前行中z的下一次出现,等等。 。)比单个字符更精细地移动。我绝对同意这一点。但是,HJKL绝对比箭头键更好,因为您不必将手从主行移开。我会经常键入jA之类的东西,它比 A快很多,而且真的不能被任何动作击败。

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

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

@Carpetsmoker对我来说一定感觉更好。 ;)

#1 楼

您可以安装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>


评论


如果要完全禁用键盘映射,则还有:nnoremap h

–akshay
2015年12月17日在8:09

#2 楼

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

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


该命令将禁用正常,可视,选择和操作员待定模式下的按键移动。如果您使用inoremap,则箭头移动将仅从插入模式中删除; nnoremap将仅从正常模式下将其删除。请参见:help :map-modes

该热门话题涉及noremap,nnoremap,inoremap等之间的差异:在Vim中重新映射

重新映射的基本思路如下:

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


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

#3 楼

您可以将其添加到.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可获得有关不同类型的更多详细信息的映射

评论


您可以通过使用noremap ...(对于正常,可视,选择和操作员待定模式)和noremap来减少必要命令的数量! ……(用于插入和命令行模式)。

–于尔根·克雷默(JürgenKrämer)
19年7月10日在6:30



真正。我认为更明确的noremap对希望自定义受影响模式的人会有所帮助

– NonlinearFruit
19年7月10日在12:25

我删除了命令模式映射,但仍然无法在中使用箭头:

– Herrgott
20年4月18日在3:00

@Herrgott noremap!和lnoremap也会影响命令模式(如果有的话)。更改vimrc之后,请确保重新启动vim(以便加载更改)。

– NonlinearFruit
20年4月18日在17:11

#4 楼

这就是我的做法,我称之为hard_ass.vim

 for key in ['<Up>', '<Down>', '<Left>', '<Right>']
  exec 'noremap' key '<Nop>'
  exec 'inoremap' key '<Nop>'
  exec 'cnoremap' key '<Nop>'
endfor
 


我花了一些时间几天习惯了这个,但是之后我忘记了它。