vim命令大全

1.1 Vim的幾種模式

正常模式:可以使用快捷鍵命令,或按:輸入命令行。

插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進(jìn)入插入模式。

可視模式:正常模式下按v可以進(jìn)入可視模式, 在可視模式下,移動(dòng)光標(biāo)可以選擇文本。按V進(jìn)入可視行模式, 總是整行整行的選中。ctrl+v進(jìn)入可視塊模式。

替換模式:正常模式下,按R進(jìn)入。

2. 啟動(dòng)Vim

vim -c cmd file: 在打開文件前,先執(zhí)行指定的命令;

vim -r file: 恢復(fù)上次異常退出的文件;

vim -R file: 以只讀的方式打開文件,但可以強(qiáng)制保存;

vim -M file: 以只讀的方式打開文件,不可以強(qiáng)制保存;

vim -y num file: 將編輯窗口的大小設(shè)為num行;

vim + file: 從文件的末尾開始;

vim +num file: 從第num行開始;

vim +/string file: 打開file,并將光標(biāo)停留在第一個(gè)找到的string上。

vim –remote file: 用已有的vim進(jìn)程打開指定的文件。 如果你不想啟用多個(gè)vim會(huì)話,這個(gè)很有用。但要注意, 如果你用vim,會(huì)尋找名叫VIM的服務(wù)器;如果你已經(jīng)有一個(gè)gvim在運(yùn)行了, 你可以用gvim –remote file在已有的gvim中打開文件。

3. 文檔操作

:e file –關(guān)閉當(dāng)前編輯的文件,并開啟新的文件。 如果對(duì)當(dāng)前文件的修改未保存,vi會(huì)警告。

:e! file –放棄對(duì)當(dāng)前文件的修改,編輯新的文件。

:e+file – 開始新的文件,并從文件尾開始編輯。

:e+n file – 開始新的文件,并從第n行開始編輯。

:enew –編譯一個(gè)未命名的新文檔。(CTRL-W n)

:e – 重新加載當(dāng)前文檔。

:e! – 重新加載當(dāng)前文檔,并丟棄已做的改動(dòng)。

:e#或ctrl+^ – 回到剛才編輯的文件,很實(shí)用。

:f或ctrl+g – 顯示文檔名,是否修改,和光標(biāo)位置。

:f filename – 改變編輯的文件名,這時(shí)再保存相當(dāng)于另存為。

gf – 打開以光標(biāo)所在字符串為文件名的文件。

:w – 保存修改。

:n1,n2w filename – 選擇性保存從某n1行到另n2行的內(nèi)容。

:wq – 保存并退出。

ZZ – 保存并退出。

:x – 保存并退出。

:q[uit] ——退出當(dāng)前窗口。(CTRL-W q或CTRL-W CTRL-Q)

:saveas newfilename – 另存為

:browse e – 會(huì)打開一個(gè)文件瀏覽器讓你選擇要編輯的文件。 如果是終端中,則會(huì)打開netrw的文件瀏覽窗口; 如果是gvim,則會(huì)打開一個(gè)圖形界面的瀏覽窗口。 實(shí)際上:browse后可以跟任何編輯文檔的命令,如sp等。 用browse打開的起始目錄可以由browsedir來設(shè)置:

:set browsedir=last – 用上次訪問過的目錄(默認(rèn));

:set browsedir=buffer – 用當(dāng)前文件所在目錄;

:set browsedir=current – 用當(dāng)前工作目錄;

:Sex – 水平分割一個(gè)窗口,瀏覽文件系統(tǒng);

:Vex – 垂直分割一個(gè)窗口,瀏覽文件系統(tǒng);

4. 光標(biāo)的移動(dòng)

4.1 基本移動(dòng)

以下移動(dòng)都是在normal模式下。

h或退格: 左移一個(gè)字符;

l或空格: 右移一個(gè)字符;

j: 下移一行;

k: 上移一行;

gj: 移動(dòng)到一段內(nèi)的下一行;

gk: 移動(dòng)到一段內(nèi)的上一行;

+或Enter: 把光標(biāo)移至下一行第一個(gè)非空白字符。

-: 把光標(biāo)移至上一行第一個(gè)非空白字符。

w: 前移一個(gè)單詞,光標(biāo)停在下一個(gè)單詞開頭;

W: 移動(dòng)下一個(gè)單詞開頭,但忽略一些標(biāo)點(diǎn);

e: 前移一個(gè)單詞,光標(biāo)停在下一個(gè)單詞末尾;

E: 移動(dòng)到下一個(gè)單詞末尾,如果詞尾有標(biāo)點(diǎn),則移動(dòng)到標(biāo)點(diǎn);

b: 后移一個(gè)單詞,光標(biāo)停在上一個(gè)單詞開頭;

B: 移動(dòng)到上一個(gè)單詞開頭,忽略一些標(biāo)點(diǎn);

ge: 后移一個(gè)單詞,光標(biāo)停在上一個(gè)單詞末尾;

gE: 同ge,不過‘單詞’包含單詞相鄰的標(biāo)點(diǎn)。

(: 前移1句。

): 后移1句。

{: 前移1段。

}: 后移1段。

fc: 把光標(biāo)移到同一行的下一個(gè)c字符處

Fc: 把光標(biāo)移到同一行的上一個(gè)c字符處

tc: 把光標(biāo)移到同一行的下一個(gè)c字符前

Tc: 把光標(biāo)移到同一行的上一個(gè)c字符后

;: 配合f & t使用,重復(fù)一次

,: 配合f & t使用,反向重復(fù)一次

上面的操作都可以配合n使用,比如在正常模式(下面會(huì)講到)下輸入3h, 則光標(biāo)向左移動(dòng)3個(gè)字符。

0: 移動(dòng)到行首。

g0: 移到光標(biāo)所在屏幕行行首。

^: 移動(dòng)到本行第一個(gè)非空白字符。

g^: 同^,但是移動(dòng)到當(dāng)前屏幕行第一個(gè)非空字符處。

:移動(dòng)到行尾。</li><listyle="list?style:inherit!important">g:移動(dòng)到行尾。g: 移動(dòng)光標(biāo)所在屏幕行行尾。

n|: 把光標(biāo)移到遞n列上。

nG: 到文件第n行。

:n<cr> 移動(dòng)到第n行。

:$<cr> 移動(dòng)到最后一行。

H: 把光標(biāo)移到屏幕最頂端一行。

M: 把光標(biāo)移到屏幕中間一行。

L: 把光標(biāo)移到屏幕最底端一行。

gg: 到文件頭部。

G: 到文件尾部。

4.2 翻屏

ctrl+f: 下翻一屏。

ctrl+b: 上翻一屏。

ctrl+d: 下翻半屏。

ctrl+u: 上翻半屏。

ctrl+e: 向下滾動(dòng)一行。

ctrl+y: 向上滾動(dòng)一行。

n%: 到文件n%的位置。

zz: 將當(dāng)前行移動(dòng)到屏幕中央。

zt: 將當(dāng)前行移動(dòng)到屏幕頂端。

zb: 將當(dāng)前行移動(dòng)到屏幕底端。

4.3 標(biāo)記

使用標(biāo)記可以快速移動(dòng)。到達(dá)標(biāo)記后,可以用Ctrl+o返回原來的位置。 Ctrl+o和Ctrl+i 很像瀏覽器上的后退前進(jìn)。

m{a-z}: 標(biāo)記光標(biāo)所在位置,局部標(biāo)記,只用于當(dāng)前文件。

m{A-Z}: 標(biāo)記光標(biāo)所在位置,全局標(biāo)記。標(biāo)記之后,退出Vim, 重新啟動(dòng),標(biāo)記仍然有效。

`{a-z}: 移動(dòng)到標(biāo)記位置。

‘{a-z}: 移動(dòng)到標(biāo)記行的行首。

`{0-9}:回到上[2-10]次關(guān)閉vim時(shí)最后離開的位置。

“: 移動(dòng)到上次編輯的位置?!币部梢?,不過“精確到列,而”精確到行 。如果想跳轉(zhuǎn)到更老的位置,可以按C-o,跳轉(zhuǎn)到更新的位置用C-i。

`”: 移動(dòng)到上次離開的地方。

`.: 移動(dòng)到最后改動(dòng)的地方。

:marks 顯示所有標(biāo)記。

:delmarks a b – 刪除標(biāo)記a和b。

:delmarks a-c – 刪除標(biāo)記a、b和c。

:delmarks a c-f – 刪除標(biāo)記a、c、d、e、f。

:delmarks! – 刪除當(dāng)前緩沖區(qū)的所有標(biāo)記。

:help mark-motions 查看更多關(guān)于mark的知識(shí)。

5. 插入文本

5.1 基本插入

i: 在光標(biāo)前插入;一個(gè)小技巧:按8,再按i,進(jìn)入插入模式,輸入=, 按esc進(jìn)入命令模式,就會(huì)出現(xiàn)8個(gè)=。 這在插入分割線時(shí)非常有用,如30i+<esc>就插入了36個(gè)+組成的分割線。

I: 在當(dāng)前行第一個(gè)非空字符前插入;

gI: 在當(dāng)前行第一列插入;

a: 在光標(biāo)后插入;

A: 在當(dāng)前行最后插入;

o: 在下面新建一行插入;

O: 在上面新建一行插入;

:r filename在當(dāng)前位置插入另一個(gè)文件的內(nèi)容。

:[n]r filename在第n行插入另一個(gè)文件的內(nèi)容。

:r !date 在光標(biāo)處插入當(dāng)前日期與時(shí)間。同理,:r !command可以將其它shell命令的輸出插入當(dāng)前文檔。

5.2 改寫插入

c[n]w: 改寫光標(biāo)后1(n)個(gè)詞。

c[n]l: 改寫光標(biāo)后n個(gè)字母。

c[n]h: 改寫光標(biāo)前n個(gè)字母。

[n]cc: 修改當(dāng)前[n]行。

[n]s: 以輸入的文本替代光標(biāo)之后1(n)個(gè)字符,相當(dāng)于c[n]l。

[n]S: 刪除指定數(shù)目的行,并以所輸入文本代替之。

注意,類似cnw,dnw,ynw的形式同樣可以寫為ncw,ndw,nyw。

6. 剪切復(fù)制和寄存器

6.1 剪切和復(fù)制、粘貼

[n]x: 剪切光標(biāo)右邊n個(gè)字符,相當(dāng)于d[n]l。

[n]X: 剪切光標(biāo)左邊n個(gè)字符,相當(dāng)于d[n]h。

y: 復(fù)制在可視模式下選中的文本。

yy or Y: 復(fù)制整行文本。

y[n]w: 復(fù)制一(n)個(gè)詞。

y[n]l: 復(fù)制光標(biāo)右邊1(n)個(gè)字符。

y[n]h: 復(fù)制光標(biāo)左邊1(n)個(gè)字符。

y:從光標(biāo)當(dāng)前位置復(fù)制到行尾。</li><listyle="list?style:inherit!important">y0:從光標(biāo)當(dāng)前位置復(fù)制到行首。</li><listyle="list?style:inherit!important">:m,ny<cr>復(fù)制m行到n行的內(nèi)容。</li><listyle="list?style:inherit!important">y1G或ygg:復(fù)制光標(biāo)以上的所有行。</li><listyle="list?style:inherit!important">yG:復(fù)制光標(biāo)以下的所有行。</li><listyle="list?style:inherit!important">yaw和yas:復(fù)制一個(gè)詞和復(fù)制一個(gè)句子,即使光標(biāo)不在詞首和句首也沒關(guān)系。</li><listyle="list?style:inherit!important">d:刪除(剪切)在可視模式下選中的文本。</li><listyle="list?style:inherit!important">d:從光標(biāo)當(dāng)前位置復(fù)制到行尾。y0:從光標(biāo)當(dāng)前位置復(fù)制到行首。:m,ny復(fù)制m行到n行的內(nèi)容。y1G或ygg:復(fù)制光標(biāo)以上的所有行。yG:復(fù)制光標(biāo)以下的所有行。yaw和yas:復(fù)制一個(gè)詞和復(fù)制一個(gè)句子,即使光標(biāo)不在詞首和句首也沒關(guān)系。d:刪除(剪切)在可視模式下選中的文本。d?or D: 刪除(剪切)當(dāng)前位置到行尾的內(nèi)容。

d[n]w: 刪除(剪切)1(n)個(gè)單詞

d[n]l: 刪除(剪切)光標(biāo)右邊1(n)個(gè)字符。

d[n]h: 刪除(剪切)光標(biāo)左邊1(n)個(gè)字符。

d0: 刪除(剪切)當(dāng)前位置到行首的內(nèi)容

[n] dd: 刪除(剪切)1(n)行。

:m,nd<cr> 剪切m行到n行的內(nèi)容。

d1G或dgg: 剪切光標(biāo)以上的所有行。

dG: 剪切光標(biāo)以下的所有行。

daw和das:剪切一個(gè)詞和剪切一個(gè)句子,即使光標(biāo)不在詞首和句首也沒關(guān)系。

d/f<cr>:這是一個(gè)比較高級(jí)的組合命令,它將刪除當(dāng)前位置 到下一個(gè)f之間的內(nèi)容。

p: 在光標(biāo)之后粘貼。

P: 在光標(biāo)之前粘貼。

6.2 文本對(duì)象

aw:一個(gè)詞

as:一句。

ap:一段。

ab:一塊(包含在圓括號(hào)中的)。

y, d, c, v都可以跟文本對(duì)象。

6.3 寄存器

a-z:都可以用作寄存器名?!盿yy把當(dāng)前行的內(nèi)容放入a寄存器。

A-Z:用大寫字母索引寄存器,可以在寄存器中追加內(nèi)容。 如”Ayy把當(dāng)前行的內(nèi)容追加到a寄存器中。

:reg 顯示所有寄存器的內(nèi)容。

“”:不加寄存器索引時(shí),默認(rèn)使用的寄存器。

“*:當(dāng)前選擇緩沖區(qū),”*yy把當(dāng)前行的內(nèi)容放入當(dāng)前選擇緩沖區(qū)。

“+:系統(tǒng)剪貼板?!?yy把當(dāng)前行的內(nèi)容放入系統(tǒng)剪貼板。

7. 查找與替換

7.1 查找

/something: 在后面的文本中查找something。

?something: 在前面的文本中查找something。

/pattern/+number: 將光標(biāo)停在包含pattern的行后面第number行上。

/pattern/-number: 將光標(biāo)停在包含pattern的行前面第number行上。

n: 向后查找下一個(gè)。

N: 向前查找下一個(gè)。

可以用grep或vimgrep查找一個(gè)模式都在哪些地方出現(xiàn)過,

其中:grep是調(diào)用外部的grep程序,而:vimgrep是vim自己的查找算法。

用法為: :vim[grep]/pattern/[g] [j] files

g的含義是如果一個(gè)模式在一行中多次出現(xiàn),則這一行也在結(jié)果中多次出現(xiàn)。

j的含義是grep結(jié)束后,結(jié)果停在第j項(xiàng),默認(rèn)是停在第一項(xiàng)。

vimgrep前面可以加數(shù)字限定搜索結(jié)果的上限,如

:1vim/pattern/ % 只查找那個(gè)模式在本文件中的第一個(gè)出現(xiàn)。


其實(shí)vimgrep在讀純文本電子書時(shí)特別有用,可以生成導(dǎo)航的目錄。

比如電子書中每一節(jié)的標(biāo)題形式為:n. xxxx。你就可以這樣:

:vim/^d{1,}./ %

然后用:cw或:copen查看結(jié)果,可以用C-w H把quickfix窗口移到左側(cè),

就更像個(gè)目錄了。

7.2 替換

:s/old/new - 用new替換當(dāng)前行第一個(gè)old。

:s/old/new/g - 用new替換當(dāng)前行所有的old。

:n1,n2s/old/new/g - 用new替換文件n1行到n2行所有的old。

:%s/old/new/g - 用new替換文件中所有的old。

:%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。

:%s//xxx/g?在每一行的行尾插入xxx,/xxx/g?在每一行的行尾插入xxx,表示行尾。

所有替換命令末尾加上c,每個(gè)替換都將需要用戶確認(rèn)。 如:%s/old/new/gc,加上i則忽略大小寫(ignore)。

還有一種比替換更靈活的方式,它是匹配到某個(gè)模式后執(zhí)行某種命令,

語法為 :[range]g/pattern/command

例如 :%g/^ xyz/normal dd。

表示對(duì)于以一個(gè)空格和xyz開頭的行執(zhí)行normal模式下的dd命令。

關(guān)于range的規(guī)定為:

如果不指定range,則表示當(dāng)前行。

m,n: 從m行到n行。

0: 最開始一行(可能是這樣)。

$: 最后一行

.: 當(dāng)前行

%: 所有行

7.3 正則表達(dá)式

高級(jí)的查找替換就要用到正則表達(dá)式。

\d: 表示十進(jìn)制數(shù)(我猜的)

\s: 表示空格

\S: 非空字符

\a: 英文字母

\|: 表示 或

\.: 表示.

{m,n}: 表示m到n個(gè)字符。這要和 \s與\a等連用,如 \a\{m,n} 表示m 到n個(gè)英文字母。

{m,}: 表示m到無限多個(gè)字符。

**: 當(dāng)前目錄下的所有子目錄。

:help pattern得到更多幫助。

轉(zhuǎn)自:

vim 操作命令大全 - jjcoder的專欄 - CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容