正常模式:可以使用快捷鍵命令,或按:輸入命令行。
插入模式:可以輸入文本粹污,在正常模式下地粪,按i、a、o等都可以進(jìn)入插入模式檐蚜。
可視模式:正常模式下按v可以進(jìn)入可視模式魄懂, 在可視模式下,移動(dòng)光標(biāo)可以選擇文本闯第。按V進(jìn)入可視行模式市栗, 總是整行整行的選中。ctrl+v進(jìn)入可視塊模式咳短。
替換模式:正常模式下填帽,按R進(jìn)入。
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中打開文件勘天。
: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)募逞;
以下移動(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: 到文件尾部螃诅。
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)到屏幕底端门坷。
使用標(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í)。
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)前文檔癌压。
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辈讶。
[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)之前粘貼屯碴。
aw:一個(gè)詞
as:一句。
ap:一段膊存。
ab:一塊(包含在圓括號(hào)中的)导而。
y, d, c, v都可以跟文本對(duì)象。
a-z:都可以用作寄存器名隔崎〗褚眨”ayy把當(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)剪貼板题涨。
/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è)目錄了部翘。
: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)前行
%: 所有行
高級(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)自: