vim 使用心得

2021-06-20 17:40:25 字數 4526 閱讀 4995

以前總是很排斥使用這種很難記的編輯器,不過陸陸續續用了幾個月後,就漸漸離不開 vim 了。

回想了一下學習時的過程,發現 vim 的一致性對於學習者而言很有幫助,許多操作都能舉一反三地猜測出來。

下面的介紹只針對 vim 的初學者,其他人可以無視了。

安裝、執行和儲存之類的我就略過了,這裡只關注文字編輯。

首先要說的是 vim 主要有 2 種模式:命令模式和輸入模式。

後者和一般的文字編輯器差不多,前者則不能直接輸入文字,只能敲命令。比較奇葩的是,開啟時預設處於命令模式,所以不能直接輸入文字。

命令模式下有幾種方式進入輸入模式,我就不介紹了,而返回命令模式則按 esc 鍵即可。在命令模式裡取消未輸入完的命令,也可以按幾次 esc 鍵。

這裡我主要關注命令模式,畢竟輸入模式和其他編輯器比起來沒有優勢。

提醒一下:

vim 的命令非常多,不要試圖去死記硬背。

它的大多數命令都有規律可尋的,每天接觸幾個命令,然後積極地去使用它,很快就能上手了。

下面先從定位開始吧。

輸入行號,然後按 g,即可跳到該行。例如 10g 可以跳到第 10 行。這裡的 g 是 go 的意思,注意要大寫,你可以按 shift + g,也可以在開啟大寫字母鎖定時直接按 g。

如果不加行號的話,gg 會跳到第一行,g 會跳到最後一行。

還有個方法就是 : + 行號 + 《回車鍵》,例如 :10《回車鍵》 也可以跳到第 10 行。

嗯,這裡沒什麼技巧。

接下來就是大家熟悉的方向鍵了,在 vim 裡也可以用 hjkl 來代替,不過這裡我還是直接用方向鍵吧。

有個技巧就是數字加命令可以重複該命令。例如 → 可以右移乙個字元,而 10→ 可以右移 10 個字元,10↓ 可以下移 10 行。

不過使用方向鍵是很沒效率的,大部分時候都是按單詞來跳轉的,於是再記下這些命令:

w:跳到下乙個單詞的第乙個字元。這裡的 w 是 word 的意思。同樣可以加數字,例如 3w 可以跳到後面第 3 個單詞。

b:跳到上乙個單詞的第乙個字元。這裡的 b 是 back 的意思。同樣可以加數字。

e:跳到當前或下乙個單詞的最後乙個字元。這裡的 e 是 end 的意思。同樣可以加數字。

上面的命令都是小寫的,單詞會按標點符號來分隔。如果用大寫的話,就只以空格來分隔。

可是有時候單詞還不夠定位,例如 on_delete 和 ondelete,w 是不能定位到字元 d 和 d 的。於是再來看這些命令:

f + 任意字元:向後跳到該字元。例如 fd 會跳到下乙個 d 字元,fd 會跳到下乙個 d 字元。這裡的 f 是 find 的意思。同樣可以加數字,例如 3fd 會跳到後面第 3 個 d 字元。

t + 任意字元:向後跳到該字元前的乙個字元。例如 td 會跳到 d 前面的 _ 字元。這裡的 t 是 to 的意思。同樣可以加數字。

如果用大寫的話,就是向前跳轉了。

也許你會覺得 t 沒啥用。別急,後面會有用的。

可是字元有時還不夠定位,那麼再看這些:

0:跳到本行的第乙個字元。

^:跳到本行的第乙個非空字元。(正規表示式也用這個符號表示開始)

$:跳到本行的最後乙個字元。(正規表示式也用這個符號表示結束)

g_:跳到本行的最後乙個非空字元。(這個有什麼出處我也不知道)

(:跳到本句的第乙個字元。

):跳到本句的最後乙個字元。

:跳到本段的最後乙個字元。

[[:跳到第一行的第乙個非空字元。

]]:跳到最後一行的最後乙個非空字元。

+ 或 《回車鍵》:跳到下一行的第乙個非空字元。

-:跳到上一行的第乙個非空字元。

*:跳到下乙個相同的單詞。你沒猜錯,3* 可以跳到後面第 3 個相同的單詞。

#:跳到上乙個相同的單詞。同樣可以加數字。

%:跳到匹配的括號處。

列號 + |:跳到該行的第 n 個字元處。例如 3| 可以跳到第 3 個字元。

糟了,感覺資訊量好大。沒關係,我也用了好久才記住,用到的時候再記吧。而且大多數都不常用,我基本上只用 0、^ 和 $。

好了,現在移動告一段落,開始來編輯吧。

貌似從刪除開始比較好,於是看看這些命令:

x:刪除游標所在處的字元。沒錯,3x 就是向後刪除 3 個字元。

x:刪除游標前的字元。

d:刪除一組字元,它需要搭配其他命令。這裡的 d 是 delete 的意思。

以這段文字為例:

def get_pocket_items(access_token, 

count=1000, detail_type='******'):

下劃線標記的 c 是游標位置。

dd 可以刪除本行;3dd 可以向後刪除 3 行。

dgg 可以刪除到檔案頭,dg 可以刪除到檔案尾,d3gg 或 d3g 可以刪除到第 3 行。

d + 方向鍵可以往那個方向刪除,例如 d↑ 可以刪除本行和前一行,d2↓ 和 3dd 效果一樣,d5→ 可以向後刪除 5 個字元。

d + 列號 + |:刪除到第 n 個字元,向前向後都行。

dw 就會刪除到下乙個單詞,即把「count」刪除;d3w 則可以刪除 3 個單詞,即把「count=1000」刪除。

dw 會刪除到空格,即把「count=1000, 」刪除。

de 和 dw 的效果一般是一樣的(除非游標位置在單詞的結尾),而 de 會比 dw 少刪乙個空格。

db 自然和 dw 是相反的,d2b 可以把前面的「access_token, 」刪除掉。

還可以用 df《空格鍵》 或 dtd 來做到和 dw 一樣的目的;它們也支援數字,例如 d2f' 可以刪除到第二個 ' 字元,即把「count=1000, detail_type='******'」刪除。

d% 會向前刪除到括號,即把「(access_token, c」刪除。如果想刪除括號裡的所有字元,可以先按 % 跳到括號開頭,再按 d%,就把整個括號刪除了(後面會介紹更好的方法)。

d0 和 d$(或 d) 可以分別刪除到行首和行尾。

: + 行號 + d + 《回車鍵》 可以刪除該行,例如 :10d《回車鍵》 可以刪除第 10 行。

: + 行號 + , + 行號 + d + 《回車鍵》 可以刪除多行,例如 :10,20d《回車鍵》 可以刪除第 10 ~ 20 行。

雖然看上去好像資訊量好大,不過仔細和前面學的比較一下,就會發現其實是一樣的,不需要再次記憶。

不過還得補充 2 個輔助的命令,它們本身沒啥用,要搭配其他命令:

i:選擇包圍游標的單詞(w)、空格區分的單詞(w)、句子(s)、段落(p)、括號()]}>)或引號('")的內部。

a:選擇上述的完整部分。

仍以上面的例子來說:

di) 可以刪除括號裡的所有引數(即「access_token, count=1000, detail_type='******'」,da) 可以刪除括號及引數(即「(access_token, count=1000, detail_type='******')」)。它同樣也支援數字,如果有 2 層括號的話,d2i) 可以刪掉向外二層括號裡的所有字元。

現在,按 fm 定位到 m 字元。這時如果想刪除引號內部的所有字元,可以用 di' 或 diw,而 da' 則可以把引號也刪掉。

如果你經常要編輯 html 的話,da> 可以很輕鬆地刪除標籤,d2a> 可以刪除 2 層巢狀的標籤。

介紹完刪除,就來修改吧,用的命令是 c,意思是 change。它和刪除不同的是,它會在刪除後進入輸入模式。

cc 或 c:修改當前行。同樣,3cc 可以刪除 3 行,並開始編輯。(有沒有覺得 gg、dd 和 cc 的風格很像?)

cw:修改單詞。同樣,3cw 可以修改 3 個單詞。

它同樣能和 i、a 搭配,例如 ciw 可以修改乙個單詞,ci' 可以修改引號內的所有字元等。

其他就不需要再列出來了,基本和刪除一樣。

還有些命令很簡單,就不一一詳細介紹了。

r:替換,replace。rx 可以把當前字元替換成 x,5rx 可以把後 5 個字元都替換成 x,r 可以替換任意個字元。

y:複製,copy。基本同 d、c,yy 和 y 也能複製當前行。值得一提的是,被 d、c、x 刪除的字元,也會進入剪貼簿,可供貼上。

p:貼上,paste。貼上不需要選擇區域,但也可以用 3p 來貼上 3 次。此外,vim 的剪貼簿是可以存幾份資料的,可以用 " + 數字 + p 來貼上第 n 個剪貼簿的資料,例如 "2p 可以貼上上上次複製的內容。

最後來看視覺化編輯。

命令是 v,意思是 visual,可以看到被選擇的區域。

vw 可以選中游標所在的字元到單詞的結尾,viw 可以選中游標所在的單詞,va) 可以選中括號及其內部,等等。

光是選中當然還不夠。再按下 d 或 x,被選中的區域就被刪除了;按下 c,就修改選中的區域;按下 p,則用剪貼簿的內容替換選中的區域。

雖說熟練後並不需要看到視覺化的效果,就能腦補出來,但是對貼上命令卻是很有用的,因為手動刪除會覆蓋剪貼簿的內容,導致貼上時比較費勁。

我想就介紹到這吧,雖然只是很少的一部分知識,但可以看到 vim 在一致性方面做得有多出色。

回顧一下其實就這些命令的組合:w、e、b、f、t、x、d、c、r、y、p、i 和 a。多用用就會發現真不難記。

希望本文能幫助初學者少走點彎路。

vim使用心得

1.統計行數 s n 2.檔案首尾切換 檔案首 1g 檔案尾 g 3.在shell裡開啟幾個檔案並且分屏 vim on file1 file2 4.跳到指定行 number 5.替換 addr s 源字串 目的字串 option addr 表示檢索範圍,省略時表示當前行。a 1,20 表示從第1行到...

Vim的使用心得

這段時間一直在跟linux打交道,正好順便也學習了一下vi的使用,就此準備長期用下去了。目的很簡單,就是為了更熟練地使用linux而做準備。vi與其它windows環境下的文字編輯器不同在於它的操作方式幾乎可以全命令來進行工作,節省了滑鼠在螢幕上划拉的時間,而且新鮮感十足。我是在window環境下使...

三 Vim使用心得三

vim強大的功能大多聚集在普通模式下,大多數的命令都在普通模式下執行。但當我們在插入模式進行 編寫時,對於刪除 複製以及貼上命令來說,都會不可避免地會用上一些方便快捷的快捷鍵和命令。因此這次我們要學習的是插入模式和與之類似的替換模式,看看這些模式該如何高效地操作。在普通模式中,如果我們修改錯誤時,如...