Vim 在插入模式下怎麼用 hjkl 控制方向?
最近在轉變到hjkl上面,發現在插入模式下不能用hjkl了,是必須要esc後移動操作嗎?
對真正的vim用戶來說,插入模式根本不存在,因此這個問題不存在。(當然,用Ctrl-O 再按 hjkl 是一種方法)
作為人腦而言,記憶當前模式並不會是個很愉快的經歷,你的操作很可能出錯。因此熟練之後都會把 vim 永遠保持在普通模式。所以,aprint&
類似的,命令模式也不存在,因為 :w&
從插入模式進入到正常模式有很多方法的,esc是廣為人知的而已,其實最快的是&
說這麼多,最好使用正常模式來進行移動游標,進入正常模式不需要使用Esc的,而且最好不用Esc,Esc只是曾經的方案而已。
另外,在正常模式下,可以使用C-w來刪除一個單詞,C-u刪除一行,C-t縮進,不過上面那些鍵盤綁定也可以,我覺得使用vim自帶的一些功能就足夠用了。最好別在插入模式下移動,應該回到normal模式(建議用ctrl+[). 之後你會有各種方法快速移動到相應位置(參考vim :help usr_03)
我的做法是修改插入模式的快捷鍵,好處是修改一些簡單錯誤的時候,不用長途奔襲到方向鍵,手可以一直保持在主鍵盤區。不過最常用的移動操作還是Esc退回到普通模式。
" insert mode shortcutinoremap &< C-h &> &< Left &>inoremap &< C-j &> &< Down &>inoremap &< C-k &> &< Up &>inoremap &< C-l &> &< Right &>inoremap &< C-d &> &< DELETE &>
官方user文檔中提議用 &< CTRL-[ &> 來取代 &< ESC &> ,這個組合應該方便些。另, &< CTRL-C &> 是不展開縮略詞直接退出insert模式,不過感覺縮略詞對中文用戶沒啥用吧
手動贊同 pansz 君一次另外,需要指出的是hjkl這幾個移動常常是低效的,尤其是jjjjj或者是jjjjjjjjjjjjjjjjjjjjj這樣的移動推薦閱讀 Habit breaking, habit making不同於文章中的vim-hardmode插件,推薦使用這個插件 https://github.com/takac/vim-hardtime
auto.vim
esc有點遠,方向鍵也有點遠。有一種不錯的mapping就是:imap jj &< esc &> 。雙擊jj退出編緝模式,繼續用hjkl。
" Ctrl + H 游標移當前行行首
imap &
" Ctrl + J 游標移下一行行首
imap &" Ctrl + K 游標移上一行行尾
imap &" Ctrl + L 游標移當前行行尾
imap &" Alt + H 游標左移一格
imap &" Alt + J 游標下移一格
imap &
" Alt + K 游標上移一格
imap &插入模式下不能用hjkl移動。除非你不想通過直接按hjkl就輸入hjkl,這樣你需要自定義插入模式下的映射。
《UnixLinux大學教程》(Harley Hahn著,好書,可以當小說看)第513頁和第522頁里說了,1976年Vi發明人BillJoy使用的ADM-3A終端的鍵盤上的Esc鍵在現在鍵盤的Tab鍵的位置,而方向鍵剛好在HJKL上,所以他這就這麼規定了。
個人認為 ctrl+i 映射為 &
最重要的是,ctrl鍵一定要用左手右下角那塊肉來按,極為方便,如下圖所示:
(mac上可以用key4mac把fn的功能與ctrl互換)
同樣在普通模式修改
sl 設置為 / 方便向後搜索s; 設置為 ? 方便向前搜索sj 設置為 : 方便進入命令模式sw 設置為 :sw&因為如下圖,中間那一行按鍵是最方便,而且最快的,把sl設置為搜索使得能夠瞬間進入搜索模式,而且能夠立刻開始敲想要搜索的目標,這也是快速移動游標位置的好方法,把so映射為esc,
使得能夠快速離開搜索狀態。總得來看,s開頭的按鍵都會非常快。插入模式下移動這個功能真的很有用,比如插入成對括弧。
插入模式中移動做好的典範是 Emacs,於是我琢磨出了:在 Vim 插入模式下使用 Emacs 按鍵。看這裡 http://log4d.com/2012/04/vim-emacs-key-binding/
ps: Shell 中的默認鍵綁定是 Emacs 方式,輸入習慣很統一。ctrl-o hjkl
有一個比較簡單的方式是用AutoHotKey改鍵,局限是:
要麼是在Windows下用,比如裝了VsVim的Visual Studio.
要麼就是在SSH和虛擬機中的Linux按鍵用,這樣外面的按鍵映射裡面也能用上。
順便一提,把CapsLock改成ESC,簡直爽翻天。
CapsLock h:: ;|
if GetKeyState("control") = 0 ;|
{ ;|
if GetKeyState("alt") = 0 ;|
Send, {Left} ;|
else ;|
Send, +{Left} ;|
return ;|
} ;|
else { ;|
if GetKeyState("alt") = 0 ;|
Send, ^{Left} ;|
else ;|
Send, +^{Left} ;|
return ;|
} ;|
return ;|
;-----------------------------------o ;|
CapsLock j:: ;|
if GetKeyState("control") = 0 ;|
{ ;|
if GetKeyState("alt") = 0 ;|
Send, {Down} ;|
else ;|
Send, +{Down} ;|
return ;|
} ;|
else { ;|
if GetKeyState("alt") = 0 ;|
Send, ^{Down} ;|
else ;|
Send, +^{Down} ;|
return ;|
} ;|
return ;|
;-----------------------------------o ;|
CapsLock k:: ;|
if GetKeyState("control") = 0 ;|
{ ;|
if GetKeyState("alt") = 0 ;|
Send, {Up} ;|
else ;|
Send, +{Up} ;|
return ;|
} ;|
else { ;|
if GetKeyState("alt") = 0 ;|
Send, ^{Up} ;|
else ;|
Send, +^{Up} ;|
return ;|
} ;|
return ;|
;-----------------------------------o ;|
CapsLock l:: ;|
if GetKeyState("control") = 0 ;|
{ ;|
if GetKeyState("alt") = 0 ;|
Send, {Right} ;|
else ;|
Send, +{Right} ;|
return ;|
} ;|
else { ;|
if GetKeyState("alt") = 0 ;|
Send, ^{Right} ;|
else ;|
Send, +^{Right} ;|
return ;|
} ;|
return ;|
;---------------------------------------------------------------------o
完整的版本見另一個答案:
AutoHotKey 常用函數或小技巧有哪些分享? - 馮若航的回答
我萌新vimer,你可以選擇:
- 按esc或者ctrl+[或ctrl+c回去(廢話)
- 用箭頭符號按鍵(上下左右四個按鍵啦)
- 按照高手們教的寫入.vimrc配置
- 或者我發現可以alt+hjkl……
insertmode下你試試 alt+h/j/k/l/u/w/b/e/i/I/o/O/a/A/s/d/x/X/c/C/m///?等等
你也insert下可以用ctrl+a-z等鍵一個一個按,有的貌似看不懂什麼意思
我的沒有配置,原生vimrc,等號左邊insertmode ,沒說明的話右邊就是相當於normal mode下的按鍵作用.alt+h/j/k/l = h/j/k/l
alt+u=ualt+c/d=esc(就是alt+c或者d相當於Insert下按下esc)alt+C=看不懂alt+w/b/e=w/b/ealt+o/O/i/I/a/A=o/O/i/I/a/Aalt+x/X=x/Xalt+/=/(進入Normal尋找模式)alt+?=?(同上)
等等等等的,我是一個萌新,或許我亂說了:)Mac 上在系統自帶的鍵盤設置裡面試著把「caps lock」的功能替換成「control」,會解鎖各種各樣新的姿勢喲,誰用誰知道,不僅僅是 Vim 裡面各種手勢便利……就目前來看,我覺得換成「control」的好處要遠多於想方設法換成「esc」……
建議將Esc和CapsLK鍵對調,這樣按起來比較舒服。
以前的鍵盤Esc鍵就在現在CapsLK鍵的位置上
看了這麼多答案真的很失望。沒有一個真正了解計算機歷史的,vim插入模式下應該映射成類似emacs下的快捷鍵。
可以參考這個插件:https://github.com/tpope/vim-rsi
你要問為什麼?你會發現以上的快捷鍵操在bash和很多gnu的工具上都有。這就是計算機歷史的一部分。- 如果你真的想要在插入模式下使用ijhk來移動方向,可以參考iremap。但是作為一個vim老用戶不太建議這樣使用,vim和其他編輯器(比如emacs)最大的區別在於vim是一個模式編輯器。
推薦閱讀:
※vimium 按F 怎么让它默认在后台打开新标签页?
※如何使用vim整理聊天記錄?
※如何在 Ubuntu 下正確顯示 vim-airline 的箭頭符號?
※為什麼比起 Emacs,更多人使用 vim?
※vim8發布有一年了,有沒有基於vim8新特性開發的黑科技插件?
TAG:Vim |