Vi 命令總結


使用vi編輯一個文件:vi filename    /*如果該文件存在,則打開;如果該文件不存在,則創建*/
使用vi創建一個沒有文件名字的文件:vi  /*在保存的時候指定文件的名字*/
啓動vim時,當以-C選項啓動時,vim會儘可能向像vi一樣,運行在兼容模式
以只讀方式打開文件:vi -R fliename      或者 view filename
根據保存在臨時文件中的文件來恢復文件:vi -r filename
保存並退出vi:ZZ(命令模式)
不保存並退出vi:  :q!(命令模式)/*!用來表示忽略某些類型的自動檢查*/
當需要在vi中輸入控制符的時候,先輸入Ctrl+V然後緊跟控制符。
ex命令比vi命令要長,所有的ex命令都以:開頭,並且,結束時必須按下<Return>
在按下<Return>之前,發現命令輸入錯誤,可以用兩種措施解決:
1.按<ESC>,取消這個命令
2.通過以下鍵對命令進行糾正
<Backspace>/<Delete>  //刪除鍵入的最後一個字符,但是仍然會顯示
^W                    //刪除鍵入的最後一個單詞
^X/^U                 //刪除整行


光標的移動
H、J、K、L對應左、下、上、右
<left> <Down> <Up> <Right>對應左、下、上、右
0將光標移動到當前行的開頭
$將光標移動到當前行的末尾
^將光標移動到當前行的第一個非空格/製表符的字符上
w將光標移動到下一個單詞的詞首
e將光標移動到下一個單詞的詞尾
b將光標移動到上一個單詞的詞首
W同w,忽略標點符號
E同e,忽略標點符號
B同b,忽略標點符號
)向前移動到下一個句子
(向後移動到上一個句子
{向前移動到下一個段落
}向後移動到上一個段落
通常在兩個句子之間放兩個空格,在兩個段落之間放一個空白行。
H將光標移動到屏幕的頂部
M將光標移動到屏幕的中間
L將光標移動到屏幕的頂部
可以在以上這些命令前加上數字表示移動的次數。


在編輯緩衝區中移動
^F向下移動一屏
^B向上移動一屏
^D向下移動半屏
^U向上移動半屏
同樣,可以在以上這些命令前加上數字表示移動的次數。


跳轉到前一個位置
``返回到前一個位置
G跳轉到編輯緩衝區的末尾
ma標記當前行爲a   `a跳轉到標記行的準確位置         'a跳轉到標記行的行頭


搜索模式
/目標 光標向前搜索跳轉到該目標上,如果需要重複該搜索模式則需要輸入/即可
?目標 光標向後搜索跳轉到該目標上,如果需要重複該搜索模式則需要輸入?即可
如果希望相同方向查找同一模式的,需要按n,如果希望反向搜索,則按N。
使用行號:   :set number 關閉行號:     :set nonumber
Ctrl+G顯示文件名字以及光標位於文件的位置
nG或者:n跳轉到n行
1G或者gg或者:1跳轉到編輯緩衝區的第一行
:$或者G跳轉到緩衝區的最後一行


插入文本
i改變到輸入模式:在當前光標位置前插入數據
a改變到輸入模式:在當前光標位置後插入數據
I改變到輸入模式:在當前行開頭處插入數據
A改變到輸入模式:在當前行末尾處插入數據
o改變到輸入模式:在當前行下面插入一行
O改變到輸入模式:在當前行上面插入一行


修改文本
不需要進入輸入模式,只能修改一個字符:將將光標移動到修改的字符上,鍵入r+新字符
如果希望替換掉多個字符,那麼光標移動到需要替換的字符的開頭,鍵入R(這將會自動切換到輸入模式),然後鍵入新字符。
如果替換的數據與原來的並不相同,將光標移動到需要替換的字符的位置,鍵入s,此時需要替換的字符將變成一個$,然後,輸入新值。
如果想要替換從當前的光標的位置到這一行的末尾的所有字符,可以鍵入C,這時最後一個字符將被用$標記,然後鍵入新值。
替換一整行:S或者cc
c+移動光標命令會替換從光標當前位置到由移動命令所指定的位置之間的所有字符,c可以與任意的單字符的光標移動命令組合使用,並且可以在中間加入重複的次數。


替換文本
:s/pattern/replace/      替換當前行
:lines/pattern/replace/  替換指定行
:line,lines/pattern/repalce/ 替換範圍的行
:%s/pattern/replace/     替換所有行
在命令的末尾可以使用c(表示confirm)告訴vi替換之前要顯示確認,同時,也可以使用g(表示global)替換每行上的所有匹配項。,默認的情況下,是該行上的第一個匹配項。在指定行號的時候,可以使用數字,也可以使用.(表示當前行),$(表示編輯緩衝區的最後一行)指定行號。


刪除文本
x   刪除當前光標處的字符
X   刪除光標左邊的字符
D   刪除從當前光標到本行末尾的字符
dmove 刪除從當前光標到move所給位置的額字符(move表示光標移動命令)
dd  刪除當前行
另外還有兩個ex命令:
:lined  刪除指定行
:line,lined 刪除指定範圍的行


撤銷或重複改變
u    撤銷上一條命令對編輯緩衝區的修改(連續按兩下會撤銷自己回到原來的樣子)
U    恢復當前行(只有在光標沒有理離開修改的當前行纔有效)
.    重複上一命令對編輯緩衝區的修改


恢復刪除
在vi中每刪除一行或者多行文本時,vi都將刪除掉內容保存在編號緩衝區中(注意編號緩衝區只存儲刪除掉的行,如果是刪除幾個字符則不會存儲在編號緩衝區中),共有9隔個這樣的編號緩衝區。這時,就可以將編號緩衝區的內容插入到當前文本中。通過鍵入“,後面加緩衝區編號,在跟一個p或者P(表示put)命令就可以實現上述功能,其中p表示在當前行的下面插入,P命令表示在當前行的上面插入。
注意在vi中有一個比較特別的命令組合:
"1pu"2pu"3pu
"1pu.u.u
上述兩種命令等價,對於第二條命令:.會自動將緩衝區的編號加1.


移動文本
vi中有一個無名緩衝區用來存儲上一次刪除的文本的備份,且只能存放最近一次刪除的文本。可以通過P或者p命令將無名緩衝區中的內容複製到編輯緩衝區中。
p     複製上一次刪除的內容,插入倒光標的後面/下面
P     複製上一次刪除的內容,插入倒光標的前面/上面
xp    調換兩個字符
deep  調換兩個單詞(此時光標要移動到這個單詞的前面的空格處)
ddp   調換兩行


複製文本
複製文本都指定位置的基本三個步驟:
1.使用y(表示yank,接出),yy命令將文本將編輯緩衝區複製到無名緩衝區中,但是不刪除文本。
2.將光標移動到希望插入文本的位置
3.使用p或者P命令執行插入


可以使用~改變當前字符的大小寫,它將自動跳過非字符的字母表,改變一個字符之後,它將自動右移一個位置。


顯示選項
顯示所有選項的值:   :set all
顯示某一選項的值:   :set option?
顯示了改變了默 認值的選項:  :set 


在鍵入的過程中自動換行  :set warpmargin=n(n表示從右邊緣算起空格的位置,當n爲0的時候關閉換行)
文本縮進: :set autoindent


分隔與連接行
將光標移動到需要換行處,鍵入r<Return>
將幾行連接成一行:將光標移動第一行,然後鍵入J


複製與移動行
將新行x~y的內容插入倒行z之後
:x[,y]coz             /*co:copy不刪除原始行*/
:x[,y]mz              /*m:move刪除原始行*/


輸入shell命令
:!command   暫停vi,執行shell命令
:!!         暫停vi,執行行前一個shell命令


將文件中的數據插入到編輯緩衝區中的指定行:   :[line]r file
將文件中的數據插入到編輯緩衝區中的當前行:   :r file
將程序的輸出插入到編輯緩衝區中的指定行:   :[line]r !porgram
將程序的輸出插入到編輯緩衝區中的當前行:   :r !porgram


使用程序處理數據
使用!和!!命令把編輯緩衝區的行發送給另一個程序,該程序的輸出將會替換原始的行。
n!!program            在n個行上執行程序program
!move program         從當前行值move行執行程序program


將數據寫入原始文件
當用vi打開一個文件時,文件中的內容被複制到編輯緩衝區中,當對文件進行編輯的時候,原始文件保持不變,只是對編輯緩衝區中的內容進行了修改。
可以在不退出vi的情況下,使用如下的命令,不時的將內容寫入到原始文件中進行備份:
:w                    將數據寫入原始文件
:w file               將數據寫入file文件
:w! file              覆蓋一個已有的文件
:w>> file             將數據追加到指定的文件中


切換到一個新文件
:e file               切換編輯指定文件
:e!                   重新編輯當前文件,忽略自動檢查
:e! file              編輯指定文件,忽略自動檢查


使用縮寫
創建縮寫:   :ab [short long]   /*ab爲abbreviate縮寫,short時縮寫,long是縮寫的原文*/
刪除縮寫:   :una short
查看所有的縮寫列表:   :ab


創建宏

:map [x  commands]      x是一個字符,commands是vi或者ex命令序列。


使用vi打開多個文件

vi file1 file2 file3

:n 切換到文件2 (n=next)
:e# 或 :N    切換回到剛纔編輯的文件 
比如當前編輯文件爲a,:n跳至b,再:n跳至c,:e#回到b,想回到a的話用:ea

打開一個,vi 文件名

然後在vi的命令輸入狀態下輸入 
:sp 另外一個文件的路徑及文件名

如此就可以在一個窗口打開多個文件了。
或者用 vi -o file1 file2 file3....用分割屏幕窗口方式同時打開多個文件。
可以使用 ctrl + 兩次按 w 或者ctrl + w 然後按上下鍵在上下窗口間切換。

在這幾個打開的文件,拷貝文件可以使用剪貼板:

要拷貝一行到剪貼板中:
"*yy或者"+yy

要粘貼回來:
"*p或者"+p


            
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章