1. 程式人生 > >vim的用法

vim的用法

vim的用法

    vi 常用用法
說明,所有命令都不包括“”,如果是“"”(半角雙引號),則是一個命令字符,請註意區分。

插入:
“i”從光標所在位置前開始
“I”光標移到當前行的行首,然後在其前插入文本
“a”光標當前所在位置之後追加新文本
“A”命令將把光標挪到所在行的行尾
“o”在當前行的下面插入新行
“O”在當前行的上面插入新行

一.移動
(1). 按字移動光標的命令
在Vi中,"字"有兩種含義:一種是廣義的字,它可以是兩個空格之間的任何內容。
如:{int k;它只有2個字,一個是{int ,另一個是k;
另一種字是狹義上的字,在此種意義之下,英文單詞、標點符號和非字母字符(如$、%、^、&、*、(、)、-、+、{、}、[、]、~、|、\、<、>、/等)均被當成是

一個字。上面那一行中就包括{、int、k、;這4個字。
Vi中使用大寫命令一般就是指將字作為廣義來對待,使用小寫命令就是作為狹義對待。
1. w和W命令:將光標右移至下一個字的字首,它們的區別是:w命令,把光標移到下一個字(狹義)的字首,W命令,將把光標移到下一個字(廣義)的字首。
2. e和E命令:如果光標起始位置處於字內(即非字尾處),則該命令將把光標移到本字字尾;如果光標起始位置處於字尾,則該命令將把光標移動到下一個字的字尾。
3. b和B命令:如果光標處於所在字內(即非字首),則該命令將把光標移至本字字首;如果光標處於所在字字首,則該命令將把光標移到上一個字的字首。

(2). 按句移動光標的命令

在Vi中,句子被定義為以逗號(,)、句號(.)、問號(?)和感嘆號(!)結尾,且其後面跟著至少兩個以上(含兩個)空格(外國人使用打字機留下的習慣)或一個換行符的字符序列。這個定義和習慣的用法有很大出入,註意使用。
1.( 命令:將光標移至上一個句子的開頭;
2. )命令:將光標移至下一個句子的開頭。

(3). 按段移動光標的命令
在Vi中,一個段被定義為是以一個空白行開始和結束的片段。
1. { 命令:將光標向前移至上一個段的開頭;
2. } 命令:將光標向後移至下一個段的開頭。

(4). 滾屏命令
CTRL+U 將屏幕向前(文件頭方向)翻滾半屏;提示:u表示 up;
CTRL+D 將屏幕向後(文件尾方向)翻滾半屏。提示:d表示 down;

可以在這兩個命令之前加上一個數字n,則屏幕向前或向後翻滾n行。並且這個值被系統記住,以後再用CTRL+U 和CTRL+D 命令滾屏時,還滾相應的行數。
CTRL+F 將屏幕向文件尾方向翻滾一整屏(即一頁);提示:f表示 forward;
CTRL+B 將屏幕向文件首方向翻滾一整屏(即一頁)。提示:b表示 backward;
同樣也可以在這兩個命令之前加上一個數字n,則屏幕向前或向後移動n頁;
CTRL+E 將屏幕向上滾動一行;
CTRL+Y 將屏幕向下滾動一行。

(6). 移動到行首或行尾
“$”命令把光標移動到當前行行尾。如果你的鍵盤上有鍵,也可以完成相同的功能。
“^”命令把光標移動到當前行的第一個非空字符,
“0”命令則移到一行的第一個位置, 鍵也可以完成相同的功能。
“$”命令接受個數前綴。1$表示:移動到當前行的行尾;2$表示:移動到下一行的行尾;如此類推。
"0”和“^”不接受個數前綴。

(7). 移動到一個特定的字符
“fx”命令向前查找本行中的單字符x,並把光標移動到字符x上。提示:“f”表示“Find”。
“Fx”命令用於向左查找,“fx”命令的反向版本。
“tx”命令把光標移動到目標字符的前一個字符上。提示:“t”表示“To”。
“Tx”"tx"命令的反向版本,移動到字符的後面。
可以在這四個命令前面加數字前綴。
"fF"命令可以通過“;”命令重復,“,”命令則用於反向重復。用於“tT"命令會出現正確而愚蠢的問題。
(8). 括號匹配
“%”是一個非常方便的命令,它能匹配一對括號(即“( )”,“[ ]”,“{ }”)。
如果光標在“(”上,它移動到對應的“)”上,反之,如果它在“)”上,它移動到“(”上。
當光標不在一個有用的字符上,“%”會先向前找到一個,然後會移動到它的匹配處。
(9). 移動到特定的行
“G” 命令把光標移動到文末;
“gg”命令把光標移動到文首;
“nG”命令把光標移動到第n行的第一個空白字符上,可用“:set number”來顯示行號,用“:set nonumber”來關閉顯示;
“n%" 命令以百分數來移動光標;
“H” 命令把光標移動到屏幕的第一行;
“M” 命令把光標移動到屏幕的中間行;
“L” 命令把光標移動到屏幕的最後一行;
提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。
(10). 使用記號(mark)
當用“G”命令跳到另一個地方,Vim會記住你從什麽地方跳過去的,這個位置成為一個記號(mark)。可以成為記號的還有查找命令:“/”和“?”,而"ftwehjkl"命令不是。
要回到原來的地方,使用如下命令: `` (兩個反引號,的上方);
如果再次執行這個命令你會跳回去原來的地方;
CTRL-O命令跳到一個“較老”的地方(提示:O表示older);
CTRL-I命令跳到一個“較新”的地方(提示:I在鍵盤上僅靠著O);
“mx”命令可以標記當前的光標位置,x可以是任意一個小寫字母(a-z);
“`x”命令跳到你定義的標記處,x是你用mx命令定義的標記;
“'x”(單引號加上一個標記)跳到標記所在行的行首,註意和上一個命令區別開。

復制,刪除,移動

(一). 刪除功能
“dd” --刪除一行;
“D” --刪除到行尾,即“d$”;
“x” --刪除光標所在字符,即“dl”;
“X” --刪除光標左邊的字符,即“dh”;
“dw” --從當前位置刪除到下一個單詞開頭;
“daw”--刪除光標上的單詞(包括空白字符);
“dG” --刪除到文末;
“dgg”--刪除到文首;

(二). 修改文本
“c”命令表示修改,即change。它的作用與“d”操作符相似,只是完成後會切換到插入模式;
“cw”--修改一個單詞;
“C” --修改到行尾,即“c$”;
“s” --修改一個字符,即“cl”;
“S” --修改一整行,即“cc”;

(三). 重復一個修改
“.”是Vim中一個非常簡單而有用的命令。
它重復最後一個除“u”(undo),CTRL-R(redo)和冒號命令外的修改操作。


(四). 可視模式
用“v”命令啟動可視模式:移動光標到需要的地方,選中的文本會被高亮顯示。最後執行“操作符”命令,如刪除命令“d”,復制命令“y”。
用“V”命令,對整行做選中操作,這時“h”,“l”會不起作用。
用“CTRL+V”命令處理一個矩形塊內的文本。在使用塊可視模式的時候,會有四個角,“o”命令把光標移動到對角上;而“O”則能移到同一側的角上。
技巧:“~”來改變選中文本的大小寫;
“u”全部變為小寫;
“U”全部變為大寫。
“J”合並選中的行。

(五). 復制文本
剪切:先用“d”,“x”或者其他命令刪除文本的時候,這些文字會被保存起來。然後用“p”命令把文字重新粘貼出來(提示:p表示put)。
復制,粘貼:先用“y”命令,然後用“p”命令粘貼出來。提示:“y”即Yank。
“yy” --復制一行;
“Y” --也時復制一整行;
“y$” --復制到行尾;
“yw” --復制一個詞。這幾個都可以加上數字前綴;
技巧:用可視模式來選擇文本,簡單直觀。
提示:“y”“p”可以是不同文件。

使用寄存器復制文件
寄存器是Vim用來保存文本的地方。用一個小寫字母表示來表示寄存器。
比如:“"fyas”,復制一個句子到寄存器f 中。
“"fp”,使用寄存器f。

編輯多個文件

(一). 編輯另一個文件
“:edit xxx” :關閉當前文件,打開另一個;
“:edit! xxx” :不保存當前文件,打開另一個;
“:hide edit xxx”:編輯另一個文件,但是不馬上保存當前文件,只是隱藏它;
(二). 同時打開多個文件
“vi xxx1 xxx2 xxx3”,打開三個文件;
“:next”“:next!”“:wnext”,編輯下一個文件;
“:previous”“:previous!”“:wprevious”,編輯前一個文件;
提示:可以加數字前綴。
(三). 在文件中快速跳轉
(在英美式鍵盤中,^ 在6的上面):跳到上一個的文件,再用這個命令就會跳回來;
“`"”:跳轉到上次離開這個文件時的位置;
“`.”:跳轉到最後一次修改文件的位置;
使用文件標記:“mX”和“`X”命令,以及用CTRL+I 和 CTRL+O 來跳轉;
註意:這裏的 X 必須是大寫字母,表示全局。

分割窗口

(一).
1. 分割窗口
水平分割 垂直分割
:split :vsplit
:split xxx :vsplit xxx
:new :vnew

2. 關閉窗口
方法1,“:quit”和ZZ;
方法2,“:close”命令,它可以避免剩下最後一個時退出vim;
方法3,“:only”命令,關閉其他所有窗口;

3. 改變窗口大小
要擴大窗口:“ +”;
要縮小窗口:“ -”;

4. 窗口之間跳轉
CTRL-W w 用於在窗口間跳動
CTRL-W h 跳轉到左邊的窗口
CTRL-W j 跳轉到下面的窗口
CTRL-W k 跳轉到上面的窗口
CTRL-W l 跳轉到右邊的窗口

5. 用 vimdiff 顯示區別
方法1:從shell啟動,比如:vimdiff main.c~ main.c
方法2: 從vi中啟動diff模式:“:vertical diffsplit xxx”,如果沒用“vertical”,就會水平分割屏幕。
方法3: 如果有patch或者diff文件:先編輯這個文件,然後告訴 Vim patch 文件的名稱。例如:
:edit main.c
:vertical diffpatch main.c diff
作大修改

介紹如何做要重復多次的修改和如何改動大量的文字

1. 記錄與回放命令
方法1.使用“.”命令重復前一個修改操作,但它不能完成復雜功能;
方法2.使用記錄命令,步驟如下:
1. “q{register}”命令啟動一次擊鍵記錄,結果保存到{register}指定的寄存器中。寄存器名可以在a到z中任取一個字母表示。
2. 輸入你的命令;
3. 鍵入“q”(後面不用跟任何字符)命令結束記錄;
4. 用“@{register}”命令執行這個宏;
提示:“@@”命令,重復執行上一次的宏。

2. 使用,修改寄存器
用來記錄操作的寄存器與你用來拷貝文本的寄存器是相同的。
使用方法:
G 移到行尾(註:這裏其實使用new命令開窗口更方便些)
o 建立一個空行
"np 拷貝n寄存器中的文本,你的命令將被拷到整個文件的結尾
{edits} 象修改普通文本一樣修改這些命令
0 回到行首
"ny$ 把正確的命令拷貝回n寄存器
dd 刪除臨時行

3. 擴展一個寄存器
記錄到一個大寫寄存器表示擴展命令到對應的小寫寄存器。
替換

“:substitute”命令(可以簡寫為“:s”)使你可以在連續的行中執行字符串替換。
格式:“:[range]s/old/new/[flags]”
說明如下:
1.用“n,m”表示從第n行到第m行;如果不指定行範圍,“:s”命令只作用在當前行上。
2.“.”表示當前行,“$”表示最後一行;“%”表示命令作用於全部行,即“1,$”。
3.可以用“+ -”號,比如“n+x,m-y”,nm可以是“.”和“$”。
4.使用可視模式來設定範圍;註意:命令是作用於行範圍的,而不是選中的範圍的。
5.默認情況下,命令只對一行中的第一個匹配點起作用,要讓對行中所有匹配點起作用,需要加一個“g(global,全局)”標記;
其他標記:“p”(print,打印),用於在命令執行的時候打印出所有被修改的行;
“c”(confirm,確認),在每次替換前向你詢問是否需要替換。

插入文件
“:read {filename}”命令讀入文件,插入當前行的下面;
“:nread {filename}”命令用“n”指點插入行的行號,其中數字“0”表示文件開頭,“$”表示文件尾;

保存部分行
要把一部分行寫入到文件,可以使用“:write”命令;
在沒有指定範圍的時候它寫入全文,而指定範圍的時候它只寫入範圍指定的行;
如果這個文件已經存在,而你一定要寫入,就加一個嘆號;
小心:“!”必須緊跟著“:write”,中間不能留有空格,否則這將變成一個過濾器命令;
“:write >>{filename}”用於往文件中追加內容;

使用外部程序
命令“{motion}{program}”用一個外部程序對一個文本塊進行過濾。
換句話說,它執行一個由{program}指定的外部命令,並用一個文本塊作為輸入,
然後用該程序的輸出代替選中的文本塊。

從崩潰中恢復

方法1. 知道文件名,可以用“-r”選項啟動Vim:“vim -r xxx”;
方法2. 不知道文件名,進入原來的文件夾執行:“vim -r ""”;
方法3. 用“vim -r”列出所有它能找到的交換文件,然後用方法1;

折疊


折疊命令:
zf F-old creation (創建折疊)
zo O-pen a fold (打開折疊)
zc C-lose a fold (關閉折疊)
zr 打開嵌套折疊(“zR”用於全部打開)
zm 關閉嵌套折疊(“zM”用於全部關閉)


在代碼間移動

使用標記
1:創建標記文件:“ctags {filename}”,或者“ctags -R”;
2:把光標移到要查看的單詞的標記處,然後用命令;
3:用返回;
技巧:“CTRL-W ]”用新開窗口查看;


在代碼間移動
“[]” 向上跳轉到一個函數的結尾,“][”向下移動到一個函數的結尾;
“[[” 向上跳轉到函數的開始,“]]”向下跳到結尾處;
註意:這四個命令要求“{”“}”符號在第一列;
“[{” 跳轉到當前代碼塊{}的開始處,“[}”跳轉到當前代碼塊{}的結尾處;
“]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有類似功能,只是匹配的是“()”“/*”

“[I” 命令查找光標下的標識符,不僅在當前文件內查找,還會在所有的包含文件中查找;
“[” 跳到第一項, 可以是;
“n[” 跳到第n項;
“]I” 只列出光標下面的項目

“[D” 只查找 "#define" 定義的宏,
“]D” 只列出光標下面的項目
“gD” 只在當前文件中查找,並跳轉到被首次使用的地方;
“gd” 只在當前函數內查找,註意,函數的開始符號“{”要求在第一列;

vim的用法