我這臺系統是centos 7,預裝的vim 7.4版本。
Vim編輯器有3種模式,分別是命令模式,輸入模式,末行模式。
命令模式:剛剛你打開文件進入時候就是命令模式,可以復制,刪行等操作
輸入模式:可以輸入你想要的內容
末行模式:在最下邊,除編輯模式,可以輸入諸多管理員命令。
啟動vim
vim -c cmd file: 在打開文件前,先執行指定的命令;
vim -r file: 恢復上次異常退出的文件;
vim -R file: 以只讀的方式打開文件,但可以強制保存;
vim -y num file: 將編輯窗口的大小設為num行;
vim + file: 從文件的末尾開始;
vim +num file: 從第num行開始;
vim +/string file: 打開file,并將光標停留在第一個找到的string上。
操作文檔
:e file –關閉當前編輯的文件,并開啟新的文件。 如果對當前文件的修改未保存,vi會警告。
:e! file –放棄對當前文件的修改,編輯新的文件。
:e file – 開始新的文件,并從文件尾開始編輯。
:e n file – 開始新的文件,并從第n行開始編輯。
:e – 重新加載當前文檔。
:e! – 重新加載當前文檔,并丟棄已做的改動。
:e#或ctrl+^ – 回到剛才編輯的文件,很實用。
:f或ctrl+g – 顯示文檔名,是否修改,和光標位置。
:f filename – 改變編輯的文件名,這時再保存相當于另存為。
gf – 打開以光標所在字符串為文件名的文件。
:w – 保存修改。
:n1,n2w filename – 選擇性保存從某n1行到另n2行的內容。
:wq – 保存并退出。
ZZ – 保存并退出。
:x – 保存并退出。
:q ——退出當前窗口。
屏幕移動
ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
n%: 到文件n%的位置。
zz: 將當前行移動到屏幕中央。
zt: 將當前行移動到屏幕頂端。
zb: 將當前行移動到屏幕底端。
光標移動
以下移動都是在normal模式下。
h或退格: 左移一個字符;
l或空格: 右移一個字符;
j: 下移一行;
k: 上移一行;
gj: 移動到一段內的下一行;
gk: 移動到一段內的上一行;
+或Enter: 把光標移至下一行第一個非空白字符。
-: 把光標移至上一行第一個非空白字符。
w: 前移一個單詞,光標停在下一個單詞開頭;
W: 移動下一個單詞開頭,但忽略一些標點;
e: 前移一個單詞,光標停在下一個單詞末尾;
E: 移動到下一個單詞末尾,如果詞尾有標點,則移動到標點;
b: 后移一個單詞,光標停在上一個單詞開頭;
B: 移動到上一個單詞開頭,忽略一些標點;
ge: 后移一個單詞,光標停在上一個單詞末尾;
gE: 同 ge ,不過‘單詞’包含單詞相鄰的標點。
(: 前移1句。
): 后移1句。
{: 前移1段。
}: 后移1段。
fc: 把光標移到同一行的下一個c字符處
Fc: 把光標移到同一行的上一個c字符處
tc: 把光標移到同一行的下一個c字符前
Tc: 把光標移到同一行的上一個c字符后
;: 配合f & t使用,重復一次
,: 配合f & t使用,反向重復一次
插入文本
i: 在光標前插入;一個小技巧:按8,再按i,進入插入模式,輸入=, 按esc進入命令模式,就會出現8個=。 這在插入分割線時非常有用,如30i+<esc>就插入了36個+組成的分割線。
I: 在當前行第一個非空字符前插入;
gI: 在當前行第一列插入;
a: 在光標后插入;
A: 在當前行最后插入;
o: 在下面新建一行插入;
O: 在上面新建一行插入;
:r filename在當前位置插入另一個文件的內容。
:[n]r filename在第n行插入另一個文件的內容。
:r !date 在光標處插入當前日期與時間。同理,:r !command可以將其它shell命令的輸出插入當前文檔。
標記
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。
查找與替換
/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。
剪切復制和寄存器
y: 復制在可視模式下選中的文本。
yy or Y: 復制整行文本。
y[n]w: 復制一(n)個詞。
y[n]l: 復制光標右邊1(n)個字符。
y[n]h: 復制光標左邊1(n)個字符。
yor D: 刪除(剪切)當前位置到行尾的內容。
d[n]w: 刪除(剪切)1(n)個單詞
d[n]l: 刪除(剪切)光標右邊1(n)個字符。
d[n]h: 刪除(剪切)光標左邊1(n)個字符。
d0: 刪除(剪切)當前位置到行首的內容
[n] dd: 刪除(剪切)1(n)行。
p: 在光標之后粘貼。
P: 在光標之前粘貼。