一、Vim 模式介紹
-
普通模式(Normal mode)
在普通模式中,用的編輯器命令,比如移動光標(biāo),刪除文本等等。這也是Vim啟動后的默認(rèn)模式。這正好和許多新用戶期待的操作方式相反(大多數(shù)編輯器默認(rèn)模式為插入模式)。
Vim強(qiáng)大的編輯能來自于其普通模式命令。普通模式命令往往需要一個操作符結(jié)尾。例如普通模式命令
dd
刪除當(dāng)前行,第一個"d"的后面可以跟另外的移動命令來代替第二個"d",比如用移動到下一行的"j"鍵就可以刪除當(dāng)前行和下一行。另外還可以指定命令重復(fù)次數(shù),2dd
(重復(fù)dd兩次),和dj
的效果是一樣的。在學(xué)習(xí)了各種各樣的文本間移動/
跳轉(zhuǎn)的命令和其他的普通模式的編輯命令,并且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高效地進(jìn)行文本編輯。 -
插入模式(Insert mode)
在這個模式中,大多數(shù)按鍵都會向文本緩沖中插入文本。大多數(shù)新用戶希望文本編輯器編輯過程中一直保持這個模式。
-
可視模式(Visual mode)
這個模式與普通模式比較相似。但是移動命令會擴(kuò)大高亮的文本區(qū)域。高亮區(qū)域可以是字符、行或者是一塊文本。當(dāng)執(zhí)行一個非移動命令時,命令會被執(zhí)行到這塊高亮的區(qū)域上。Vim 的"文本對象"也能和移動命令一樣用在這個模式中。
-
選擇模式(Select mode)
這個模式和無模式編輯器的行為比較相似(Windows標(biāo)準(zhǔn)文本控件的方式)。這個模式中,可以用鼠標(biāo)或者光標(biāo)鍵高亮選擇文本,不過輸入任何字符的話,Vim會用這個字符替換選擇的高亮文本塊,并且自動進(jìn)入插入模式。
-
命令行模式(Command line mode)
在命令行模式中可以輸入會被解釋成并執(zhí)行的文本。例如執(zhí)行命令(
:
鍵),搜索(/
和?
鍵)或者過濾命令(!
鍵)。在命令執(zhí)行之后,Vim返回到命令行模式之前的模式,通常是普通模式。 -
Ex模式(Ex mode)
這和命令行模式比較相似,在使用
:visual
命令離開Ex模式前,可以一次執(zhí)行多條命令。 -
三種常用模式的切換
以上六種模式我們常用到就是普通模式、插入模式和命令行模式。
vim 啟動進(jìn)入普通模式,處于插入模式或命令行模式時只需要按
Esc
或者
Ctrl+[
即可進(jìn)入普通模式。普通模式中按i
(插入)或a
(附加)鍵都可以進(jìn)入插入模式,普通模式中按:
進(jìn)入命令行模式。命令行模式中輸入wq
回車后保存并退出 vim。
二、Vim 編輯器的基本操作
-
進(jìn)入 Vim
vim 后面加上你要打開的已存在的文件名或者不存在(則作為新建文件)的文件名。
vim practice_1.txt
直接使用vim也可以打開vim編輯器,但是不會打開任何文件。
vim
進(jìn)入命令行模式后輸入
:e 文件路徑
同樣可以打開相應(yīng)文件。 -
游標(biāo)移動
在普通模式下,使用方向鍵或者h(yuǎn),j,k,l鍵可以移動游標(biāo)。
按鍵 說明 h
左 l
右 j
下 k
上 w
移動到下一個單詞 b
移動到上一個單詞 -
進(jìn)入插入模式
在普通模式下使用下面的鍵將進(jìn)入插入模式,并可以從相應(yīng)的位置開始輸入。
命令 說明 i
在當(dāng)前光標(biāo)處進(jìn)行編輯 I
在行首插入 A
在行末插入 a
在光標(biāo)后插入編輯 o
在當(dāng)前行后插入一個新行 O
在當(dāng)前行前插入一個新行 cw
替換從光標(biāo)所在位置后到一個單詞結(jié)尾的字符 -
命令行模式下保存文檔
從普通模式輸入
:
進(jìn)入命令行模式,輸入w
并回車,保存文檔。輸入:w 文件名
可以將文檔另存為其他文件名或存到其它路徑下。 -
命令行模式下退出 vim
從普通模式輸入
:
進(jìn)入命令行模式,輸入wq
回車,保存并退出編輯。以下為其它幾種退出方式:
命令 說明 :q!
強(qiáng)制退出,不保存 :q
退出 :wq!
強(qiáng)制保存并退出 :w <文件路徑>
另存為 :saveas <文件路徑>
另存為 :x
保存并退出 :wq
保存并退出 -
普通模式下退出 vim
普通模式下鍵入
Shift+zz
即可保存退出 vim 。 -
普通模式下刪除 vim 文本信息
進(jìn)入普通模式,使用下列命令可以進(jìn)行文本快速刪除:
命令 說明 x
刪除游標(biāo)所在的字符 X
刪除游標(biāo)所在前一個字符 Delete
刪除游標(biāo)所在的字符 dd
刪除整行 dw
刪除一個單詞(英文) d$或D
刪除至行尾 d^
刪除至行首 dG
刪除到文檔結(jié)尾處 d1G
刪至文檔首部 除此之外,在命令之前加上數(shù)字,表示一次刪除多行,如:
2dd
表示一次刪除2行。
三、 Vim 文本編輯命令
-
重復(fù)執(zhí)行上次命令
在普通模式下
.
(小數(shù)點(diǎn))表示重復(fù)上一次的命令操作 -
執(zhí)行指定次數(shù)相同的命令
進(jìn)入普通模式輸入
N<command>
,N 表示重復(fù)后面的次數(shù),在普通模式下,你還可以使用
dw
或者daw
(delete a word)刪除一個單詞,dnw
(n替換為相應(yīng)數(shù)字) 表示刪除n個單詞。 -
使用命令進(jìn)行快速調(diào)整縮進(jìn)操作
縮進(jìn)操作均在普通模式下有效
- 普通模式下輸入
>>
整行將向右縮進(jìn)(用于格式化代碼) - 普通模式下輸入
<<
整行向左回退
- 普通模式下輸入
-
行間跳轉(zhuǎn)
如果默認(rèn)沒有顯示行號,請先進(jìn)入命令模式,輸入
:set nu
以顯示行號命令 說明 nG(n Shift+g)
游標(biāo)移動到第 n 行 gg
游標(biāo)移動到到第一行 G(Shift+g)
到最后一行 小技巧:你在完成依次跳轉(zhuǎn)后,可以使用
Ctrl+o
快速回到上一次(跳轉(zhuǎn)前)光標(biāo)所在位置 -
行內(nèi)跳轉(zhuǎn)
普通模式下使用下列命令在行內(nèi)按照單詞為單位進(jìn)行跳轉(zhuǎn)
命令 說明 w
到下一個單詞的開頭 e
到當(dāng)前單詞的結(jié)尾 b
到前一個單詞的開頭 ge
到前一個單詞的結(jié)尾 0或^
到行頭 $
到行尾 f<字母>
向后搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置 F<字母>
向前搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置 t<字母>
向后搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之前的一個字母(不常用) T<字母>
向前搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之后的一個字母(不常用) -
復(fù)制及粘貼文本
普通模式中使用y復(fù)制,使用 p 粘貼。
命令 說明 yy
復(fù)制游標(biāo)所在的整行( 3yy
表示復(fù)制3行)y^
復(fù)制至行首,或 y0
(不含光標(biāo)所在處字符)y$
復(fù)制至行尾(含光標(biāo)所在處字符) yw
復(fù)制一個單詞( y2w
復(fù)制兩個單詞)yG
復(fù)制至文本末 y1G
復(fù)制至文本開頭 p
代表粘貼至光標(biāo)后(下) P
代表粘貼至光標(biāo)前(上) -
剪切及粘貼
其實(shí)
dd
刪除命令就是剪切,你每次dd
刪除文檔內(nèi)容后,便可以使用p
來粘貼,也這一點(diǎn)可以讓我們實(shí)現(xiàn)一個很爽快的功能——交換上下行:ddp
四、查找與替換
-
替換和撤銷(Undo)命令
替換和Undo命令都是針對普通模式下的操作
命令 說明 r+<待替換字母>
將游標(biāo)所在字母替換為指定字母 R
連續(xù)替換,直到按下 Esc
cc
替換整行,即刪除游標(biāo)所在行,并進(jìn)入插入模式 cw
替換一個單詞,即刪除一個單詞,并進(jìn)入插入模式 C
替換游標(biāo)以后至行末 ~
反轉(zhuǎn)游標(biāo)所在字母大小寫 u{n}
撤銷一次或n次操作 U
撤銷當(dāng)前行的所有修改 Ctrl+r
redo,即撤銷undo的操作 -
shiftwidth 命令
shiftwidth 命令是指
>>
命令產(chǎn)生的縮進(jìn)(可以簡寫成sw
) 普通模式下輸入:進(jìn)入命令行模式下對 shiftwidth 值進(jìn)行設(shè)置可以控制縮進(jìn)和回退的字符數(shù)。獲取目前的設(shè)定值
:set shiftwidth?
設(shè)置縮進(jìn)為10個字符
:set shiftwidth=10
-
調(diào)整文本位置
命令行模式下輸入
:ce
(center)命令使本行內(nèi)容居中命令行模式下輸入
:ri
(right)命令使本行文本靠右命令行模式下輸入
:le
(left) 命令使本行內(nèi)容靠左 -
快速查找
使用 vim 打開文件進(jìn)行編輯(搜索高亮需在配置文件
.vimrc
中設(shè)置set hls
)- 普通模式下輸入
/icmp
然后回車即可查找字符串 icmp - 普通模式下輸入
n
查找下一個 icmp - 普通模式下輸入
?tcp
向上查找字符串 tcp - 普通模式下輸入
N
查找上一個出現(xiàn)的 tcp - 命令行模式下輸入
noh
然后回車即可取消搜索
- 普通模式下輸入
-
高級查找
- 普通模式下輸入
\*
尋找游標(biāo)所在處的單詞 - 普通模式下輸入
\#
同上,但\#
是向前(上)找,\*
則是向后(下)找 - 普通模式下輸入
g\*
同\*
,但部分符合該單詞即可 - 普通模式下輸入
g\#
同\#
,但部分符合該單詞即可 - 以上查找
n,N
的繼續(xù)查找命令依然可以用
- 普通模式下輸入
五、Vim 高級功能入門
-
使用 vim 編輯多個文件
編輯多個文件有兩種形式,一種是在進(jìn)入 vim 前使用的參數(shù)就是多個文件。另一種就是進(jìn)入 vim 后再編輯其他的文件。默認(rèn)進(jìn)入第一個文件的編輯界面
- 命令行模式下輸入
:n
編輯下一個文件,可以加!
即:n!
強(qiáng)制切換,之前一個文件的輸入沒有保存,僅僅切換到另一個文件。 - 命令行模式下輸入
:N
編輯上一個文件,可以加!
即:N!
強(qiáng)制切換,之前文件內(nèi)的輸入沒有保存,僅僅是切換到另一個文件。
- 命令行模式下輸入
-
進(jìn)入 vim 后打開新文件
- 命令行模式下輸入
:e 3.txt
打開新文件 3.txt - 命令行模式下輸入
:e#
回到前一個文件 - 命令行模式下輸入
:ls
可以列出以前編輯過的文檔 - 命令行模式下輸入
:b 2.txt
(或者編號)可以直接進(jìn)入文件 2.txt 編輯 - 命令行模式下輸入
:bd 2.txt
(或者編號)可以刪除以前編輯過的列表中的文件項(xiàng)目 - 命令行模式下輸入
:e! 4.txt
,新打開文件 4.txt,放棄正在編輯的文件 - 命令行模式下輸入
:f
顯示正在編輯的文件名 - 命令行模式下輸入
:f new.txt
,改變正在編輯的文件名字為 new.txt
- 命令行模式下輸入
-
恢復(fù)文件
如果因?yàn)閿嚯姷仍蛟斐晌臋n沒有保存,可以采用恢復(fù)方式,
vim -r
進(jìn)入文檔后,輸入:ewcover 1.txt
來恢復(fù) -
可視模式命令簡介
- 在普通模式下輸入
v
(小寫),進(jìn)入字符選擇模式,就可以移動光標(biāo),光標(biāo)走過的地方就會選取。再次按下v后就會取消選取。 - 在普通模式下輸入
Shift+v
(小寫),進(jìn)入行選擇模式,按下V
之后就會把整行選取,您可以上下移動光標(biāo)選更多的行,同樣,再按一次Shift+v
就可以取消選取。 - 在普通模式下輸入
Ctrl+v
(小寫),這是區(qū)域選擇模式,可以進(jìn)行矩形區(qū)域選擇,再按一次Ctrl+v
取消選取。 - 在可視模式下輸入
d
刪除選取區(qū)域內(nèi)容 - 在可視模式下輸入
y
復(fù)制選取區(qū)域內(nèi)容
- 在普通模式下輸入
-
視窗操作簡介
vim 可以在一個界面里打開多個窗口進(jìn)行編輯,這些編輯窗口稱為 vim 的視窗。 打開方法有很多種,例如可以使用在命令行模式下輸入
:new
打開一個新的 vim 視窗,并進(jìn)入視窗編輯一個新文件(普通模式下輸入Ctrl+w
也可以),除了:new
命令,下述列舉的多種方法也可以在命令模式或普通模式下打開新的視窗:- 命令行模式下輸入
:sp 1.txt
打開新的水平分屏視窗來編輯 1.txt - 命令行模式下輸入
:vsp 2.txt
打開新的垂直分屏視窗來編輯 2.txt - 普通模式下
Ctrl+ws
將當(dāng)前窗口分割成兩個水平的窗口 - 普通模式下
Ctrl+wv
將當(dāng)前窗口分割成兩個垂直的窗口 - 普通模式下
Ctrl+wq
即:q
結(jié)束分割出來的視窗。如果在新視窗中有輸入需要使用強(qiáng)制符!
即:q!
- 普通模式下
Ctrl+wo
打開一個視窗并且隱藏之前的所有視窗 - 普通模式下
Ctrl+wj
移至下面視窗 - 普通模式下
Ctrl+wk
移至上面視窗 - 普通模式下
Ctrl+wh
移至左邊視窗 - 普通模式下
Ctrl+wl
移至右邊視窗 - 普通模式下
Ctrl+wJ
將當(dāng)前視窗移至下面 - 普通模式下
Ctrl+wK
將當(dāng)前視窗移至上面 - 普通模式下
Ctrl+wH
將當(dāng)前視窗移至左邊 - 普通模式下
Ctrl+wL
將當(dāng)前視窗移至右邊 - 普通模式下
Ctrl+w-
減小視窗的高度 - 普通模式下
Ctrl+w+
增加視窗的高度
- 命令行模式下輸入