Vim反模式
無論你是在寫程式碼,寫詩歌或者寫散文,掌握Vim對你的編輯速度和流暢性都有巨大的提高。但是因為文字編輯器的學習曲線非常陡峭,因此在你初學文字編輯器的時候,你會養成一些壞的習慣。因為Vim讓你快速流暢的編輯,它很難讓你根除這些習慣,因為你可能甚至沒有注意到他們,但是你確實值得去克服他們。這裡我列出一些常見的壞習慣。
一次移動一行
如果你需要移動好幾行,通過按下【j】或者【k】一次移動一行是非常低效的。在Vim中有許多上下移動的方法。我找了兩種最有效的:按段落移動和按螢幕移動,他們依賴於你需要移動多遠,需要多精確的移動。
{ — Move to start of previous paragraph or code block.
} — Move to end of next paragraph or code block.
Ctrl+F — Move forward one screenful.
Ctrl+B — Move backward one screenful.
如果你正好需要精確的知道要去哪裡,那麼通過查詢導航是一種很好的方式(用/向前查詢,用?向後查詢)。
跳回你原來的地方也是很有用的技術,我們可以動過【``】(數字1旁邊的按鍵)實現,或者可以用【gi】返回上一次插入文字的地方。如果你喜歡,你甚至可以使用【g;】和【g,】在修改位置列表裡前後移動。
一次移動一個字元 相似的,使用【h】和【l】一次移動一個字元通常是一種浪費,當我們有【t】和【f】時:
t<char> — Move forward until the next occurrence of the character.
f<char> — Move forward over the next occurrence of the character.
T<char> — Move backward until the previous occurrence of the character.
F<char> — Move backward over the previous occurrence of the character.
使用【w】, 【W】, 【b】, 【B】, 【e】, and 【E】按照單詞移動也更好。同樣,通過查詢來導航也是很好的,還有不要忘記,你可以對於查詢結果進行復制,產出或者修改:
y/search<Enter>
y?search<Enter>
d/search<Enter>
d?search<Enter>
c/search<Enter>
c?search<Enter>
用游標進行單詞查詢
不要再為輸入,複製/貼上單詞費心了;只要使用【*】或【#】。當你充分使用這個技術時,你會發現它是如此的快捷。
刪除然後插入
Deleting text with intent to replace it by entering insert mode immediately afterward isn’t necessary: 刪除一段文字,然後立刻轉入插入模式。不需要這樣做:
d2wi
使用【c】會更快更簡潔地編輯:
c2w
這個操作有個附加的好處就是它讓整個操作變得可以重複(使用【.】進行重複)
使用方向鍵
在插入和普通模式中,Vim都允許你使用方向鍵進行移動,但是當你習慣了【hjkl】來進行移動,再使用方向鍵在文字中移動會讓你笨拙;在你集中注意力與Vim會話過程中,你應該讓你的手臂穩定在鍵盤的中央。同樣的,儘管【Home】鍵和【End】鍵在大多數文字編輯器裡功能相同,當我們也沒有任何特別理由去使用它們,因為我們有功能相近的【^】和【$】。
所以放棄方向鍵吧,通過使用一個簡單的權宜之計來完全禁止他們,至少暫時的禁止他們:
noremap <Up> <nop>
noremap <Down> <nop>
noremap <Left> <nop>
noremap <Right> <nop>
將你的手保持在鍵盤中間的好處不僅僅是為了加速;它讓你感覺更舒服,讓你可以在鍵盤前休息你的手腕而且也不會他們移動得太遠,同樣,對於一些人來說這樣避免了反覆某些動作形成的勞損。
移動到【Escape】
【Escape】鍵在現代鍵盤上離開中間有些遠,相對於Bill Joy設計vi時的鍵盤來說。按【Escape】通常是不必要的;【Ctrl+[】會更近些並且更舒服一些。相比你在新手時學著去按【Escape】而感到的笨拙,習慣使用這個組合按鍵不會需要太長時間。你可能同樣在考慮將別的十分不常用的按鍵(比如【Caps Lock】)對映成【Escape】,或者甚至對映一些非常規的按鍵組合,比如【jj】,來代替【Escape】。我覺得這或許有些極端,但是對於一些人來說這樣確實工作得很好:
inoremap jj <Esc>
移動到行首或者行尾然後插入
只需使用【I】和【A】即可(譯註:我通常使用$,^再加i,這樣確實省了不少功夫)。同樣,他們可以讓動作變得可以重複。
進去插入模式,然後開始新的一行 只需使用【o】和【O】即可在當前行的下面/上面增加新的一行,同時進入插入模式。
進入插入模式來刪除文字
刪除文字和插入模式是一個很明顯的矛盾。相反,你應該使用【d】來刪除文字。同樣,這個操作是可以重複的,它意味著你不需要一直按著【Backspace】不放。一般的,如果你在Vim一直按下某個鍵,這或許是一種更快的方法。
重複命令或者查詢
只需要輸入【@:】即可重複命令,或者使用【n】/【N】來重複查詢。如果它不是你最近使用過的命令或者查詢,但是它確實在你的命令歷史記錄裡,只需輸入【q:】或者【q/】,然後再列表中選擇你需要的重複命令。
重複替換
按下【&】
重複巨集呼叫
按下【@@】
以上只是一些編輯器常見的陷阱。想了解更多Vim技巧,歡迎查閱Vim Tips wiki。
歡迎參加iTran樂譯4期~
相關文章
- Vim末行模式(12)模式
- vim 列編輯模式模式
- Vim 的命令模式記錄模式
- Linux-vim文字編輯器-三種模式-vim裡的替換-vim檢視模式-對比檔案Linux模式
- Vim常見模式有幾種?模式
- vi和vim的編輯模式模式
- git進入vim模式的處理Git模式
- Linux中VIM的工作模式詳解!Linux模式
- VIM模式三種模式有什麼?linux系統學習模式Linux
- 倉儲模式到底是不是反模式?模式
- 反DDD模式之“複用”模式
- 【Medium 萬贊好文】ViewModel 和 LiveData:模式 + 反模式ViewLiveData模式
- Knative是FaaS的反模式嗎?模式
- 《SQL 反模式》 學習筆記SQL模式筆記
- 【轉載】Vim儲存只讀模式下的修改模式
- React 中 getDerivedStateFromProps 的用法和反模式React模式
- 程式設計師的那些反模式程式設計師模式
- Bean驗證反模式 - reflectoring.ioBean模式
- J2EE模式-控制反轉模式
- 極簡架構模式-控制反轉架構模式
- Optional.isPresent()是反模式的用法 - stephan模式
- Go Web 應用中常見的反模式GoWeb模式
- Java的Void方法是反模式的? - DZoneJava模式
- Vim
- .NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、依賴注入(DI)模式依賴注入
- [20210106]vim syntax txt.vim.txt
- vim學習筆記——三種基本模式和相關操作筆記模式
- vim編輯器有哪些模式?學習linux需要學什麼模式Linux
- 小例子 理解 Laravel 中的 控制反轉模式Laravel模式
- 五個程式碼審查反模式 - Trisha Gee模式
- 圖窮匕見-所有反DDD模式都是垃圾模式
- 反DDD模式之關係型資料庫模式資料庫
- Go 語言中常見的幾種反模式Go模式
- vim操作
- vim使用
- vim工具
- Vim 使用
- vim 分屏
- vim命令