高級一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的:
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站制作、做網(wǎng)站、余慶網(wǎng)絡推廣、小程序設計、余慶網(wǎng)絡營銷、余慶企業(yè)策劃、余慶品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供余慶建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
:qx 開始記錄宏,并將結果存入寄存器x
q 退出記錄模式
@x 播放記錄在x寄存器中的宏命令
稍微解釋一下,當在normal模式下輸入:qx后,你對文本的所有編輯動作將會被記錄下來,再次輸入q即退出了記錄模
式,然后輸入@x對剛才記錄下來的命令進行重復,此命令后可跟數(shù)字,表示要重復多少次,比如@x20,可以重復20次。這個在文本的批處理中是非常有用的。
同時編輯多個文件
在vim眾多的插件中,有一個叫minibuffer的插件,就是下面所說的標簽頁功能了,可以支持同時編輯多個文件。
標簽命令
:tabe fn 在一個新的標簽頁中編輯文件fn
gt 切換到下一個標簽頁
gT 切換到上一個標簽頁
:tabr 切換到第一個標簽頁
:tabl 切換到最后一個標簽頁
:tabm [N] 把當前tab移動到第N個tab之后
對,正如你所想象的那樣,跟eclipse, ue等的標簽頁是一個意思!
窗口命令
ctrl+w s 水平分割窗口
ctrl+w w 切換窗口
ctrl+w q 退出當前窗口(由于同時有多個文件,此命令不會影響其他窗口)
ctrl+w v 垂直分割窗口
其他
vim在保存之前不會對文件做實際的修改,只是加載到緩沖區(qū)中,對文件的編輯其實是對緩沖區(qū)的編輯,直到:w時才會存入物理文件。
:e file 把file加載到新的緩沖區(qū)中
:bn 跳轉到下一個緩沖區(qū)
:bd 刪除緩沖區(qū)(關閉文件)
:sp fn 分割窗口,并將fn加載到新的窗口中
退出編輯器
:w 將緩沖區(qū)寫入文件,即保存修改
:wq 保存修改并退出
:x 保存修改并退出
:q 退出,如果對緩沖區(qū)進行過修改,則會提示
:q! 強制退出,放棄修改
查找替換
/pattern 向后搜索字符串pattern
?pattern 向前搜索字符串pattern
n 下一個匹配(如果是/搜索,則是向下的下一個,?搜索則是向上的下一個)
N 上一個匹配(同上)
:%s/old/new/g 搜索整個文件,將所有的old替換為new
:%s/old/new/gc 搜索整個文件,將所有的old替換為new,每次都要你確認是否替換
復制粘貼
dd 刪除光標所在行
dw 刪除一個字(word)
x 刪除當前字符
X 刪除前一個字符
D 刪除到行末
yy 復制一行,此命令前可跟數(shù)字,標識復制多行,如6yy,表示從當前行開始復制6行
yw 復制一個字
y$ 復制到行末
p 粘貼粘貼板的內(nèi)容到當前行的下面
P 粘貼粘貼板的內(nèi)容到當前行的上面
]p 有縮進的粘貼,vim會自動調(diào)節(jié)代碼的縮進
"a 將內(nèi)容放入/存入a寄存器,可以支持多粘貼板
附:比如常用的一個寄存器就是系統(tǒng)寄存器,名稱為+,所以從系統(tǒng)粘貼板粘貼到vim中的命令為"+p,注意此處的+不表示操作符,二十一個寄存器。
移動光標
在vim中移動光標跟其他的編輯器中有很大的區(qū)別,不過一旦學會了,就會飛速的在文本中移動了。
h,j,k,l 上,下,左,右
ctrl-f 上翻一頁
ctrl-b 下翻一頁
% 跳到與當前括號匹配的括號處,如當前在{,則跳轉到與之匹配的}處
w 跳到下一個字首,按標點或單詞分割
W 跳到下一個字首,長跳,如end-of-line被認為是一個字
e 跳到下一個字尾
E 跳到下一個字尾,長跳
b 跳到上一個字
B 跳到上一個字,長跳
0 跳至行首,不管有無縮進,就是跳到第0個字符
^ 跳至行首的第一個字符
$ 跳至行尾
gg 跳至文件的第一行
gd 跳至當前光標所在的變量的聲明處
[N]G 跳到第N行,如0G,就等價于gg,100G就是第100行
fx 在當前行中找x字符,找到了就跳轉至
; 重復上一個f命令,而不用重復的輸入fx
tx 與fx類似,但是只是跳轉到x的前一個字符處
Fx 跟fx的方向相反
),( 跳轉到上/下一個語句
* 查找光標所在處的單詞,向下查找
# 查找光標所在處的單詞,向上查找
`. 跳轉至上次編輯位置
在屏幕上移動
H 移動光標到當前屏幕上最上邊的一行
M 移動光標到當前屏幕上中間的一行
L 移動光標到當前屏幕上最下邊的一行
書簽
ma 把當前位置存成標簽a
`a 跳轉到標簽a處
編輯
r 替換一個字符
J 將下一行和當前行連接為一行
cc 刪除當前行并進入編輯模式
cw 刪除當前字,并進入編輯模式
c$ 擦除從當前位置至行末的內(nèi)容,并進入編輯模式
s 刪除當前字符并進入編輯模式
S 刪除光標所在行并進入編輯模式
xp 交換當前字符和下一個字符
u 撤銷
ctrl+r 重做
. 重復上一個編輯命令
~ 切換大小寫,當前字符
g~iw 切換當前字的大小寫
gUiw 將當前字變成大寫
guiw 將當前字變成小寫
將當前行右移一個單位
將當前行左移一個單位(一個tab符)
== 自動縮進當前行
插入模式
i 從當前光標處進入插入模式
I 進入插入模式,并置光標于行首
a 追加模式,置光標于當前光標之后
A 追加模式,置光標于行末
o 在當前行之下新加一行,并進入插入模式
O 在當前行之上新加一行,并進入插入模式
Esc 退出插入模式
可視模式
標記文本
v 進入可視模式,單字符模式
V 進入可視模式,行模式
ctrl+v 進入可視模式,列模式,類似于UE的列模式
o 跳轉光標到選中塊的另一個端點
U 將選中塊中的內(nèi)容轉成大寫
O 跳轉光標到塊的另一個端點
aw 選中一個字
ab 選中括號中的所有內(nèi)容,包括括號本身
aB 選中{}括號中的所有內(nèi)容
ib 選中括號中的內(nèi)容,不含括號
iB 選中{}中的內(nèi)容,不含{}
對標記進行動作
塊右移
塊左移
y 復制塊
d 刪除塊
~ 切換塊中內(nèi)容的大小寫
vim命令總結
1.刪除字符
要刪除一個字符,只需要將光標移到該字符上按下"x"。
2.刪除一行
刪除一整行內(nèi)容使用"dd"命令。刪除后下面的行會移上來填補空缺。
3.刪除換行符
在Vim中你可以把兩行合并為一行,也就是說兩行之間的換行符被刪除了:命令是"J"。
4.撤銷
如果你誤刪了過多的內(nèi)容。顯然你可以再輸入一遍,但是命令"u" 更簡便,它可以撤消上一次的操作。
5.重做
如果你撤消了多次,你還可以用CTRL-R(重做)來反轉撤消的動作。換句話說,它是對撤消的撤消。撤消命令還有另一種形式,"U"命令,它一次撤消對一行的全部操作。第二次使用該命令則會撤消前一個"U"的操作。用"u"和CTRL-R你可以找回任何一個操作狀態(tài)。
6.追加
"i"命令可以在當前光標之前插入文本。
"a"命令可以在當前光標之后插入文本。
"o"命令可以在當前行的下面另起一行,并使當前模式轉為Insert模式。
"O"命令(注意是大寫的字母O)將在當前行的上面另起一行。
7.使用命令計數(shù)
假設你要向上移動9行。這可以用"kkkkkkkkk"或"9k"來完成。事實上,很多命令都可以接受一個數(shù)字作為重復執(zhí)行同一命令的次數(shù)。比如剛才的例子,要在行尾追加三個感嘆號,當時用的命令是"a!!!"。另一個辦法是用"3a!"命令。3說明該命令將被重復執(zhí)行3次。同樣,刪除3個字符可以用"3x"。指定的數(shù)字要緊挨在它所要修飾的命令前面。
8.退出
要退出Vim,用命令"ZZ"。該命令保存當前文件并退出Vim。
9.放棄編輯
丟棄所有的修改并退出,用命令":q!"。用":e!"命令放棄所有修改并重新載入該文件的原始內(nèi)容。
10.以Word為單位的移動
使用"w"命令可以將光標向前移動一個word的首字符上;比如"3w"將光標向前移動3個words。"b"命令則將光標向后移動到前一個word的首字符上。
"e"命令會將光標移動到下一個word的最后一個字符。命令"ge",它將光標移動到前一個word的最后一個字符上。、
11.移動到行首或行尾
"$"命令將光標移動到當前行行尾。如果你的鍵盤上有一個鍵,它的作用也一樣。"^"命令將光標移動到當前行的第一個非空白字符上。"0"命令則總是把光標移動到當前行的第一個字符上。鍵也是如此。"$"命令還可接受一個計數(shù),如"1$"會將光標移動到當前行行尾,"2$"則會移動到下一行的行尾,如此類推。"0"命令卻不能接受類似這樣的計數(shù),命令"^"前加上一個計數(shù)也沒有任何效果。
12.移動到指定字符上
命令"fx"在當前行上查找下一個字符x(向右方向),可以帶一個命令計數(shù)"F"命令向左方向搜索。"tx"命令形同"fx"命令,只不過它不是把光標停留在被搜索字符上,而是在它之前的一個字符上。提示:"t"意為"To"。該命令的反方向版是"Tx"。這4個命令都可以用";"來重復。以","也是重復同樣的命令,但是方向與原命令的方向相反。
13.以匹配一個括號為目的移動
用命令"%"跳轉到與當前光標下的括號相匹配的那一個括號上去。如果當前光標在"("上,它就向前跳轉到與它匹配的")"上,如果當前在")"上,它就向后自動跳轉到匹配的"("上去.
14.移動到指定行
用"G"命令指定一個命令計數(shù),這個命令就會把光標定位到由命令計數(shù)指定的行上。比如"33G"就會把光標置于第33行上。沒有指定命令計數(shù)作為參數(shù)的話, "G"會把光標定位到最后一行上。"gg"命令是跳轉到第一行的快捷的方法。
另一個移動到某行的方法是在命令"%"之前指定一個命令計數(shù)比如"50%"將會把光標定位在文件的中間. "90%"跳到接近文件尾的地方。
命令"H","M","L",分別將光標跳轉到第一行,中間行,結尾行部分。
15.告訴你當前的位置
使用CTRL-G命令。"set number"在每行的前面顯示一個行號。相反關閉行號用命令":set nonumber"。":set ruler"在Vim窗口的右下角顯示當前光標位置。
16.滾屏
CTRL-U顯示文本的窗口向上滾動了半屏。CTRL-D命令將窗口向下移動半屏。一次滾動一行可以使用CTRL-E(向上滾動)和CTRL-Y(向下滾動)。要向前滾動一整屏使用命令CTRL-F。另外CTRL-B是它的反向版。"zz"命令會把當前行置為屏幕正中央,"zt"命令會把當前行置于屏幕頂端,"zb"則把當前行置于屏幕底端.
17.簡單搜索
"/string"命令可用于搜索一個字符串。要查找上次查找的字符串的下一個位置,使用"n"命令。如果你知道你要找的確切位置是目標字符串的第幾次出現(xiàn),還可以在"n"之前放置一個命令計數(shù)。"3n"會去查找目標字符串的第3次出現(xiàn)。
"?"命令與"/"的工作相同,只是搜索方向相反."N"命令會重復前一次查找,但是與最初用"/"或"?"指定的搜索方向相反。
如果查找內(nèi)容忽略大小寫,則用命令"set ignorecase", 返回精確匹配用命令"set noignorecase" 。
18.在文本中查找下一個word
把光標定位于這個word上然后按下"*"鍵。Vim將會取當前光標所在的word并將它作用目標字符串進行搜索。"#"命令是"*"的反向版。還可以在這兩個命令前加一個命令計數(shù):"3*"查找當前光標下的word的第三次出現(xiàn)。
19.查找整個word
如果你用"/the"來查找Vim也會匹配到"there"。要查找作為獨立單詞的"the"使用如下命令:"/the\"。"\"是一個特殊的記法,它只匹配一個word的結束處。近似地,"\"匹配到一個word的開始處。這樣查找作為一個word的"the"就可以用:"/\"。
20.高亮顯示搜索結果
開啟這一功能用":set hlsearch",關閉這一功能:":set nohlsearch"。如果只是想去掉當前的高亮顯示,可以使用下面的命令:":nohlsearch"(可以簡寫為noh)。
21.匹配一行的開頭與結尾
^ 字符匹配一行的開頭。$字符匹配一行的末尾。
所以"/was$"只匹配位于一行末尾的單詞was,所以"/^was"只匹配位于一行開始的單詞was。
22.匹配任何的單字符
.這個字符可以匹配到任何字符。比如"c.m"可以匹配任何前一個字符是c,后一個字符是m的情況,不管中間的字符是什么。
23.匹配特殊字符
放一個反斜杠在特殊字符前面。如果你查找"ter。",用命令"/ter\。"
24.使用標記
當你用"G"命令從一個地方跳轉到另一個地方時,Vim會記得你起跳的位置。這個位置在Vim中是一個標記。使用命令" `` "可以使你跳回到剛才的出發(fā)點。
``命令可以在兩點之間來回跳轉。CTRL-O命令是跳轉到你更早些時間停置光標的位置(提示:O意為older). CTRL-I則是跳回到后來停置光標的更新的位置(提示:I在鍵盤上位于O前面)。
注:使用CTRL-I 與按下鍵一樣。
25.具名標記
命令"ma"將當前光標下的位置名之為標記"a"。從a到z一共可以使用26個自定義的標記。要跳轉到一個你定義過的標記,使用命令" `marks "marks就是定義的標記的名字。命令" 'a "使你跳轉到a所在行的行首," `a "會精確定位a所在的位置。命令:":marks"用來查看標記的列表。
命令delm!刪除所有標記。
26.操作符命令和位移
"dw"命令可以刪除一個word,"d4w"命令是刪除4個word,依此類推。類似有"d2e"、"d$"。此類命令有一個固定的模式:操作符命令+位移命令。首先鍵入一個操作符命令。比如"d"是一個刪除操作符。接下來是一個位移命。比如"w"。這樣任何移動光標命令所及之處,都是命令的作用范圍。
27.改變文本
操作符命令是"c",改變命令。它的行為與"d"命令類似,不過在命令執(zhí)行后會進入Insert模式。比如"cw"改變一個word?;蛘?,更準確地說,它刪除一個word并讓你置身于Insert模式。
"cc"命令可以改變整行。不過仍保持原來的縮進。
"c$"改變當前光標到行尾的內(nèi)容。
快捷命令:x 代表dl(刪除當前光標下的字符)
X 代表dh(刪除當前光標左邊的字符)
D 代表d$(刪除到行尾的內(nèi)容)
C 代表c$(修改到行尾的內(nèi)容)
s 代表cl(修改一個字符)
S 代表cc(修改一整行)
命令"3dw"和"d3w"都是刪除3個word。第一個命令"3dw"可以看作是刪除一個word的操作執(zhí)行3次;第二個命令"d3w"是一次刪除3個word。這是其中不明顯的差異。事實上你可以在兩處都放上命令記數(shù),比如,"3d2w"是刪除兩個word,重復執(zhí)行3次,總共是6個word。
28.替換單個字符
"r"命令不是一個操作符命令。它等待你鍵入下一個字符用以替換當前光標下的那個字符。"r"命令前輟以一個命令記數(shù)是將多個字符都替換為即將輸入的那個字符。要把一個字符替換為一個換行符使用"r"。它會刪除一個字符并插入一個換行符。在此處使用命令記數(shù)只會刪除指定個數(shù)的字符:"4r"將把4個字符替換為一個換行符。
29.重復改動
"."命令會重復上一次做出的改動。"."命令會重復你做出的所有修改,除了"u"命令CTRL-R和以冒號開頭的命令。"."需要在Normal模式下執(zhí)行,它重復的是命令,而不是被改動的內(nèi)容,
30.Visual模式
按"v"可以進入Visual模式。移動光標以覆蓋你想操縱的文本范圍。同時被選中的文本會以高亮顯示。最后鍵入操作符命令。
31.移動文本
以"d"或"x"這樣的命令刪除文本時,被刪除的內(nèi)容還是被保存了起來。你還可以用p命令把它取回來。"P"命令是把被去回的內(nèi)容放在光標之前,"p"則是放在光標之后。對于以"dd"刪除的整行內(nèi)容,"P"會把它置于當前行的上一行。"p"則是至于當前行的后一行。也可以對命令"p"和"P"命令使用命令記數(shù)。它的效果是同樣的內(nèi)容被取回指定的次數(shù)。這樣一來"dd"之后的"3p"就可以把被刪除行的3 份副本放到當前位置。
命令"xp"將光標所在的字符與后一個字符交換。
32.復制文本(VIM編輯器內(nèi)復制)
"y"操作符命令會把文本復制到一個寄存器3中。然后可以用"p"命令把它取回。因為"y"是一個操作符命令,所以你可以用"yw"來復制一個word. 同樣可以使用命令記數(shù)。如下例中用"y2w"命令復制兩個word,"yy"命令復制一整行,"Y"也是復制整行的內(nèi)容,復制當前光標至行尾的命令是"y$"。
33.文本對象
"diw" 刪除當前光標所在的word(不包括空白字符) "daw" 刪除當前光標所在的word(包括空白字符)
34.快捷命令
x 刪除當前光標下的字符("dl"的快捷命令)
X 刪除當前光標之前的字符("dh"的快捷命令)
D 刪除自當前光標至行尾的內(nèi)容("d$"的快捷命令)
dw 刪除自當前光標至下一個word的開頭
db 刪除自當前光標至前一個word的開始
diw 刪除當前光標所在的word(不包括空白字符)
daw 刪除當前光標所在的word(包括空白字符)
dG 刪除當前行至文件尾的內(nèi)容
dgg 刪除當前行至文件頭的內(nèi)容
如果你用"c"命令代替"d"這些命令就都變成更改命令。使用"y"就是yank命令,如此類推。
35.編輯另一個文件
用命令":edit foo.txt",也可簡寫為":e foo.txt"。
36.文件列表
可以在啟動Vim時就指定要編輯多個文件,用命令"vim one.c two.c three.c"。Vim將在啟動后只顯示第一個文件,完成該文件的編輯后,可以用令:":next"或":n"要保存工作成果并繼續(xù)下一個文件的編輯,命令:":wnext"或":wn"可以合并這一過程。
37.顯示當前正在編輯的文件
用命令":args"。
38.移動到另一個文件
用命令":previous" ":prev"回到上一個文件,合并保存步驟則是":wprevious" ":wprev"。要移到最后一個文件":last",到第一個":first".不過沒有":wlast"或者":wfirst"這樣的命令。可以在":next"和":previous"命令前面使用一個命令計數(shù)。
39.編輯另一個文件列表
不用重新啟動Vim,就可以重新定義一個文件列表。命令":args five.c six.c seven.h"定義了要編輯的三個文件。
40.自動存盤
命令":set autowrite","set aw"。自動把內(nèi)容寫回文件: 如果文件被修改過,在每個:next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令時進行。
命令":set autowriteall","set awa"。和 'autowrite' 類似,但也適用于":edit"、":enew"、":quit"、":qall"、":exit"、":xit"、":recover" 和關閉 Vim 窗口。置位本選項也意味著 Vim 的行為就像打開 'autowrite' 一樣。
41.切換到另一文件
要在兩個文件間快速切換,使用CTRL-^。
42.文件標記
以大寫字母命名的標記。它們是全局標記,它們可以用在任何文件中。比如,正在編輯"fab1.java",用命令"50%mF"在文件的中間設置一個名為F的標記。然后在"fab2.java"文件中,用命令"GnB"在最后一行設置名為B的標記。在可以用"F"命令跳轉到文件"fab1.java"的半中間?;蛘呔庉嬃硪粋€文件,"'B"命令會再把你帶回文件"fab2.java"的最后一行。
要知道某個標記所代表的位置是什么,可以將該標記的名字作為"marks"命令的參數(shù)":marks M"或者連續(xù)跟上幾個參數(shù)":marks MJK"
可以用CTRL-O和CTRL-I可以跳轉到較早的位置和靠后的某位置。
43.查看文件
僅是查看文件,不向文件寫入內(nèi)容,可以用只讀形式編輯文件。用命令:
vim -R file。如果是想強制性地避免對文件進行修改,可以用命令:
vim -M file。
44.更改文件名
將現(xiàn)有文件存成新的文件,用命令":sav(eas) move.c"。如果想改變當前正在編輯的文件名,但不想保存該文件,就可以用命令:":f(ile) move.c"。
45.分割一個窗口
打開一個新窗口最簡單的辦法就是使用命令:":split"。CTRL-W 命令可以切換當前活動窗口。
46.關閉窗口
用命令:"close".可以關閉當前窗口。實際上,任何退出文件編輯的命令":quit"和"ZZ"都會關閉窗口,但是用":close"可以阻止你關閉最后一個Vim,以免以意外地整個關閉了Vim。
47.關閉除當前窗口外的所有其他窗口
用命令:":only",關閉除當前窗口外的所有其它窗口。如果這些窗口中有被修改過的,你會得到一個錯誤信息,同時那個窗口會被留下來。
48.為另一個文件分隔出一個窗口
命令":split two.c"可以打開第二個窗口同時在新打開的窗口中開始編輯作為
參數(shù)的文件。如果要打開一個新窗口并開始編輯一個空的緩沖區(qū),使用命令:":new"。
49.垂直分割
用命令":vsplit或::vsplit two.c"。同樣有一個對應的":vnew"命令,用于垂直分隔窗口并在其中打開一個新的空緩沖區(qū)。
50.切換窗口
CTRL-W h 到左邊的窗口
CTRL-W j 到下面的窗口
CTRL-W k 到上面的窗口
CTRL-W l 到右邊的窗口
CTRL-W t 到頂部窗口
CTRL-W b 到底部窗口
51.針對所有窗口操作的命令
":qall"放棄所有操作并退出,":wall"保存所有,":wqall"保存所有并退出。
52.為每一個文件打開一個窗口
使用"-o"選項可以讓Vim為每一個文件打開一個窗口:
"vim -o one.txt two.txt three.txt"。
53.使用vimdiff查看不同
"vimdiff main.c~ main.c",另一種進入diff模式的辦法可以在Vim運行中操作。編輯文件"main.c",然后打開另一個分隔窗口顯示其不同:
":edit main.c"
":vertical diffpatch main.c.diff"。
54.頁簽
命令":tabe(dit) thatfile"在一個窗口中打開"thatfile",該窗口占據(jù)著整個的Vim顯示區(qū)域。命令":tab split/new"結果是新建了一個擁有一個窗口的頁簽。以用"gt"命令在不同的頁簽間切換。
我有vim的,都是自己平時用的時候積累的,現(xiàn)在第一次放出。
1 2 啟動Vim時的選項 vim -c cmd file: 在打開文件前,先執(zhí)行指定的命令;vim -r file: 恢復上次異常退出的文件;vim -R file: 以只讀的方式打開文件;vim -y num file: 將編輯窗口的大小設為num行;vim + file: 從文件的末尾開始;vim +num file: 從第num行開始;
Contents 2 3 光標的移動 h: 左移一個字符;l: 右移一個字符;j: 下移一個字符;k: 上移一個字符;w: 前移一個單詞,光標停在下一個單詞開頭;e: 前移一個單詞,光標停在下一個單詞末尾;b: 后移一個單詞,光標停在上一個單詞開頭;ge: 后移一個單詞,光標停在上一個單詞末尾;fc: 把光標移到同一行的下一個c字符處上面的操作都可以配合n使用,比如在正常模式(下面會講到)下輸入3h,則光標向左移動3個字符。
0或^:移動到行首。$: 移動到行尾。gg: 到文件頭部。G: 到文件尾部。nG: 到文件第n行。:ncr 移動到第n行。:$cr 移動到最后一行。n|: 把光標移到遞n列上。+或Enter:把光標移至下一行第一個非空白字符。-: 把光標移至上一行第一個非空白字符。H: 把光標移到屏幕最頂端一行。L: 把光標移到屏幕最底端一行。ctrl+f: 下翻一屏。ctrl+b: 上翻一屏。ctrl+d: 下翻半屏。ctrl+u: 上翻半屏。Contents 3 4 Vim的幾種模式 正常模式:可以使用快捷鍵命令,或按:輸入命令行。插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式??梢暷J剑赫DJ较掳磛可以進入可視模式,在可視模式下,移動光標可以選擇文本。塊選擇模式:正常模式下按ctrl+v進入。替換模式:正常模式下,按R進入。Contents 4 5 插入 i: 在光標前插入;I: 在當前行最前插入;a: 在光標后插入;A: 在當前行最后插入;o: 在下面新建一行插入;O: 在上面新建一行插入;:r filename 在當前位置插入另一個文件的內(nèi)容。:r !date 在光標處插入當前日期與時間。同理,:r!command可以將其它shell命令的輸出插入當前文檔。Contents 5 6 改寫 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: 刪除指定數(shù)目的行,并以所輸入文本代替之。注意,類似cnw,dnw,ynw的形式同樣可以寫為ncw,ndw,nyw。Contents 6 7 替換 r: 替換光標處的字符,同樣支持漢字。R: 進入替換模式,按esc回到正常模式。Contents 7 8 撤消與重做 [n] u: 取消一(n)個改動。ctrl + r: 重做最后的改動。U: 取消當前行中所有的改動。Contents 8 9 剪切和復制、粘貼 [n]x: 剪切光標右邊n個字符,相當于d[n]l。[n]X: 剪切光標左邊n個字符,相當于d[n]h。y: 復制在可視模式下選中的文本。yy or Y: 復制整行文本。 yy 是復制一行文本的命令,則5yy 表示復制從前行開始的5行y[n]w: 復制一(n)個詞。y[n]l: 復制光標右邊1(n)個字符。y[n]h: 復制光標左邊1(n)個字符。y$: 從光標當前位置復制到行尾。y0: 從光標當前位置復制到行首。:m,nycr 復制m行到n行的內(nèi)容。y1G或ygg:復制光標以上的所有行。yG: 復制光標以下的所有行。d: 刪除(剪切)在可視模式下選中的文本。d$ or D: 刪除(剪切)當前位置到行尾的內(nèi)容。d[n]w: 刪除(剪切)1(n)個單詞d[n]l: 刪除(剪切)光標右邊1(n)個字符。d[n]h: 刪除(剪切)光標左邊1(n)個字符。d0: 刪除(剪切)當前位置到行首的內(nèi)容[n] dd: 刪除(剪切)1(n)行。:m,ndcr 剪切m行到n行的內(nèi)容。d1G或dgg:剪切光標以上的所有行。dG: 剪切光標以下的所有行。p: 在光標之后粘貼。P: 在光標之前粘貼。Contents 9 10 查找和替換 /something: 在后面的文本中查找something。?something: 在前面的文本中查找something。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%: 找到對應的([{.Contents 10 11 多行縮進縮出 正常模式下,按兩下;光標所在行會縮進。如果先按了n,再按兩下;,光標以下的n行會縮進。對應的,按兩下;,光標所在行會縮出。如果在編輯代碼文件,可以用=進行調(diào)整。在可視模式下,選擇要調(diào)整的代碼塊,按=,代碼會按書寫規(guī)則縮排好?;蛘遪=,調(diào)整n行代碼的縮排。Contents 11 12 打開和關閉文檔 :e file –關閉當前編輯的文件,并開啟新的文件。如果對當前文件的修改未保存,vi會警告。:e! file –放棄對當前文件的修改,編輯新的文件。:e+file – 開始新的文件,并從文件尾開始編輯。:e+n file – 開始新的文件,并從第n行開始編輯。:enew –編譯一個未命名的新文檔。:e – 重新加載當前文檔。:e! – 重新加載當前文檔,并丟棄已做的改動。:w – 保存修改。:n1,n2w filename – 選擇性保存從某n1行到另n2行的內(nèi)容。:wq – 保存并退出。:x – 保存并退出。:saveas newfilename – 另存為Contents 12 13 多標簽編輯 :tabe filename – 在新的標簽中打開一個文件。:tabn – 切換到下一個標簽。:tabp – 切換到上一個標簽。Contents 13 14 分屏編輯Contents 13.1 14.1 水平分割 :split(:sp) – 把當前窗水平分割成兩個窗口。:split filename – 水平分割窗口,并在新窗口中顯示另一個文件。:nsplit(:nsp) – 水平分割出一個n行高的窗口。:new – 水平分割出一個窗口,并編輯一個新文件。ctrl+w + –當前窗口增高一行。也可以用n增高n行。ctrl+w - –當前窗口減小一行。也可以用n減小n行。ctrl+w _ –當前窗口擴展到盡可能的大。n ctrl+w _ – 當前窗口的高度設定為n行。Contents 13.2 14.2 垂直分割 :vsplit(:vsp) – 把當前窗口分割成水平分布的兩個窗口。:vnew – 垂直分割出一個新窗口。:vertical 水平分割的命令:相應的垂直分割。Contents 13.3 14.3 關閉子窗口 :qall – 關閉所有窗口,退出vim。:wall – 保存所有修改過的窗口。:only – 只保留當前窗口,關閉其它窗口。:close – 關閉當前窗口。(象 :q :x同樣工作 )Contents 13.4 14.4 切換和移動窗口 [如果支持鼠標,切換和調(diào)整子窗口的大小就簡單了。]ctrl+w ctrl+w: 切換到下一個窗口?;蛘呤莄trl+ww。ctrl+w h(l,j,k):切換到左(右,下,上)的窗口。ctrl+w t(b):切換到最上(下)面的窗口。BRctrl+w H(L,K,J): 將當前窗口移動到最左(右、上、下)面。正因為vim強大的分屏功能,我們可以把vim打造成功能強大的IDE。Contents 14 15 一次編輯多個文件 我們可以一次打開多個文件,如vi a.txt b.txt c.txt 使用:next(:n)編輯下一個文件。使用:previous編輯上一個文件。使用:wnext,保存當前文件,并編輯下一個文件。使用:wprevious,保存當前文件,并編輯上一個文件。使用:args顯示文件列表。Contents 15 16 文件的編碼 :e ++enc=utf8 filename, 讓vim用utf-8的編碼打開這個文件。:w ++enc=gbk,不管當前文件什么編碼,把它轉存成gbk編碼。:set fenc或:setfileencoding,查看當前文件的編碼。在vimrc中添加setfileencoding=utf-8,cp936,ucs-bom,vim會根據(jù)要打開的文件選擇合適的編碼。注意:編碼之間不要留空格。cp936對應于gbk編碼。ucs-bom對應于windows下的文件格式。讓vim正確處理文件格式和文件編碼,有賴于~/.vimrc的正確配置。Contents 16 17 執(zhí)行命令 :! cmd 執(zhí)行外部命令。:!! 執(zhí)行上一次的外部命令。@: 重復上一次的冒號命令。:sh 調(diào)用shell,用exit返回vim。:r !cmd 將命令的返回結果插入文件當前位置。:m,nw !cmd 將文件的m行到n行之間的內(nèi)容做為命令輸入執(zhí)行命令。Contents 17 18 一些快捷鍵(收集中) K: 打開光標所在詞的manpage。*: 向下搜索光標所在詞。#: 向上搜索光標所在詞。~: 反轉光標所在字符的大小寫。%: 移動到匹配的(),{}或[]上。 Contents 18 19.多行縮進
按v進入visual狀態(tài),選擇多行,用或縮進或縮出
通常根據(jù)語言特征使用自動縮進排版:在命令狀態(tài)下對當前行用== (連按=兩次), 或?qū)Χ嘈杏胣==(n是自然數(shù))表示自動縮進從當前行起的下面n行。你可以試試把代碼縮進任意打亂再用n==排版,相當于一般IDE里的code format。使用gg=G可對整篇代碼進行排版。
1、交換兩個字符位置xp;
上下兩行調(diào)換ddp;
上下兩行合并 J;
從當前位置復制到行尾y$
如果要粘貼到其他地方 p 就可以了
刪除所有行 dG
從當前位置刪除到行尾d$
2、:X
保存后就加密了
:X
然后系統(tǒng)會提示輸入密碼
輸入密碼后存盤退出
下次編輯時請使用
vi -x filename
系統(tǒng)會提示你輸入密碼,呵呵
例:以HP-UX為例
a、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
輸入密碼回車以后再保存,就加密成功了
b、解密
vi -C file 或者 vi -x file
在 Key: 后面輸入密碼進入file
:X
(Are you sure?(y/n)[n]:)回答y“
vim在默認的情況下,用/或?來查找字符串時,是區(qū)分大小寫的,有時候很不方便。
我們可以用
:set ic
這樣vim就不區(qū)分大小寫了。
如果我們像區(qū)分大小寫
:set noic
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
Contents 19 VIM宏的錄制和使用: Running a macro: @q
Viewing a macro: :registers | :reg m
Saving a macro: let @a='0fa' 也可以加到.vimrc中
Recording a macro: qlettercommandsq
Execute a macro: number@letter
Contents 20 如何快速從正文復制一段字符到Vim命令行?
先 yank
然后 ctrl+r "
詳見 :help :
Contents 21 shell 下匹配中文的搜索
:vimgrep /[^\x00-\xff]/g /app/www/gamelive/default.sdo.com/public/api/**/*.php
//把^去掉則匹配任意英文字符(非中文字符)
:cnext (:cn)
:cprevious (:cp)
:cwindow (:cw)
比如命令:
:vimgrep /an error/ *.c
就是在所有的.c文件中搜索an error。
:vimgrep/an error/*
意思是查找當前目錄下的文件中的an error,不包括子目錄
:vimgrep/an error/**
查找當前目錄并且包括遞歸子目錄下的所有文件
:vimgrep/an error/**/*.php
查找當前目錄并且包括遞歸子目錄下的所有PHP
vimgrep會產(chǎn)生一個error list,其實就是搜索結果列表。并會打開第一個符合的文件中第一個符合的位置。
Contents 22 以16進制編輯 首先,打開二進制文件時要加參數(shù)"-b",不然會報文件第一行錯誤.
$vim -b tuxcmd
打開文件后,默認是文本格式的,我們用":%!xxd"可以切換到十六進制編輯.
:%!xxd
是不是和utaredit很像呀?還可以加上參數(shù)-c來設置每行顯示多少字節(jié),比方用":%!xxd -c 16",就會顯示成16字節(jié)一行.
如果用":%!od"命令,則會隱藏左側的文本列.
不過,有一點不爽的就是改變文本列,不會改變16進制里的數(shù)據(jù),只能手動在16進制列做修改.在文本列里的修改是不會生效的.
注意:修改完成后,不要保存,要再用":%!xxd -r"切換成文本狀態(tài)格式再保存.
:%!xxd -r
匹配括號匹配:
% 可以讓光標從它當前所在的括號跳轉到與它相匹配的括號上去, 對花括號和
圓括號, 方括號都有效, 常用于手工檢查括號是否匹對.
緩沖文件切換:
map F12 ESC:bpRETURN " right arrow (normal mode) switches buffers (excluding minibuf)
"map F12 :TlistToggleCR
"map C-right ESC:bnRETURN " right arrow (normal mode) switches buffers (excluding minibuf)
"map C-left ESC:bpRETURN " left arrow (normal mode) switches buffers (excluding minibuf)