每天一個Linux命令——vi命令(三種模式、命令大全、常用)

vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文本編輯器,這裏只是簡單地介紹一下它的用法和一小部分指令。由於 對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也是Linux中最基本的文本編 輯器,學會它後,您將在Linux的世界裏暢行無阻。

vi的基本概念 

  基本上vi可以分爲三種狀態,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:

    1) 命令行模式command mode)

  控制屏幕光標的移動,字符、字或行的刪除,移動複製某區段及進入Insert mode下,或者到 last line mode。

    2) 插入模式(Insert mode)

  只有在Insert mode下,纔可以做文字輸入,按「ESC」鍵可回到命令行模式。

    3) 底行模式(last line mode)

  將文件保存或退出vi,也可以設置編輯環境,如尋找字符串、列出行號……等。

    不過一般我們在使用時把vi簡化成兩個模式,就是將底行模式(last line mode)也算入命令行模式command mode)。

vi命令大全

高亮部分代表個人常用命令

vi命令列表
   
移動光標h將光標左移一格。
l將光標右移一格。
k或Ctrl+p光標上移一行 
j或Ctrl+n 光標下移一行 
w將光標移到下一個小字的前面。
W將光標移到下一個大字的前面。
b將光標移到前一個小字的前面。
B將光標移到前一個大字的前面。
e將光標移到下一個小字的後面。
E將光標移到前一個大字的後面。
fc把光標移到同一行的下一個c字符處。
Fc把光標移到同一行的前一個c字符處。
tc把光標移到同一行的下一個字符c的前一格。
Tc把光標移到同一行的前一個字符c的後一格。
number|把光標移到遞number列上。
+或Enter把光標移至下一行第一個非空白字符。
-把光標移至上一行第一個非空白字符。
)光標移至句尾 
(光標移至句首 
}光標移至段落開頭 
{光標移至段落結尾 
nG光標移至第n行首 
n+光標下移n行 
n-光標上移n行 
n$光標移至第n行尾 
H把光標移到屏幕最頂端一行。
M光標移至屏幕中間行 
L光標移至屏幕最後行 
0(注意是數字零)光標移至當前行首 
$光標移至當前行尾 
space光標右移一個字符 
Backspace光標左移一個字符 
屏幕翻滾Ctrl + f向後滾一頁。 
Ctrl + d 向後滾半頁。 
Ctrl + b向前滾一頁。 
Ctrl + u向前滾半頁。 
Ctrl + e屏幕向下滾一行。 
Ctrl + y屏幕項上滾一行。 
nz將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。 
插入文本在光標前 
在當前行首 
a光標後 
A在當前行尾 
o在當前行之下新開一行 
O在當前行之上新開一行 
r替換當前字符 
R替換當前字符及其後的字符,直至按ESC鍵 
s從當前光標位置處開始,以輸入的文本替代指定數目的字符 
S刪除指定數目的行,並以所輸入文本代替之 
ncw或nCW修改指定數目的字 
nCC修改指定數目的行 
修改ndw或ndW刪除光標處開始及其後的n-1個字 
d0(注意是數字0)刪至行首 
d$刪至行尾 
ndd刪除當前行及其後n-1行 
x或X刪除一個字符,x刪除光標後的,而X刪除光標前的 
Ctrl+u刪除輸入方式下所輸入的文本 
cc或S修改一整行。 
C改變一行光標位置以後的部分。 
cw改變光標所在單詞。 
dd刪除當前行。 
D刪除光標所在行光標後面的內容。 
dw刪除光標所在的單詞。 
J把下一行內容加到本行行尾。 
rc把光符所在字符替換成c . 
R覆蓋本行內容。 
u恢復上一次的修改。 
~改變光標所在出字符的大小寫。 
.重複上一個操作。 
<<把當前行移到左邊。 
>>把當前行移到右邊。 
搜索/替換 /pattern從光標開始處向文件尾搜索pattern 
?pattern從光標開始處向文件首搜索pattern 
n在同一方向重複上一次搜索命令 
N在反方向上重複上一次搜索命令 
s/p1/p2/g將當前行中所有p1均用p2替代 
n1,n2s/p1/p2/g將第n1至n2行中所有p1均用p2替代 
g/p1/s//p2/g將文件中所有p1均用p2替換(g 放在命令末尾,表示對搜索字符串的每次出現進行替換;不加 g,表示只對搜索字符串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作
/pattern/+number將光標停在包含pattern的行後面第number行上。 
/pattern/-number將光標停在包含pattern的行前面第number行上。 
%移到匹配的“()”或“{}”上。 
改變屏幕顯示z-把當前行作爲屏幕的最後一行,並重新顯示屏幕。
z.把當前行作爲屏幕的中間一行,並重新顯示屏幕。
Ctrl+l 重新顯示屏幕當前內容。 
/pattern/z- 尋找pattern的下一個位置,並把所在行設爲屏幕的最後一行。 
拷貝文本p將緩衝區內容取到光標所在行的下面一行。 
P將緩衝區內容取到光標所在行的上面一行。 
“bd將文本刪除至有名緩衝區b . 
“bp張貼有名緩衝區b中內容。 
yy把當前行放入緩衝區。 
Y把當前行放入緩衝區。 
Yw把光標所在的單詞放入緩衝區

選項設置(尾行模式,

例如:

:set number) 

all列出所有選項設置情況 
term設置終端類型 
ignorance在搜索中忽略大小寫 
list顯示製表位(Ctrl+I)和行尾標誌($) 
number顯示行號 
report顯示由面向行的命令修改過的數目 
terse顯示簡短的警告信息 
warn在轉到別的文件時若沒保存當前文件則顯示NO write信息 
nomagic允許在搜索模式中,使用前面不帶“/”的特殊字符 
nowrapscan禁止vi在搜索到達文件兩端時,又從另一端開始 
mesg允許vi顯示其他用戶用write寫到自己終端上的信息 
 n1,n2 co n3將n1行到n2行之間的內容拷貝到第n3行下 
 n1,n2 m n3將n1行到n2行之間的內容移至到第n3行下 
 n1,n2 d 將n1行到n2行之間的內容刪除 
 x保存當前文件並退出 
 w回寫修改後的文件。 
 w filename當filename不存在時,把修改後的文件存爲文件filename ,當文件filename存在時,報錯。 
 !w filename如果文件filename存在時,把修改後的文件保存爲文件filename . 
多文件切換n開始編輯vi激活的文件列表中的下一個文件。 
n filenames指定將被編輯的新的文件列表。 
文件間切換e filename使用filename激活vi (在vi中裝入另一個文件filename)。 
e!重新裝入當前文件,若當前文件有改動,則丟棄以前的改動。 
e+filename使用filename激活vi ,並從文件尾部開始編輯。 
e+number filename使用filename激活vi ,並在第number行開始編輯。 
e#開始編輯另外一個文件。 
加入其他文件r filename讀取filename文件,並將其內容加到當前文件後。 
r ! Command執行command文件,並將其輸出加到當前文件後。 
n1,n2 w!command將文件中n1行至n2行的內容作爲command的輸入並執行之,若不指定n1,n2,則表示將整個文件內容作爲command的輸入 
其他命令ctrl+g取得正在編輯文件的有關信息。 
:sh啓動sh ,從sh中返回可用exit或ctrl+d . 
:! Command執行命令command . 
!!重新執行上次的:! Command子命令。 
q退出vi 
q!不保存文件並退出vi 
ZZ或:wq保存對文件的修改並退出vi . 
寄存器操作 "?nyy將當前行及其下n行的內容保存到寄存器?中,其中?爲一個字母,n爲一個數字 
"?nyw將當前行及其下n個字保存到寄存器?中,其中?爲一個字母,n爲一個數字 
"?nyl將當前行及其下n個字符保存到寄存器?中,其中?爲一個字母,n爲一個數字 
"?p取出寄存器?中的內容並將其放到光標位置處。這裏?可以是一個字母,也可以是一個數字 
ndd將當前行及其下共n行文本刪除,並將所刪內容放到1號刪除寄存器中。 
   
 vi filename打開或新建文件,並將光標置於第一行首 
 vi +n filename打開文件,並將光標置於第n行首 
 vi + filename打開文件,並將光標置於最後一行首 
 vi +/pattern filename打開文件,並將光標置於第一個與pattern匹配的串處 
 vi -r filename在上次正用vi編輯時發生系統崩潰,恢復filename 
 vi filename....filename打開多個文件,依次進行編輯 
 vi -c sub-command在對指定的文件編輯前,先執行指定的命令 sub-command . 
 vi -R將指定的文件以只讀的方式放入編輯器中,這樣不會保存對文件的任何修 改。 
 vi -y number將編輯窗口的大小設爲number行。 
可在.exrc文件中定義特殊的vi命令。在vi中使用這些命令時,必須在該命令前加上一個冒號( :) 。   

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