(一)Vim模式
- vim的三種工作模式:命令模式(Command Mode) 、輸入模式(Input Mode)、末行模式(Last line Mode)
- 切換的方法:
- 命令模式下輸入 a、i、o進入輸入模式
- 輸入模式下按 Esc 進入命令模式
- 命令模式下輸入 : 進入末行模式
- 末行模式下指令錯誤則返回命令模式
- 簡寫記憶:
- 輸入-->命令:Esc
- 命令-->輸入:a i o A I O
- 以下所有命令都是在命令模式下
(二)常用Vim命令
-
這個圖涵蓋了常用的Vim命令
-
插入文本
-
I
—— 在當前行第一個非空字符前插入 -
gI
—— 在當前行第一列插入 -
a
—— 在光標后插入 -
A
—— 在當前行最后插入 -
o
—— 在下面新建一行插入 -
O
—— 在上面新建一行插入
-
-
文檔操作
:w
—— 保存修改:wq
—— 保存并退出ZZ
—— 保存并退出:x
—— 保存并退出:q[uit]
—— 退出當前窗口-
刪除
x
—— 刪除光標所在位置的一個字符nx
—— 刪除光標所在位置的后面n個字符dw
—— 向后刪除一個單詞db
—— 向前刪除一個單詞dd
—— 刪除光標所在行ndd
—— 刪除從光標所在行開始的n行-
移動
0
—— 移動到行首g0
—— 移到光標所在屏幕行行首$
—— 移動到行尾g$
—— 移動光標所在屏幕行行尾^
—— 移動到本行第一個非空白字符g^
—— 同 ^ ,但是移動到當前屏幕行第一個非空字符處n|
—— 把光標移到第n列上nG
—— 到特定的行數(n):n
—— 移動到第n行n+
—— 移至游標所在位置之后的第 n 列n-
—— 移至游標所在位置之前的第 n 列:$
—— 移動到最后一行gg
—— 到文件頭部G
—— 到文件尾部f/F+字符
—— 向前/向后移動到特定的字符(
—— 前移1句)
—— 后移1句{
—— 前移1段}
—— 后移1段j
—— 下移一行k
—— 上移一行gj
—— 移動到一段內的下一行gk
—— 移動到一段內的上一行+或Enter
—— 把光標移至下一行第一個非空白字符
上面的操作都可以配合n使用,比如輸入3h, 則光標向左移動3個字符-
復制
yw
—— 復制單詞yf
—— 復制當前字符到指定字符yy或Y
—— 復制當前行nyy
—— 復制當前行開始的n行y[n]w
—— 復制1(n)個詞y$
—— 從光標當前位置復制到行尾y0
—— 從光標當前位置復制到行首-
剪切
d
—— 刪除(剪切)在可視模式下選中的文本d$ or D
—— 刪除(剪切)當前位置到行尾的內容d[n]w
—— 刪除(剪切)1(n)個單詞d0
—— 刪除(剪切)當前位置到行首的內容[n] dd
—— 刪除(剪切)1(n)行-
粘貼
p
—— 在光標之后粘貼P
—— 在光標之前粘貼
(三)不常用Vim命令
-
插入文本
-
:r filename
—— 在當前位置插入另一個文件的內容 -
:[n]r filename
—— 在第n行插入另一個文件的內容 -
:r !date
—— 在光標處插入當前日期與時間(同理:r !command
可以將其它shell命令的輸出插入當前文檔)
-
-
文檔操作
:e file
—— 關閉當前編輯的文件,并開啟新的文件,如果對當前文件的修改未保存,vi會警告:e! file
—— 放棄對當前文件的修改,編輯新的文件:e+file
—— 開始新的文件,并從文件尾開始編輯:e+n file
—— 開始新的文件,并從第n行開始編輯:enew
——編譯一個未命名的新文檔:e
—— 重新加載當前文檔:e!
—— 重新加載當前文檔,并丟棄已做的改動:e#或ctrl+^
—— 回到剛才編輯的文件,很實用:f或ctrl+g
—— 顯示文檔名,是否修改,和光標位置:f filename
—— 改變編輯的文件名,這時再保存相當于另存為gf
—— 打開以光標所在字符串為文件名的文件:n1,n2w filename
—— 選擇性保存從某n1行到另n2行的內容-
刪除
-
x
—— 刪除游標所在該字元 -
X
—— 刪除游標所在之前的字元 -
r
—— 輸入新字元取代(replace)游標所在字元(如:ra將游標所在字元以 a 取代) -
R
—— 進入取代狀態,直到Esc
為止 -
s
—— 刪除游標所在之字元,并進入輸入模式,直到Esc
-
S
—— 刪除游標所在的一行,并進入輸入模式,直到Esc
-
-
移動
b
—— 移動到上個字的第一個字母w
—— 移動到下個字的第一個字母e
—— 移動到下個字的最后一個字母B
—— 移動到上一個單詞開頭,忽略一些標點W
—— 移動下一個單詞開頭,但忽略一些標點E
—— 移動到下一個單詞末尾,如果詞尾有標點,則移動到標點H
—— 移至視窗的第一行M
—— 移至視窗的中間那行L
—— 移至視窗的最后一行G
—— 移至該文件的最后一行+
—— 移至下一列的第一個字元處-
—— 移至上一列的第一個字元處ctrl+b
—— 屏幕后移動一頁ctrl+f
—— 屏幕向前移動一頁h或退格
—— 左移一個字符l或空格
—— 右移一個字符ge
—— 后移一個單詞,光標停在上一個單詞末尾gE
—— 同 ge ,不過‘單詞’包含單詞相鄰的標點tc
—— 把光標移到同一行的下一個c字符前Tc
—— 把光標移到同一行的上一個c字符后-
復制
y[n]l
—— 復制光標右邊1(n)個字符y[n]h
—— 復制光標左邊1(n)個字符:m,ny
—— 復制m行到n行的內容y1G或ygg
—— 復制光標以上的所有行yG
—— 復制光標以下的所有行-
剪切
d[n]l
—— 刪除(剪切)光標右邊1(n)個字符d[n]h
—— 刪除(剪切)光標左邊1(n)個字符:m,nd
—— 剪切m行到n行的內容d1G或dgg
—— 剪切光標以上的所有行dG
—— 剪切光標以下的所有行d/f
—— 這是一個比較高級的組合命令,它將刪除當前位置到下一個f之間的內容-
滾屏
ctrl-u
—— 文本向下滾到半屏。光標不隨文本移動。相當于文本的窗口上移半屏ctrl-d
—— 窗口向下移動半屏,相當于文本向上滾動了半屏ctrl-e
—— 向上滾動一行ctrl-y
—— 向下滾動一行ctrl-f
—— 向前滾動一屏(forward)ctrl-b
—— 向后滾動一屏(backward)zt
—— 把當前行置于屏幕頂端zb
—— 把當前行置于屏幕底zz
—— 把當前行置于屏幕中央-
標記
m{a-z}
—— 標記光標所在位置,局部標記,只用于當前文件m{A-Z}
—— 標記光標所在位置,全局標記。標記之后,退出Vim, 重新啟動,標記仍然有效{a-z}
—— 移動到標記位置'{a-z}
—— 移動到標記行的行首{0-9}
—— 回到上[2-10]次關閉vim時最后離開的位置``
—— 移動到上次編輯的位置。''也可以,不過``精確到列,而''精確到行 。如果想跳轉到更老的位置,可以按C-o,跳轉到更新的位置用C-i``"` —— 移動到上次離開的地方
``.` —— 移動到最后改動的地方
:marks
—— 顯示所有標記:delmarks a b
—— 刪除標記a和b:delmarks a-c
—— 刪除標記a、b和c:delmarks a c-f
—— 刪除標記a、c、d、e、f:delmarks!
—— 刪除當前緩沖區的所有標記
**使用標記可以快速移動。到達標記后,可以用Ctrl+o返回原來的位置。 Ctrl+o和Ctrl+i 很像瀏覽器上的 后退 和 前進 **
-
查找
-
/something
—— 在后面的文本中查找something -
?something
—— 在前面的文本中查找something -
/pattern/+number
—— 將光標停在包含pattern的行后面第number行上 -
/pattern/-number
—— 將光標停在包含pattern的行前面第number行上 -
n
—— 向后查找下一個 -
N
—— 向前查找下一個
-
-
替換
-
:s/old/new
—— 用new替換當前行第一個old -
:s/old/new/g
—— 用new替換當前行所有的old -
:n1,n2s/old/new/g
—— 用new替換文件n1行到n2行所有的old -
:%s/old/new/g
—— 用new替換文件中所有的old -
:%s/^/xxx/g
—— 在每一行的行首插入xxx,^表示行首 -
:%s/$/xxx/g
—— 在每一行的行尾插入xxx,$表示行尾
-
-
分屏編輯
vim -o file1 file2
—— 水平分割窗口,同時打開file1和file2vim -O file1 file2
—— 垂直分割窗口,同時打開file1和file2-
排版
-
<<
—— 向左縮進一個寬度 -
>>
—— 向右縮進一個寬度 -
:ce(nter)
—— 本行文字居中 -
:le(ft)
—— 本行文字靠左 -
:ri(ght)
—— 本行文字靠右
-
-
拼寫檢查
:set spell
—— 開啟拼寫檢查功能:set nospell
——關閉拼寫檢查功能]s
—— 移到下一個拼寫錯誤的單詞[s
——作用與上一命令類似,但它是從相反方向進行搜索z=
—— 顯示一個有關拼寫錯誤單詞的列表,可從中選擇zg
—— 告訴拼寫檢查器該單詞是拼寫正確的zw
—— 與上一命令相反,告訴拼寫檢查器該單詞是拼寫錯誤的
參考文章推薦
Vim 常用命令大全
Linux基礎命令和Vim常用命令
不定期完善中...