Vim 常用命令整理(鳥哥linux學習筆記)
VIM練習(鳥哥linux筆記)
vim的學習曲線相當大,所以,如果你一開始看到的是一大堆VIM的命令分類,必須經過長時間的練習,
才能掌握。學會vim並且使它會成為你最後一個文本編輯器。
vim的使用
基本上vim分為三種模式,分別是『一般指令模式』、『編輯模式』與『指令列命令模式』。
這三種模式的作用分別是:
一般指令模式
以vim打開一個文檔就直接進入一般指令模式了(這是預設的模式,也簡稱一般模式)。
在這個模式中,你可以使用『上下左右』按鍵來移動遊標,你可以使用『刪除字節』
和『刪除整列』來處理檔案內容,也可以使用『復制、粘帖』來處理你的文件資料。編輯模式
在一般指令模式中可以進行、復制、粘帖等等動作,但是卻無法編輯文件的內容。要等
你按下『i,I,o,O,a,A,r,R』等任何一個字母之後才會進入編輯模式。而要返回
一般指令模式,則必須要按下『ESC』按鍵才可以退出編輯模式。指令命令模式
在一般模式中,輸入『:/?』三個中的任何一個按鈕,就可以將遊標移動到最低下
那一列。在這個模式當中,可以提供你『搜尋資料』的動作,而讀取、存檔、大量取代
字元、離開vim、顯示行號等等動作則是在此模式中達成的!
vim按鍵說明
一般指令模式可用的按鈕說明,遊標移動、復制粘帖、搜尋取代等
遊標移動
按鍵 | 作用 |
---|---|
h或向左的方向鍵 | 向左移動遊標一個字節 |
j或向下的方向鍵 | 向下移動遊標一個字節 |
k或向上的方向鍵 | 向上移動遊標一個字節 |
l或向上的方向鍵 | 向上移動遊標一個字節 |
註:如果你將右手放在鍵盤上,你會發現hjkl是排列在一起的,因此可以使用這四個按
鍵來移動遊標。如果你想要進行多次移動的話,例如向下移動30列,可以使用"30j"的組合鍵,
亦即加上你想要進行的次數,按下動作即可。
按鍵 | 作用 |
---|---|
Ctrl+f | 屏幕向下移動一頁 |
Ctrl+b | 屏幕向上移動一頁 |
Ctrl+d | 屏幕向下移動半頁 |
Ctrl+u | 屏幕向上移動半頁 |
+ | 移動遊標到非空白字節的下一列 |
- | 移動遊標到非空白字節的上一列 |
n<space> | n表示數字,遊標會向右移動這一行的n個字節。 |
0或功能鍵Home | 數字0,移動到行首。 |
$或功能鍵End | 移動到行尾 |
H | 遊標移動到屏幕最上方那一行的第一個字節 |
M | 遊標移動到屏幕中央那一行的第一個字節 |
L | 遊標移動到屏幕最下方那一列的第一個字節 |
G | 遊標移動到文件的最後一行 |
nG | n為數字,遊標移動到這個文件的第n行。 |
gg | 遊標移動到這個文件的第一行,相當於1G |
n<Enter> | n為數字,遊標向下移動n行 |
搜索與取代
按鍵 | 作用 |
---|---|
/word | 向遊標之下尋找一個名稱為word的字符串。 |
?word | 向遊標之上尋找一個名稱為word的字符串 |
n | n為英文按鍵。代表『重復之前一個搜尋的動作』 |
N | N為英文按鍵。代表『反向重復之前一個搜尋的動作』 |
:n1,n2/word1/word2/g | n1與n2為數字,在第n1與n2行之間按尋找word1這個字符串,並將該字符串取代為word2. |
:1,\(s/word1/word2/g |從第一行到最後一行尋找word1字符串,並將字符串替換為word2 :1,\)s/word1/word2/gc | 從第一行到最後一行尋找word1字符串,並將該字符串取代為word2(且在替換前顯示提示字符給使用者 |
刪除、復制與粘帖
按鍵 | 作用 |
---|---|
x,X | 在一行當中,x為向後刪除一個字節,X為向前刪除一個字節。 |
nx | n為數字,連續向後刪除n個字節 |
dd | 刪除遊標所在行 |
ndd | n為數字,刪除遊標所在行向下的n行 |
d1G | 刪除遊標所在到第一行的所有內容 |
dG | 刪除遊標所在到最後一行的所有內容 |
d$ | 刪除遊標所在到本行最後一個字節 |
d0 | 刪除遊標所在到本行第一個字節 |
yy | 復制遊標所在的那一行 |
nyy | n為數字,復制遊標所在的向下n行 |
y1G | 復制遊標所在到第一行的所有內容 |
yG | 復制遊標所在到最後一行的所有內容 |
y0 | 復制遊標所在到本行行首的內容 |
y$ | 復制遊標所在到本行行尾的內容 |
p,P | p為將已復制的內容在遊標下一列粘帖,P則是在遊標上一列粘帖 |
J | 將遊標所在行與下一行合並 |
c | 重復刪除多個資料, 例如向下刪除10行,[10cj] |
u | 復原前一個動作 |
Ctrl+ r | 重做上一個動作 |
. | 重復前一個動作 |
註:u與Ctrl+r 是很常用的指令。一個是復原,另一個則是重做一次!
一般指令模式切換到編輯模式的可用按鍵說明
按鍵 | 作用 |
---|---|
i,I | 進入插入模式,i為『從目前遊標所在處插入』。I為『在目前所在行的第一個非空白字節處開始插入』 |
a,A | 進入插入模式,a為『從目前遊標所在處的下一個字節插入』。A為『從遊標所在行的最後一個字節處開始插入』 |
o,O | 進入插入模式,o為『從目前遊標所在處的下一行插入新的一行』。O為『在目前所在處的上一行插入一行新行』 |
r,R | 進入替換模式,r只會替換遊標所在處的那一個字節,R會一直開啟替換模式,直到按下ESC為止。 |
[ESC] | 退出編輯模式,回到一般指令模式 |
一般指令模式切換到指令模式的可用按鍵說明
按鍵 | 作用 |
---|---|
:w | 將編輯的內容寫入硬件中 |
:w! | 若文件屬性為只讀時,強制寫入該文件。不過,到底能不能寫入,還是跟你對該文件的權限有關。 |
:q | 離開vim 不保存 |
:q! | 強制離開vim且不保存修改 |
:wq | 保存後離開vim |
ZZ | 若文件修改過,則保存離開,否則不保存離開。 |
:w [filename] | 將編輯的文件儲存成另一個文件 |
:r [filename] | 在編輯的文件中,讀入另一個文件的內容。 |
:n1,n2 w [filename] | 將n1到n2的內容儲存成一個filename文件 |
:!command | 暫時離開vim到指令模式下執行shell中command的結果 |
vim區塊選擇
區塊選擇的按鍵 | 作用說明 |
---|---|
v | 字節選擇,會將遊標經過的地方反白選擇 |
V | 行選擇,會將遊標經過的行反白選擇 |
Ctrl + v | 區塊選擇,可以用長方形的方式選擇內容 |
y | 將反白的內容復制起來 |
d | 將反白的內容刪除掉 |
p | 將剛剛復制的區塊,在遊標所在處粘帖上 |
多文件編輯
同時開啟xxx1、xxxx2和xxxx3三個文件。
vim xxx1 xxxx2 xxxx3
多文件編輯的按鍵說明
按鍵 | 說明 |
---|---|
:n | 編輯下一個文件 |
:N | 編輯上一個文件 |
:files | 列出目前這個vim開啟的所有文檔 |
分屏功能
分屏模式下的按鍵功能說明
按鍵|功能說明
:-:|:-:
:sp[filename]|開啟一個新視窗,如果有filename,表示在新視窗開啟一個新文件,否則表示兩個視窗為同一個文件內容。
Ctrl+w+j|遊標移動到下面的窗口
Ctrl+w+k|遊標移動到上面的窗口
Ctrl+w+q|關閉窗口
vim常用指令圖
vim練習
各種插入模式
a -在光標後插入
o -在當前行後插入一個新行
O -在當前行前插入一個新行
cw -替換從光標所在位置後到一個單詞結尾的字符簡單的移動光標
0 -數字零,到行頭
^ -到本行第一個不是blank字符的位置。
$ -到本行行尾
g_-到本行最後一個不是blank字符的位置。
/pattern -搜索pattern的字符串拷貝/粘帖
p -在當前位置之後粘帖
P -在當前位置之前粘帖
yy -拷貝當前行相當於dd+pUndo
u -取消上一步的操作>
<C-S-r> 重做上一步操作打開/保存/退出/改變文件
:e
更好
下面,讓我們看看vim是怎麽重復自己的:
- . (小數點)可以重復上一次的命令
- N
更強
你要讓你的光標移動更有效率,你一定要了解下面的這些命令,千萬別跳過。
- NG/:N 到第N行
- gg 到第一行
- G 到最後一行
按單詞移動:
- w 到下一個單詞的開頭。
- e 到下一個單詞的結尾。
- E 到下一個由blank字符分隔符結尾的單詞的結尾。
- W 到下一個由blank字符分隔符開頭的單詞的開頭。
![e/w下面,讓我們來看看更迅速的光標移動:
- w 到下一個單詞的開頭。
- % 匹配括號移動,支持包括(,{,[,需要你先把光標移動括號上
- *和# 匹配光標當前所在的單詞,移動光標到下一個或上一個匹配單詞(*是下一個#是上一個)
更快
你一定要記住光標的移動,因為很多命令都可以和這些移動光標的命令連動。很多命令
都可以像下面這麽做:
<start position><command><end position>
例如:0y$
命令意味著:
- 0 先把光標跳到行首
- y 從這裏開始拷貝
- $ 拷貝到本行的最後一個字符
你也可以輸入,ye
,從當前位置拷貝到本單詞的最後一個字符。
你也可以輸入,y2/foo
,來拷貝2個"foo"之間的字符串。
還有很多時候,你並不一定要按y才會拷貝,下面的命令也會拷貝:
- d 刪除
- v 可視化的選擇
- gU 變大寫
- gu 變小寫
- 等等
可視化選擇是一個很有意思的命令,你可以先按v,然後移動光標,你就會看到文本被選擇
,然後你可以d
,也可以y
,也可以gU
gu
等等。
在當前行上移動光標 0 ^ $ f F t T , ;
- 0 到行首
- ^ 到本行第一個非blank字符
- $ 到行尾
- g__ 到本行最後一個不是blank字符的位置
- fa 到下一個為a的字符處,你也可以fs到下一個為s的字符處
- t, 到逗號前的第一個字符,逗號可以變成其他字符
- 3fa 在當前行查找第三個出現的a
- F和T 同f和t一樣,方向相反。
還有很有用的命令是dt"
刪除" "內的所有內容,直到遇到雙引號”
區域選擇 <aciton>a<object>或 <action>i<object>
在visual模式下,這些命令很強大,其命令格式為:
<action>a<object>和<action>i<object>
- action可以是任何的命令,如d(刪除),y(拷貝),v(可視化模式選擇)。
- object可能是:w 一個單詞,W 一個以空格為分隔符的單詞,s 一個句子,p 一個段落
也可能是一個特別的字符:"、`、)、}、]。
假設你有一個字符串(map(+)("foo")) 而光標在第一個o的位置。
- vi" 會選擇foo
- va" 會選擇"foo"
- vi) 會選擇"foo"
- va) 會選擇("foo")
- v2i) 會選擇map(+)("foo")
- v2a) 會選擇(map(+)("foo"))
塊操作<C-S-v>
塊操作,典型的塊操作:0 <C-V> <C-d> I-- [ESC]
- ^ 到行首
- <C-v> 開始塊操作
- <C-d> 向下移動(你也可 以用hjkl來移動)
- I-- [ESC] I是插入,插入"--",按ESC鍵來為每一行生效。
自動提示:<C-n> 和 <C-p>
在Insert模式下,你可以輸入一個單詞的開頭,然後按<C-p>或是<C-n>,
自動補齊功能就出現了……
宏錄制:qa 操作序列 q,@a, @@
- qa 把你的操作記錄在寄存器a
- @a 會replay被記錄的宏
- @@ 是一個快捷鍵用來replay最新錄制的宏
示例
在一個只有一行且這一行只有"1"的文本中,鍵入如下命令:
qayp<C-a>q
- qa 開始錄制
- yp 復制行
- <C-a> 增加1
- q 停止錄制
- @a 在1下面寫下2
- @@ 在2下面寫下3
現在做100@@會創建新的100行,並把數據增加到103
可視化選擇 v,V,<C-v>
前面,我們看到了<C-v>的示例,我們可以用V和v,一但選好了,你可以做下面
的事:
- J 把所有的行連接起來,變成一行
- <或> 左右縮進
- = 自動給縮進
在所有被選擇的行後面加上點東西:
- <C-v&g;
- 選中相關的行(可使用j或是<C-d>或是/pattern或是%等……)
- $ 到行尾
- A 輸入字符串,按ESC
分屏: :split和vsplit
下面是主要的命令,你可以使用VIM的幫助,:help split
你可以參考網上的分屏文章。
- :split
- <C-w><dir> :dir就是方向,可以是hjk或是方向鍵中的一個,啟用來
切換分屏- <C-w>_(或是<C-w>|): 最大化
- <C-w>+ (或是<C-w>-):增加尺寸
END
Vim 常用命令整理(鳥哥linux學習筆記)