Vim 實用技巧(1)

Vim 實用技巧(1)


1. 認識 . 命令

. 命令做用javascript

  • ==重複上次修改==。(參見 :h .

應用舉例java

  • x 命令會 ==刪除光標下的字符==,使用 . 會讓 ==重複刪除光標下的字符==。

屢次輸入 u 撤銷上述修改。vim

  • dd 命令刪除一整行,使用 . 命令會 ==重複刪除當前行==。markdown

  • >G ==增長從當前行到文檔末尾處的縮進層級==,使用 . 會重複該操做。oop

  • 每次 i 進入插入模式的那一刻,到返回普通模式爲止, Vim 會記錄每個按鍵操做,作出這樣一個修改再用 . 命令,它會從新執行全部這些按鍵操做。this

. 命令是一個微型的宏 macrospa


2. 不要自我重複

var foo = 1
var bar = 'a'
var foobar = foo + bar
複製代碼

在行尾添加分號:code

  • $ 移動到行尾,而後 a 編輯,輸入分號,Esc 完成修改
  • 對剩下的兩行能夠使用兩次 j$.
  • . 意味着 a;<Esc>,一個鍵頂三個鍵

有沒有改進的餘地?orm

  • 能夠使用 A 代替 $a。==A$a 封裝成了一個按鍵操做。==
  • 而後輸入分號,按 Esc
  • 以後就能夠使用 j. 來重複操做了。

一舉兩得對象

複合命令 等效的長命令 做用
C c$ 刪除到行尾並進入插入模式
s cl 刪除當前字符並進入插入模式
S ^C 刪除當前行內容並進入插入模式

3. 以退爲進

需求:把 JavaScript 的字符串拼接的加號先後都加上空格。

var foo = "method("+argument1+","+argument2+")";
複製代碼

要改爲:

var foo = "method(" + argument1 + "," + argument2 + ")";
複製代碼
  • f+ 查找加號

注:f{char} 查找下一處指定字符出現的位置

  • s空格+空格<Esc> 進行修改
  • ; 重複查找上次 f 查找的字符
  • . 重複上次修改
  • ;.
  • ;.

注意:不用輸入 4f+,用 ; 重複查找便可。

;. 重複查找 + 重複修改


4. 執行、重複、回退

重複頗有用,但有時候屢次按 . 或者 ; 的時候,容易出現多按的錯誤。

  • 若是多按了 . 能夠使用 u 撤銷上次修改。
  • 若是多按了 ; 能夠使用 , 跳轉回去,由於 , 會反向查找上次 f{char} 所查找的字符
目的 操做 重複 回退
作出一個修改 {修改} . u
在行內查找下一指定字符 f{字符} / t{字符} ; ,
在行內查找上一指定字符 F{字符} / T{字符} ; ,
在文檔中查找下一處匹配項 /pattern回車 n N
在文檔中查找上一處匹配項 ?pattern回車 n N
執行替換 :s/target/replacement & u
執行一系列修改 qx{修改}q @x u

注意:t{字符} 的在查找的字符前面停下來,而 T{字符} 在查找的字符後面停下來。


5. 查找並手動替換

需求 把文本中的 content 替換成 copy

...We're waiting for content before the site can go live...
...If you are content with this, let's go ahead with it...
...We'll launch as soon as we have the content...
複製代碼

:substitute 命令專門用於查找替換任務。

偷懶的辦法:無需輸入就能夠進行查找 做者雲:. 命令是我最喜好的 Vim 單鍵命令,排在第二的是 * 命令,此命令 ==能夠查找當前光標下的單詞==。

  1. /content:查找到 content 單詞

或者直接把光標移動到這個單詞上 2. *:查找該單詞 3. cwcopy<Esc>:修改 contentcopy 4. n:找到下一個 5. .:重複修改 6. n.n.n.:完成全部修改 7. 若是不想修改,不按 . 直接按 n 跳轉到下一個便可

移動光標到 content 上,而後按 *,會產生兩個結果:

  • 光標跳到下一個匹配項上
  • 全部出現這個詞的地方都被高亮顯示

若是沒有高亮,試着運行 :set hls


6. 認識 . 範式

==. 範式是最理想的編輯模式,用一鍵移動,另外一鍵執行。==

  • 只須要按一次鍵就能把光標移到下一個目標上
  • 都利用 . 命令重複上次修改

普通模式 normal modeVim 的默認狀態。

7. 停頓時請移開畫筆

畫家在休息時不會把畫筆放在畫布上。 普通模式就是 Vim 的天然放鬆狀態,其名字已經寓示了這一點。


8. 把撤銷單元切成塊

u 鍵會觸發撤銷命令,它會撤銷最新的修改。 在 Vim 中,咱們本身能夠控制撤銷命令的粒度。 從進入插入模式開始,直到返回普通模式爲止,在此期間輸入或刪除的任何內容都被當成一次修改。 所以,只要控制好 <Esc> 鍵的使用,就可以使撤銷命令做用於單詞、句子或段落。

多久離開一次插入模式? 做者喜歡讓每一個 「可撤銷塊」 對應一次思考過程。 無論停頓的時間有多短,每次停頓都是一個天然的中斷點,提示做者該退出插入模式了。

當處於插入模式中,另起一行最快的方式是按 <CR>。 可是有時做者更喜歡按 <Esc>o,這是由於做者有預感,也許在撤銷時做者想擁有更細的粒度。

通常來說,若是你停頓的時間長到足以問 「我應該退出插入模式嗎?」 這個問題,就退出吧。

==在插入模式中使用方向鍵移動光標會重置修改狀態== 若是在插入模式中使用了 <Up><Down><Left><Right> 這些光標鍵,將會產生一個新的撤銷快。 你能夠把這想象爲先切換回普通模式,而後用 hjkl 命令對光標進行了移動,可是沒有退出插入模式。 這會對 . 命令的操做產生影響。


9. 構造可重複的修改

Vim 中,評估哪一種方式最好時,最顯而易見的指標是效率,即哪一種手段須要的按鍵次數最少(又名 VimGolf)。 VimGolf vimgolf.com/

然而在平局時如何選擇勝者呢?

需求 The end is nigh 光標位於 h,如今要刪除單詞 nigh

反向刪除Vim 高爾夫得分 3

  • db 刪除從光標起始位置到單詞開頭的內容
  • x 刪除 h

正向刪除Vim 高爾夫得分 3

  • b 移動到單詞開頭
  • dw 刪除整個單詞

刪除整個單詞Vim 高爾夫得分 3 使用 aw 文本對象 text object

  • daw 刪除一個單詞(能夠解讀爲 delete a word

決勝局:哪一種方式最具重複性? 看哪一種方式能夠發揮 . 命令的最大威力。 反向刪除 . == x 正向刪除 . == dw 刪除整個單詞 . == daw 因此 daw 勝出!

相關文章
相關標籤/搜索