不知不覺使用vim已經有一些時間了,也算得上真正掌握使用技巧了吧。想不起來當初爲什麼去學習這個編輯器,也不記得怎麼學會使用編輯文件,只記得當初按完所有的鍵盤按鍵都沒有退出vim。一顆種子要經過多少風雨才能長成參天大樹,一條小溪要經過多少高山河流才能匯入大海。我們平常學習一樣東西,要經過多少困難,多少挫折,只有自己最清楚。
vim模式
普通編輯器都可以直接打開文件進行編輯、保存、使用快捷鍵等等,vim也具備這些功能,但是有些功能要在特定模式下才能使用。也是因爲這些模式,讓vim學習路線變得特別比較陡峭。vim具有多種模式,每種模式都有特定功能,有時你需要某些功能時,特意切換到指定模式下操作。使用鍵盤就可以隨意切換模式,讓vim不依賴鼠標操作,使用最小化組合鍵的操作,編輯效率大大提高。
普通模式
使用vim打開文件,進入普通模式,也是vim默認模式。在這個模式下,可以移動光標,複製、剪切、粘貼、刪除文件,在這個模式下輸入按鍵全部都是命令快捷鍵。比如你想進行復制操作,
yy
複製當前行,p
粘貼光標下面,dw
刪除一個單詞。使用a
切換到插入模式,還有其他的快捷鍵也能做到,:
切換到命令模式,Ctrl
+ v
進入選擇模式。
插入模式
左下角顯示
-- insert --
,表明vim正處於插入模式。這個模式會讀取鍵盤輸入,顯示在屏幕內,大部分編輯器打開就處於插入模式。使用Esc
可以重新進入普通模式,但是輸入字符不會保存到文件中。
可視模式
這個模式主要功能,可以使用移動命令,擴大高亮的文本區域。輸入命令將直接作用於選中文本區域。這就相當於你用鼠標選中一段文本區域,可以使用可以使用命令進行,複製、剪切、修改操作,但是vim並不需要鼠標。
選擇模式
這個模式要在可視模式下才能進入,可以直接使用退格鍵或者空格鍵刪除選中文本區域,或者直接輸入新的文本,替換選中高亮區域進入插入模式。
命令模式
在普通模式下輸入
:
,被解析成命令模式,:
後面接命令,回車直接執行命令。例如上圖,:q
回車直接退出vim編輯器。一般退出vim,需要在命令模式下輸入:wq
,保持退出。
Ex模式
在普通模式使用
Q
命令進入ex模式,這和命令行模式比較相似,在使用":visual"命令離開Ex模式前,可以一次執行多條命令。這個命令自己使用得很少,只是從google上知道這些。
平常在使用vim主要是在普通模式、插入模式、可視模式、命令模式進行操作,掌握這裏基本就可以熟悉使用vim了。
vim命令快捷鍵
全局移動
-
h
向左移動 ← -
j
向下移動 ↓ -
k
向上移動 ↑ -
l
向右移動 →
掌握這些快捷鍵,移動光標得時候,手機基本不會離開核心鍵盤區,有沒有像w
,a
,s
,d
移動角色的感覺🙂。
-
gg
快速移動到開頭 -
G
快速移動文本結尾 -
Ctrl
-f
向下翻頁 即 PageDown 翻頁 -
Ctrl
-b
向上翻頁 即 PageUp 翻頁 - 命令模式
:n
移動指定行數n
行內移動
-
w
或者W
移動到下一個單詞(word) -
b
或者B
移動到上一個單詞 -
e
移動下一個單詞結尾 -
^
移動到當前行第一個非空字符 -
0
移動到行首 -
$
移動到行尾 -
f
{char} 在行內正向查找char字符,光標會移動到目標char上 -
F
{char} 在行內反向查找char字符,光標會移動到目標char上 -
;
在行內正向重複搜索char字符,同上 -
,
在行內搜索上個一個char字符,反向搜索,同上
進入插入模式
要想編寫文本內容,還必須在插入模式下進行操作,以下命令由普通模式進入到插入模式
-
i
進入插入模式,在當前光標下輸入 -
o
在當前光標下面新建空白行插入字符 -
a
在光標後臺插入字符(append) -
A
在行尾插入,a$ => A -
I
在行首插入, i^ => I -
O
在光標上面新建空白行插入 -
s
刪除當前光標字符,進入插入模式
刪除
d
刪除字符(delete),d
本身沒有任何涵義,但是它可以跟其他命令組合,完成一些快速操作。
-
x
刪除當前字符 -
dd
刪除當前行 -
dw
從光標開始刪除整個單詞(delete word) -
db
從光標往前刪除到一個字符,反向移動刪除,如果 -
dbx
反向刪除整個單詞 -
d$
從當前位置刪除到行結尾 -
d^
反向刪除到行開頭 -
ndd
n 表示刪除行數,2dd 刪除兩行 -
ddn
同上
瞭解vim操作
Vim的強大很大程
度上源自操作符與動作命令相結合。在本節,我們將看到它是如何工作的,並考慮其寓義 --vim實用技巧第2版
<font size=5>操作符 + 動作命令 = 操作</font>
d<span style="color:red;">{motion}</span> 命令可以對一個字符dl
、一個完整單詞daw
或
一整個段落dap
進行操作,它作用的範圍由動作命令決
定。c<span style="color:red;">{motion}</span>、y<span style="color:red;">{motion}</span> 以及其他一些命令也類似,它們被統稱爲操作符(operator)。
<center>Vim的操作符命令</center>
命令 | 用途 |
---|---|
c | 修改(change) |
d | 刪除(delete) |
y | 複製到寄存器 |
g~ | 反轉大小寫 |
gu | 反轉小寫 |
gU | 反轉大寫 |
> | 增加縮進 |
< | 減小縮進 |
= | 自動縮進 |
看着上面刪除操作,是不是很容易理解操作符 + 動作命令 的模式,比如我們已經知道daw
刪除整個單詞,gU
反轉大寫,我們就可以使用gUaw
反轉整個單詞,gUap
反轉整個段落大寫
學會舉一反三
-
ea
在單詞後面插入 -
cw
修改整個單詞 -
c$
修改從光標到行尾的內容 -
c^
修改從光標到行首的內容 -
yw
複製從光標開始到詞尾的字符 -
y^
複製從光標到行首的內容 -
y$
複製從光標到行尾的內容 -
nyy
複製n行
vim複製剪切操作
由於vim中copy快捷鍵已經被change修改佔用了,只能使用y
代表複製(yank),粘貼(put)使用p
,d
其實是將內容剪切到寄存器中,剪切實現刪除操作。ddp
看起來是將兩行位置互換,其實先剪切當前行到寄存器中,p
粘貼到光標下的位置。主要記住使用命令y
+ 動作指令 或者 d
+ 動作指令,都是將文本暫存到寄存器中,使用p
或者P
進行粘貼。進行一個小demo練習,將變量field替換下面的函數參數foo。
let field = method();
fun(foo)
思路: 先使用yw
複製field字段,下移動foo中,dw
刪除foo,P
粘貼。但是你會發現粘貼結構居然還是foo。這是因爲dw
將刪除文本放入寄存器中,覆蓋了上面copy的變量。我們平常複製,剪切的文本都會暫存再無名寄存器中。
認識無名寄存器
在vim不使用單一寄存器進行復制、剪切、粘貼,而是爲這些操作提供多組寄存器。當使用刪除、複製與粘貼命令時,可以明確指定它們中的某一個進行操作。
在vim中的刪除、複製、粘貼都是使用寄存器,可以使用"{registerName}
方式命名寄存器。平時我們使用dd
,yy
命令,不指名寄存器名稱默認使用無名寄存器。倘若沒有指定要使用的寄存器,Vim將缺省使用無名寄存器,它可以用雙引號表示(參見 :h quote_quote )。無名寄存器可以使用""
表示,比如""yy
相當於yy
,""p
相當於p
數字寄存器
"[0-9]表示數字寄存器,數字越小表示最早在寄存器內容。例如"0
表示第一個進入寄存器文本,"1
表示第二個進入寄存器內容,類似值棧結構,先進後出排列。可以使用:reg
查看寄存器中內容。
比如上面的例子我們可以使用
"0P
粘貼field 變量,就不害怕被覆蓋的情況。
系統寄存器
在win系統中,可以在任意地方Ctrl c複製文本,vim是否可以粘貼非vim中複製內容?當然是可以的。"+
表示系統寄存器,可以讀取系統vim之外的系統粘貼板中的內容,可以粘貼內容,複製到系統粘貼板中去。ubuntu上需要安裝vim-gnome,纔可以正常使用系統寄存器。
粘貼
-
p
將寄存器中的文本粘貼到光標之後 -
P
將寄存器中的文本粘貼到光標之前
使用粘貼命令前面+寄存器名稱,就可以直接使用專用寄存器中的內容了,例如"+p
直接粘貼系統剪貼板中的內容。
在插入模式使用<Ctrl r>
+ 寄存器名稱粘貼字符文本。例如可以使用<Ctrl r>"
粘貼無名寄存器中內容。
本文章有部分內容參考 《vim實用技巧第2版》
,有興趣的同學可以買一個本來看看,真的很不錯哦!