Vi常用命令

 

Vi常用命令
2008-09-24 09:11
(1) 進入vi的命令
vi filename :打開或新建文件,並將光標置於第一行首
vi +n filename :打開文件,並將光標置於第n行首
vi + filename :打開文件,並將光標置於最後一行首
vi +/pattern filename:打開文件,並將光標置於第一個與pattern匹配的串處
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename
vi filename....filename :打開多個文件,依次編輯

(2) 移動光標
vi可以直接用鍵盤上的光標鍵來上下左右移動,但正規的vi是用小寫英文字母
h、j、k、l,分別控制光標左、下、上、右移一格。
按Ctrl+B:屏幕往後移動一頁。[常用]
按Ctrl+F:屏幕往前移動一頁。[常用]
按Ctrl+U:屏幕往後移動半頁。
按Ctrl+D:屏幕往前移動半頁。
按 0 (數字零):移動文章的開頭。[常用]
按 G:移動到文章的最後。[常用]
按 w:光標跳到下個word的開頭。[常用]
按 e:光標跳到下個word的字尾。
按 b:光標回到上個word的開頭。按 $:移到光標所在行的行尾。[常用]
按 ^:移到該行第一個非空白的字符。按 0:移到該行的開頭位置。[常用]
按 #:移到該行的第#個位置,例:51、121。[常用]

(3) 刪除文字
x:每按一次刪除光標所在位置的後面一個字符。[超常用]
#x:例如,6x 表刪除光標所在位置的後面6個字符。[常用]
X:大字的X,每按一次刪除光標所在位置的前面一個字符。
#X:例如,20X 表刪除光標所在位置的前面20個字符。
dd:刪除光標所在行。[超常用]
#dd:例如,6dd表刪除從光標所在的該行往下數6行之文字。[常用]

(4) 複製
yw:將光標所在處到字尾的字符複製到緩衝區中。(想在和#x、#X的功能相反)
p:將緩衝區內的字符粘貼到光標所在位置(指令‘yw’與‘p必須搭配使用)。
yy:複製光標所在行。[超常用]p:複製單行到您想粘貼之處。(指令‘yy’與‘p’必須搭配使用)
#yy:如:6yy表示拷貝從光標所在的該行往下數6行之文字。[常用]
p:複製多行到您想粘貼之處。(指令‘#yy’與‘p’必須搭配使用)
ayy:將複製行放入buffer a, vi提供buffer功能,可將常用的數據存在buffer
ap:將放在buffer a的數據粘貼。
b3yy:將三行數據存入buffer b。
b3p:將存在buffer b的資料粘貼

(5) 取代
r: 取代光標所在處的字符:[常用]
R:取代字符直到按Esc爲止。

(6) 復原(undo)上一個指令
u:假如您誤操作一個指令,可以馬上按u,回覆到上一個操作。[超常用]
.: .可以重複執行上一次的指令。

(7) 更改
cw:更改光標所在處的字到字尾$處。
c#w:例如,c3w代表更改3個字。

(8) 跳至指定行
Ctrl+G:列出光標所在行的行號。#G:例如,15G,表示移動光標至文章的第15行行首。[常用]

命令行指令簡介讀者您要使用命令行指令之前,請記得先按Esc鍵確定您已經處於Command mode下後,再按冒號
“:”或“/”或“?”三鍵的其中一鍵進入Last line mode。

1.列出行號
set nu: 輸入“set nu”後,會在文章的每一行前面列出行號。

2.跳到文章的某一行
#:井號代表一個數字,在Last line mode提示符號“:”前輸入數字,再按
Enter就會跳到該行了,如:15[Enter]就會跳到文章的第15行。[常用]

3.尋找字符串
/關鍵字:先按/,再輸入您想尋找的字,如果第一次找的關鍵字不是您相儘可能的,可以一直按
n會往下尋找到您要的關鍵字爲止。?關鍵字:先按?,再輸入您想尋找的字,如果第一次找的
關鍵字不是您想要的,可以按n會往前尋找到您要的關鍵字爲止。

4.取代字符串
1, $s/string/replae/g:在last line mode輸入“1,$s/string/replace/g”會將全文的
string字符串取代爲replace字符串,其中1,$s就是指搜尋區間爲文章從頭至尾的意思,g則是
表示全部取代不必確認。%s/string/replace/c:同樣會將全文的string字符串取代爲replace
字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c則是表示要替代之前必須再次確認是否取代。
1,20s/string/replace/g:將1至20行間的string替代爲relpace字符串。

5.存文件
w:在命令行提示符號“:”前按w即可將文件存起來。[超常用]
#,# w filename:如果您想摘取文章的某一段,存成另一個文件,可用這個指令#代表行號,
例如30,50 w nice,將您正在編輯文章的第30~50行存成nice這個文件。

6.離開
q:按q就離開,有時如果無法離開vi,可搭配“!:強置離開vi,如“q!”
qw:一般建議離開時,搭配w一起使用,如此離開時還可存文件。

光標控制命令 

命令            光標移動
h或^h            向左移一個字符
j或^j或^n        向下移一行
k或^p            向上移一行
l或空格            向右移一個字符
G            移到文件的最後一行
nG            移到文件的第n行
w            移到下一個字的開頭
W            移到下一個字的開頭,忽略標點符號
b            移到前一個字的開頭
B            移到前一個字的開頭,忽略標點符號
L            移到屏幕的最後一行
M            移到屏幕的中間一行
H            移到屏幕的第一行
e            移到下一個字的結尾
E            移到下一個字的結尾,忽略標點符號
(            移到句子的開頭
)            移到句子的結尾
{            移到段落的開頭
}            移到下一個段落的開頭
0或|            移到當前行的第一列
n|            移到當前行的第n列
^            移到當前行的第一個非空字符
$            移到當前行的最後一個字符
+或return        移到下一行的第一個字符
-            移到前一行的第一個非空字符


在vi中添加文本

命令            插入動作
a            在光標後插入文本
A            在當前行插入文本
i            在光標前插入文本
I            在當前行前插入文本
o            在當前行的下邊插入新行
O            在當前行的上邊插入新行
:r file            讀入文件file內容,並插在當前行後
:nr file        讀入文件file內容,並插在第n行後
escape            回到命令模式
^v char            插入時忽略char的指定意義,這是爲了插入特殊字符


在vi中刪除文本

命令            刪除操作
x            刪除光標處的字符,可以在x前加上需要刪除的字符數目
nx            從當前光標處往後刪除n個字符
X            刪除光標前的字符,可以在X前加上需要刪除的字符數目
nX            從當前光標處往前刪除n個字符
dw            刪至下一個字的開頭
ndw            從當前光標處往後刪除n個字
dG            刪除行,直到文件結束
dd            刪除整行
ndd            從當前行開始往後刪除
db            刪除光標前面的字
ndb            從當前行開始往前刪除n字
:n,md            從第m行開始往前刪除n行
d或d$            從光標處刪除到行尾
dcursor_command        刪除至光標命令處,如dG將從當產膽行刪除至文件的末尾
^h或backspace        插入時,刪除前面的字符
^w            插入時,刪除前面的字


修改vi文本

每個命令前面的數字表示該命令重複的次數
命令            替換操作
rchar            用char替換當前字符
R text escape        用text替換當前字符直到換下Esc鍵
stext escape        用text代替當前字符
S或cctext escape    用text代替整行
cwtext escape        將當前字改爲text
Ctext escape        將當前行餘下的改爲text
cG escape        修改至文件的末尾
ccursor_cmd text escape    從當前位置處到光標命令位置處都改爲text


在vi中查找與替換

命令            查找與替換操作
/text            在文件中向前查找text
?text            在文件中向後查找text
n            在同一方向重複查找
N            在相反方向重複查找
ftext            在當前行向前查找text
Ftext            在當前行向後查找text
ttext            在當前行向前查找text,並將光標定位在text的第一個字符
Ttext            在當前行向後查找text,並將光標定位在text的第一個字符
:set ic            查找時忽略大小寫
:set noic        查找時對大小寫敏感
:s/oldtext/newtext    用newtext替換oldtext
:m,ns/oldtext/newtext    在m行通過n,用newtext替換oldtext
&            重複最後的:s命令
:g/text1/s/text2/text3    查找包含text1的行,用text3替換text2
:g/text/command        在所有包含text的行運行command所表示的命令
:v/text/command        在所有不包含text的行運行command所表示的命令


在vi中複製文本

命令            複製操作
yy            將當前行的內容放入臨時緩衝區
nyy            將n行的內容放入臨時緩衝區
p            將臨時緩衝區中的文本放入光標後
P            將臨時緩衝區中的文本放入光標前
"(a-z)nyy        複製n行放入名字爲圓括號內的可命名緩衝區,省略n表示當前行
"(a-z)ndd        刪除n行放入名字爲圓括號內的可命名緩衝區,省略n表示當前行
"(a-z)p            將名字爲圓括號的可命名緩衝區的內容放入當前行後
"(a-z)P            將名字爲圓括號的可命名緩衝區的內容放入當前行前


在vi中撤消與重複

命令            撤消操作
u            撤消最後一次修改
U            撤消當前行的所有修改
.            重複最後一次修改
,            以相反的方向重複前面的f、F、t或T查找命令
;            重複前面的f、F、t或T查找命令
"np            取回最後第n次的刪除(緩衝區中存有一定次數的刪除內容,一般爲9)
n            重複前面的/或?查找命令
N            以相反方向重複前面的/或?命令


保存文本和退出vi

命令            保存和/或退出操作
:w            保存文件但不退出vi
:w file            將修改保存在file中但不退出vi
:wq或ZZ或:x        保存文件並退出vi
:q!            不保存文件,退出vi
:e!            放棄所有修改,從上次保存文件開始再編輯


vi中的選項

選項            作用
:set all        打印所有選項
:set nooption        關閉option選項
:set nu            每行前打印行號
:set showmode        顯示是輸入模式還是替換模式
:set noic        查找時忽略大小寫
:set list        顯示製表符(^I)和行尾符號
:set ts=8        爲文本輸入設置tab stops
:set window=n        設置文本窗口顯示n行


vi的狀態

選項            作用
:.=            打印當前行的行號
:=            打印文件中的行數
^g            顯示文件名、當前的行號、文件的總行數和文件位置的百分比
:l            使用字母"l"來顯示許多的特殊字符,如製表符和換行符


在文本中定位段落和放置標記

選項            作用
{            在第一列插入{來定義一個段落
[[            回到段落的開頭處
]]            向前移到下一個段落的開頭處
m(a-z)            用一個字母來標記當前位置,如用mz表示標記z
'(a-z)            將光標移動到指定的標記,如用'z表示移動到z


在vi中連接行

選項            作用
J            將下一行連接到當前行的末尾
nJ            連接後面n行


光標放置與屏幕調整

選項            作用
H            將光標移動到屏幕的頂行
nH            將光標移動到屏幕頂行下的第n行
M            將光標移動到屏幕的中間
L            將光標移動到屏幕的底行
nL            將光標移動到屏幕底行上的第n行
^e(ctrl+e)        將屏幕上滾一行
^y            將屏幕下滾一行
^u            將屏幕上滾半頁
^d            將屏幕下滾半頁
^b            將屏幕上滾一頁
^f            將屏幕下滾一頁
^l            重繪屏幕
z-return        將當前行置爲屏幕的頂行
nz-return        將當前行下的第n行置爲屏幕的頂行
z.            將當前行置爲屏幕的中央
nz.            將當前行上的第n行置爲屏幕的中央
z-            將當前行置爲屏幕的底行
nz-            將當前行上的第n行置爲屏幕的底行


vi中的shell轉義命令

選項            作用
:!command        執行shell的command命令,如:!ls
:!!            執行前一個shell命令
:r!command        讀取command命令的輸入並插入,如:r!ls會先執行ls,然後讀入內容
:w!command        將當前已編輯文件作爲command命令的標準輸入並執行command命令,如:w!grep all
:cd directory        將當前工作目錄更改爲directory所表示的目錄
:sh            將啓動一個子shell,使用^d(ctrl+d)返回vi
:so file        在shell程序file中讀入和執行命令


vi中的宏與縮寫
(避免使用控制鍵和符號,不要使用字符K、V、g、q、v、*、=和功能鍵)

選項            作用
:map key command_seq    定義一個鍵來運行command_seq,如:map e ea,無論什麼時候都可以e移到一個字的末尾來追加文本
:map            在狀態行顯示所有已定義的宏
:umap key        刪除該鍵的宏
:ab string1 string2    定義一個縮寫,使得當插入string1時,用string2替換string1。當要插入文本時,鍵入string1然後按Esc鍵,系統就插入了string2
:ab            顯示所有縮寫
:una string        取消string的縮寫


在vi中縮進文本

選項            作用
^i(ctrl+i)或tab        插入文本時,插入移動的寬度,移動寬度是事先定義好的
:set ai            打開自動縮進
:set sw=n        將移動寬度設置爲n個字符
n<<            使n行都向左移動一個寬度
n>>            使n行都向右移動一個寬度,例如3>>就將接下來的三行每行都向右移動一個移動寬度

 

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