VIM一般分幾種模式,通過不同模式來區分輸入的到底是文字還是命令:
1. Normal mode(common mode,以下簡稱 c-mode):
一進入 VIM 就是處於 c-mode,只能輸入指令,不能輸入文字。這些指令可能是光標移動的指令,也可能是編輯指令或尋找替換指令。
2. Insert mode(i-mode):
按 i/a/o 會進入 i-mode,此時可以在編輯區輸入文字,按 Esc 會回到 c-mode。
3. Ed mode(common-line mode,e-mode):
按:進入 e-mode,VIM命令提示區(編輯區最下方)會有一個冒號:出現,可以輸入命令行命令,按 Esc 回 c-mode。
4.replace mode
按R進入替換模式,Esc返回c-mode
tips:在vim中Esc鍵需要經常使用,可以通過修改注冊表將Esc鍵和Caps鍵的功能換一下。
光標在字符間移動
k 上移
h 左移 (Backspace )
l 右移 (空格鍵 )
j 下移
光標在單詞間移動(光標可以跨行,默認一個單詞由字母,數字和下劃線組成)
E e(end) 先移動到當前單詞結尾,若已經在結尾,則移動到下一個單詞結尾
B b(begin) 倒退到當前單詞的開頭,若已經在開頭,則移動到上一個單詞開頭
W w(word) 移動到下一個單詞開頭,標點符號也算一個單詞,空格不算(等於eb)
注意:大寫的命令會忽略標點符號。
整行移動
0 移動到當前行首
^ 移動到當前行的第一個非blank處
$ 移動到當前行行尾
+ 移動到下一行開頭(主鍵盤區shift + ”=鍵”,Enter也可以)
- 移動到上一行開頭
n| 移動到當前行的第n列
滾屏(光標跟著代碼走)
Ctrl+f(forward) 往前滾動一整屏
Ctrl+b(backward) 往回滾動一整屏
Ctrl+d(down) 往上滾動半屏
Ctrl+u(up) 往下滾動半屏
Ctrl+e 往後滾動一行
Ctrl+y 往前滾動一行
用z調整行
z<Enter> 將光標所在行移動到屏幕頂端
z. 將光標所在行移動到屏幕中間
z- 將光標所在行移動到屏幕低端
在屏幕范圍移動光標(不會滾屏)
H(hight) 將光標移動到屏幕頂端的行
M(middle) 移動到屏幕中央的行
L(low) 移動到屏幕底端的行
nH 移動到屏幕頂端往下的第n行
nL 移動到屏幕頂端往上的第n行
根據文本移動光標
% : 根據光標當前所在的括號移動到另一半對應的括號上,包括(, {, [
根據文本塊移動光標(編程時用得不多,編輯時使用)
文本塊也就是句子、段落、小節等
( 移動到當前句子開頭
) 移動到下一個句子開頭
{ 移動到當前這一段開頭
} 移動到下一段開頭
[[ 移動到當前這一節的開頭
]] 移動到下一節的開頭
其中,VIM以? . !等符號來標記一個句子,空白行來標記一個段落。
根據行號來移動
G 移動到文本末尾
gg 移動到文本開頭
nG 移動到第n行(同:n + enter命令一樣)
Ctrl+g VIM顯示區顯示當前行的完整信息(從根盤符一直到當前行)
tips:``兩個單反引號可以返回到使用G之前的位置,只能記住一個
插入
字符位置插入
i 在光標之前插入
I 在一行的開頭處插入
a 在光標之後插入
A 在一行的結尾處追加
o 在光標所在位置的下一行打開新行插入
O 在光標所在位置的上一行打開新行插入
r 替換光標所在處一個字符
合並行
J 將下一行內容合並到當前行,中間空一個空格
字符刪除
x 剪切光標所在處字符,不會自動跨行
X 剪切光標前一個字符
單詞刪除
dw 從光標所在字符開始刪除到下一個單詞開頭
de 刪除到本單詞末尾(標點也算一個單詞)
dE 刪除到本單詞末尾(標點不算單詞)
db 刪除到前一個單詞
dB 刪除到前一個單詞包括標點在內
行刪除
dd 剪切本行所有內容
d$ 剪切本行光標位置(含)之後的所有內容(同shift D)
d0 剪切本行光標位置(不含)之前的所有內容
搜索
* 往後匹配一個光標當前所在的單詞
# 往前匹配一個光標當前所在的單詞
/xyz 往光標下搜索xyz字符串
?xyz 往光標上搜索xyz字符串
n 下一個搜素目標
N 上一個搜索目標
:set hls 打開高亮
:set nohls 關閉高亮
復制(y)與粘貼
yw 復制從光標開始(含)到詞尾的字符
yb 復制從光標開始(不含)到詞首的字符
yy 將當前行復制到緩存區
nyy 將當前行向下n行復制到緩沖區
nyw 復制從光標開始的n個單詞(標點符號算一個單詞)
y^ 復制從光標到行首的內容(y$到行尾)
p 在光標之後粘貼剪切板裡的內容
P 在光標之前粘貼剪切板裡的內容
tips:含後不含前(往前不含當前光標所在字符,往後含當前光標所在字符)
另外可以給緩存區做標記,方便以後引用,需要用到雙引號:
"ayy, "byy等,使用時"ap或"bp,粘貼不同的內容。
替換
:s/old/new 用new替換當前行中首次出現的old
:s/old/new/g 用new替換行中所有的old
:n,m s/old/new/g 用new替換從n到m行裡所有的old
:%s/old/new/gic 用new替換當前文件裡所有的old,c為confirm
修改(c):指先刪除,再進入編輯
通過c指令後面的參數,刪除相應的內容,然後進入編輯模式修改。
C或c$ 對當前行光標後面的內容進行修改
c0或 c^ 對從光標處到當前行行首的內容進行修改
cc 或S 對當前行進行修改
cw 對光標所在字符到該單詞結束部分進行修改(先刪除再進入編輯狀態)
cfx 或cFx 對從光標到下一個字符 x 之間的文本進行修改
cFx 對從光標到上一個字符 x 之間的文本進行修改
cG 表示對當前行至文本末行內容進行修改
tips:c 命令所刪除的數據都存在緩沖區, 可以粘貼使用。
重復
. 重復上一次的命令
N<command> 重復某個命令N次,esc鍵執行該組合命令,enter鍵表示光標換行。
10I*<esc>:在一行開頭輸入十個*
5o###<esc>:在下5行中每一行開頭插入###
5h:左移5次
n+:向下跳n行
n-:向上跳n行
nx:剪切從光標開始的n個字符
3dd:刪除3行
撤銷
u 撤銷上一步操作,可執行多次
U 撤銷對當前行的所有操作
visual模式
在可視化模式下,通過高亮顯示,不但可以看到將要被操作的對象,而且可以對選中的文本塊整體進行操作。
v 進入字符可視化模式,文本選擇是以字符為單位。
V 進入行可視化模式,文本選擇是以行為單位。
ctrl-V或ctrl-Q 進入塊可視化模式
gv 再次選中前一次可視化模式時選擇的文本
可視模式下:
o光標移動到塊區的對角,O移動到水平的另一邊。
vi[或vi’或vi} 選中當前光標所在的整個[]或’’或{}內的內容
va[或va’或va} 同上,而且符號本身也會被選中
viw 選中一個單詞
打開/保存/退出/改變文件
:e <path/to/file> 打開一個文件
:w 保存文件
:saveas <path/to/file> 另存為 <path/to/file>
:wq 保存並退出
:q! 退出不保存
:qa! 強行退出所有的正在編輯的文件,就算別的文件有更改。
:bn 和 :bp 可以同時打開很多文件,使用這兩個命令來切換下一個或上一個文件。