史上最全的Vim命令
vim命令 /正則表達式 /搜索 /定位 /分屏
一,vim vim編輯器是vi的進階版,是一個靜態文本編輯器。它的強大不遜色于任何最新的文本編輯器,
對Unix及Linux系統的任何版本,vi編輯器是完全相同的。Vi也是Linux中最基本的文本…
【1. Vim的幾種模式】
正常模式:可以使用快捷鍵命令,或按:輸入命令行。
插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式。
可視模式:正常模式下按v可以進入可視模式, 在可視模式下,移動光標可以選擇文本。
按V進入可視行模式, 總是整行整行的選中。ctrl+v進入可視塊模式。
替換模式:正常模式下,按R進入。
【2. 啟動Vim】
vim -c cmd file: 在打開文件前,先執行指定的命令;
vim -r file: 恢復上次異常退出的文件;
vim -R file: 以只讀的方式打開文件,但可以強制保存;
vim -M file: 以只讀的方式打開文件,不可以強制保存;
vim -y num file: 將編輯窗口的大小設為num行;
vim + file: 從文件的末尾開始;
vim +num file: 從第num行開始;
vim +/string file: 打開file,并將光標停留在第一個找到的string上。
vim –remote file: 用已有的vim進程打開指定的文件。 如果你不想啟用多個vim會話,這個很有用。
但要注意, 如果你用vim,會尋找名叫VIM的服務器;如果你已經有一個gvim在運行了,
你可以用gvim –remote file在已有的gvim中打開文件。
【3. 文檔操作】
:e file –關閉當前編輯的文件,并開啟新的文件。 如果對當前文件的修改未保存,vi會警告。
:e! file –放棄對當前文件的修改,編輯新的文件。
:e! — 重新加載當前文檔,并丟棄已做的改動。
:e#或ctrl+^ — 回到剛才編輯的文件,很實用。
:f或ctrl+g — 顯示文檔名,是否修改,和光標位置。
:f filename — 改變編輯的文件名,這時再保存相當于另存為。
:w — 保存修改。
:n1,n2w filename — 選擇性保存從某n1行到另n2行的內容。
:wq — 保存并退出。
ZZ — 保存并退出。
:x — 保存并退出。
:q[uit] ——退出當前窗口。(CTRL-W q或CTRL-W CTRL-Q)
:saveas newfilename — 另存為
【4. 基本移動】
以下移動都是在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使用,反向重復一次
上面的操作都可以配合n使用,比如在正常模式(下面會講到)下輸入3h, 則光標向左移動3個字符。
0: 移動到行首。
g0: 移到光標所在屏幕行行首。
^: 移動到本行第一個非空白字符。
g^: 同 ^ ,但是移動到當前屏幕行第一個非空字符處。
$: 移動到行尾。
g$: 移動光標所在屏幕行行尾。
n|: 把光標移到遞n列上。
nG: 到文件第n行。
:n<cr> 移動到第n行。
:$<cr> 移動到最后一行。
H: 把光標移到屏幕最頂端一行。
M: 把光標移到屏幕中間一行。
L: 把光標移到屏幕最底端一行。
gg: 到文件頭部。
G: 到文件尾部。
【5. 翻屏】
ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滾動一行。
ctrl+y: 向上滾動一行。
n%: 到文件n%的位置。
zz: 將當前行移動到屏幕中央。
zt: 將當前行移動到屏幕頂端。
zb: 將當前行移動到屏幕底端。
標記
使用標記可以快速移動。到達標記后,可以用Ctrl+o返回原來的位置。
Ctrl+o和Ctrl+i 很像瀏覽器上的 后退 和 前進 。
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! — 刪除當前緩沖區的所有標記。
:help mark-motions 查看更多關于mark的知識。
【6. 插入文本】
基本插入
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命令的輸出插入當前文檔。
改寫插入
c[n]w: 改寫光標后1(n)個詞。
c[n]l: 改寫光標后n個字母。
c[n]h: 改寫光標前n個字母。
[n]cc: 修改當前[n]行。
[n]s: 以輸入的文本替代光標之后1(n)個字符,相當于c[n]l。
[n]S: 刪除指定數目的行,并以所輸入文本代替之。
【7. 剪切復制和寄存器】
剪切和復制、粘貼
[n]x: 剪切光標右邊n個字符,相當于d[n]l。
[n]X: 剪切光標左邊n個字符,相當于d[n]h。
y: 復制在可視模式下選中的文本。
yy or Y: 復制整行文本。
y[n]w: 復制一(n)個詞。
y[n]l: 復制光標右邊1(n)個字符。
y[n]h: 復制光標左邊1(n)個字符。
y$: 從光標當前位置復制到行尾。
y0: 從光標當前位置復制到行首。
:m,ny<cr> 復制m行到n行的內容。
y1G或ygg: 復制光標以上的所有行。
yG: 復制光標以下的所有行。
yaw和yas:復制一個詞和復制一個句子,即使光標不在詞首和句首也沒關系。
d: 刪除(剪切)在可視模式下選中的文本。
d$ or D: 刪除(剪切)當前位置到行尾的內容。
d[n]w: 刪除(剪切)1(n)個單詞
d[n]l: 刪除(剪切)光標右邊1(n)個字符。
d[n]h: 刪除(剪切)光標左邊1(n)個字符。
d0: 刪除(剪切)當前位置到行首的內容
[n] dd: 刪除(剪切)1(n)行。
:m,nd<cr> 剪切m行到n行的內容。
d1G或dgg: 剪切光標以上的所有行。
dG: 剪切光標以下的所有行。
daw和das:剪切一個詞和剪切一個句子,即使光標不在詞首和句首也沒關系。
d/f<cr>:這是一個比較高級的組合命令,它將刪除當前位置 到下一個f之間的內容。
p: 在光標之后粘貼。
P: 在光標之前粘貼。
文本對象
aw:一個詞
as:一句。
ap:一段。
ab:一塊(包含在圓括號中的)。
y, d, c, v都可以跟文本對象。
寄存器
a-z:都可以用作寄存器名。”ayy把當前行的內容放入a寄存器。
A-Z:用大寫字母索引寄存器,可以在寄存器中追加內容。 如”Ayy把當前行的內容追加到a寄存器中。
:reg 顯示所有寄存器的內容。
“”:不加寄存器索引時,默認使用的寄存器。
“*:當前選擇緩沖區,”*yy把當前行的內容放入當前選擇緩沖區。
“+:系統剪貼板。”+yy把當前行的內容放入系統剪貼板。
【8. 查找與替換】
查找
/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,$表示行尾。
所有替換命令末尾加上c,每個替換都將需要用戶確認。 如:%s/old/new/gc,加上i則忽略大小寫(ignore)。
還有一種比替換更靈活的方式,它是匹配到某個模式后執行某種命令,
語法為 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
表示對于以一個空格和xyz開頭的行執行normal模式下的dd命令。
關于range的規定為:
如果不指定range,則表示當前行。
m,n: 從m行到n行。
0: 最開始一行(可能是這樣)。
$: 最后一行
.: 當前行
%: 所有行
正則表達式
高級的查找替換就要用到正則表達式。
\d: 表示十進制數(我猜的)
\s: 表示空格
\S: 非空字符
\a: 英文字母
\|: 表示 或
\.: 表示.
{m,n}: 表示m到n個字符。這要和 \s與\a等連用,如 \a\{m,n} 表示m 到n個英文字母。
{m,}: 表示m到無限多個字符。
**: 當前目錄下的所有子目錄。
:help pattern得到更多幫助。
【9. 分屏編輯】
vim -o file1 file2:水平分割窗口,同時打開file1和file2
vim -O file1 file2:垂直分割窗口,同時打開file1和file2
水平分割
:split(:sp) — 把當前窗水平分割成兩個窗口。(CTRL-W s 或 CTRL-W CTRL-S) 注意如果在終端下,CTRL-S可能會凍結終端,請按CTRL-Q繼續。
:split filename — 水平分割窗口,并在新窗口中顯示另一個文件。
:nsplit(:nsp) — 水平分割出一個n行高的窗口。
:[N]new — 水平分割出一個N行高的窗口,并編輯一個新文件。 (CTRL-W n或 CTRL-W CTRL-N)
ctrl+w f –水平分割出一個窗口,并在新窗口打開名稱為光標所在詞的文件 。
C-w C-^ — 水平分割一個窗口,打開剛才編輯的文件。
垂直分割
:vsplit(:vsp) — 把當前窗口分割成水平分布的兩個窗口。 (CTRL-W v或CTRL CTRL-V)
:[N]vne[w] — 垂直分割出一個新窗口。
:vertical 水平分割的命令: 相應的垂直分割。
【10. 關于多窗口】
:qall — 關閉所有窗口,退出vim。
:wall — 保存所有修改過的窗口。
:only — 只保留當前窗口,關閉其它窗口。(CTRL-W o)
:close — 關閉當前窗口,CTRL-W c能實現同樣的功能。 (象 :q :x同樣工作 )
調整窗口大小
ctrl+w + –當前窗口增高一行。也可以用n增高n行。
ctrl+w – –當前窗口減小一行。也可以用n減小n行。
ctrl+w _ –當前窗口擴展到盡可能的大。也可以用n設定行數。
:resize n — 當前窗口n行高。
ctrl+w = — 所有窗口同樣高度。
n ctrl+w _ — 當前窗口的高度設定為n行。
ctrl+w < –當前窗口減少一列。也可以用n減少n列。
ctrl+w > –當前窗口增寬一列。也可以用n增寬n列。
ctrl+w | –當前窗口盡可能的寬。也可以用n設定列數。
切換和移動窗口
如果支持鼠標,切換和調整子窗口的大小就簡單了。
ctrl+w ctrl+w: 切換到下一個窗口?;蛘呤莄trl+w w。
ctrl+w p: 切換到前一個窗口。
ctrl+w h(l,j,k):切換到左(右,下,上)的窗口。
ctrl+w t(b):切換到最上(下)面的窗口。<BR>
ctrl+w H(L,K,J): 將當前窗口移動到最左(右、上、下)面。
ctrl+w r:旋轉窗口的位置。
ctrl+w T: 將當前的窗口移動到新的標簽頁上。
【11. 快速編輯】
改變大小寫
~: 反轉光標所在字符的大小寫。
可視模式下的U或u:把選中的文本變為大寫或小寫。
gu(U)接范圍(如$,或G),可以把從光標當前位置到指定位置之間字母全部 轉換成小寫或大寫。
如ggguG,就是把開頭到最后一行之間的字母全部變為小 寫。再如gu5j,把當前行和下面四行全部變成小寫。
替換(normal模式)
r: 替換光標處的字符,同樣支持漢字。
R: 進入替換模式,按esc回到正常模式。
撤消與重做(normal模式)
[n] u: 取消一(n)個改動。
:undo 5 — 撤銷5個改變。
:undolist — 你的撤銷歷史。
ctrl + r: 重做最后的改動。
U: 取消當前行中所有的改動。
:earlier 4m — 回到4分鐘前
:later 55s — 前進55秒
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88969