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的基本操做 
a) 進入vi 

在系統提示符號輸入vi及文件名稱後,就進入vi全屏幕編輯畫面: 

$ vi myfile 


不過有一點要特別注意,就是您進入vi以後,是處於「命令行模式(command mode)」,您要切換到「插入模式(Insert mode)」纔可以輸入文字。初次使用vi的人都會想先用上下左右鍵移動光標,結果電腦一直嗶嗶叫,把本身氣個半死,因此進入vi後,先不要亂動,轉換到 「插入模式(Insert mode)」再說吧!

b) 切換至插入模式(Insert mode)編輯文件 

在「命令行模式(command mode)」下按一下字母「i」就能夠進入「插入模式(Insert mode)」,這時候你就能夠開始輸入文字了。 

c) Insert 的切換 

您目前處於「插入模式(Insert mode)」,您就只能一直輸入文字,若是您發現輸錯了字!想用光標鍵往回移動,將該字刪除,就要先按一下「ESC」鍵轉到「命令行模式(command mode)」再刪除文字。

d) 退出vi及保存文件 

在「命令行模式(command mode)」下,按一下「:」冒號鍵進入「Last line mode」,例如: 

: w filename (輸入 「w filename」將文章以指定的文件名filename保存) 

: wq (輸入「wq」,存盤並退出vi) 

: q! (輸入q!, 不存盤強制退出vi) 


三、命令行模式(command mode)功能鍵 
1). 插入模式 

按「i」切換進入插入模式「insert mode」,按「i」進入插入模式後是從光標當前位置開始輸入文件; 

按「a」進入插入模式後,是從目前光標所在位置的下一個位置開始輸入文字; 

按「o」進入插入模式後,是插入新的一行,從行首開始輸入文字。 

2). 從插入模式切換爲命令行模式 

按「ESC」鍵。 

3). 移動光標 

vi能夠直接用鍵盤上的光標來上下左右移動,但正規的vi是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格。 

按「ctrl」+「b」:屏幕往「後」移動一頁。 

按「ctrl」+「f」:屏幕往「前」移動一頁。 

按「ctrl」+「u」:屏幕往「後」移動半頁。 

按「ctrl」+「d」:屏幕往「前」移動半頁。 

按數字「0」:移到文章的開頭。 

按「G」:移動到文章的最後。 

按「$」:移動到光標所在行的「行尾」。 

按「^」:移動到光標所在行的「行首」 

按「w」:光標跳到下個字的開頭 

按「e」:光標跳到下個字的字尾 

按「b」:光標回到上個字的開頭 

按「#l」:光標移到該行的第#個位置,如:5l,56l。 

4). 刪除文字 

「x」:每按一次,刪除光標所在位置的「後面」一個字符。 

「#x」:例如,「6x」表示刪除光標所在位置的「後面」6個字符。 

「X」:大寫的X,每按一次,刪除光標所在位置的「前面」一個字符。 

「#X」:例如,「20X」表示刪除光標所在位置的「前面」20個字符。 

「dd」:刪除光標所在行。 

「#dd」:從光標所在行開始刪除#行 

5). 複製 

「yw」:將光標所在之處到字尾的字符複製到緩衝區中。 

「#yw」:複製#個字到緩衝區 

「yy」:複製光標所在行到緩衝區。 

「#yy」:例如,「6yy」表示拷貝從光標所在的該行「往下數」6行文字。 

「p」:將緩衝區內的字符貼到光標所在位置。注意:全部與「y」有關的複製命令都必須與「p」配合才能完成複製與粘貼功能。 

6). 替換 

「r」:替換光標所在處的字符。 

「R」:替換光標所到之處的字符,直到按下「ESC」鍵爲止。 

7). 回覆上一次操做 

「u」:若是您誤執行一個命令,能夠立刻按下「u」,回到上一個操做。按屢次「u」能夠執行屢次回覆。 

8). 更改 

「cw」:更改光標所在處的字到字尾處 

「c#w」:例如,「c3w」表示更改3個字 

9). 跳至指定的行 

「ctrl」+「g」列出光標所在行的行號。 

「#G」:例如,「15G」,表示移動光標至文章的第15行行首。 

四、Last line mode下命令簡介 
在使用「last line mode」以前,請記住先按「ESC」鍵肯定您已經處於「command mode」下後,再按「:」冒號便可進入「last line mode」。

A) 列出行號 

「set nu」:輸入「set nu」後,會在文件中的每一行前面列出行號。 

B) 跳到文件中的某一行 

「#」:「#」號表示一個數字,在冒號後輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。 

C) 查找字符 

「/關鍵字」:先按「/」鍵,再輸入您想尋找的字符,若是第一次找的關鍵字不是您想要的,能夠一直按「n」會日後尋找到您要的關鍵字爲止。 

「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,若是第一次找的關鍵字不是您想要的,能夠一直按「n」會往前尋找到您要的關鍵字爲止。 

D) 保存文件 

「w」:在冒號輸入字母「w」就能夠將文件保存起來。 

E) 離開vi 

「q」:按「q」就是退出,若是沒法離開vi,能夠在「q」後跟一個「!」強制離開vi。 

「qw」:通常建議離開時,搭配「w」一塊兒使用,這樣在退出的時候還能夠保存文件。 

五、vi命令列表 
一、下表列出命令模式下的一些鍵的功能: 


左移光標一個字符 


右移光標一個字符 


光標上移一行 


光標下移一行 


光標移動至行首 


數字「0」,光標移至文章的開頭 


光標移至文章的最後 


光標移動至行尾 

Ctrl+f 
向前翻屏 

Ctrl+b 
向後翻屏 

Ctrl+d 
向前翻半屏 

Ctrl+u 
向後翻半屏 


在光標位置前插入字符 


在光標所在位置的後一個字符開始增長 


插入新的一行,從行首開始輸入 

ESC 
從輸入狀態退至命令狀態 


刪除光標後面的字符 

#x 
刪除光標後的#個字符 


(大寫X),刪除光標前面的字符 

#X 
刪除光標前面的#個字符 

dd 
刪除光標所在的行 

#dd 
刪除從光標所在行數的#行 

yw 
複製光標所在位置的一個字 

#yw 
複製光標所在位置的#個字 

yy 
複製光標所在位置的一行 

#yy 
複製從光標所在行數的#行 


粘貼 


取消操做 

cw 
更改光標所在位置的一個字 

#cw 
更改光標所在位置的#個字 


二、下表列出行命令模式下的一些指令 
w filename 
儲存正在編輯的文件爲filename 

wq filename 
儲存正在編輯的文件爲filename,並退出vi 

q! 
放棄全部修改,退出vi 

set nu 
顯示行號 

/或? 
查找,在/後輸入要查找的內容 


與/或?一塊兒使用,若是查找的內容不是想要vim

 高級一些的編輯器,都會包含宏功能,vim固然不能缺乏了,在vim中使用宏是很是方便的:

:qx     開始記錄宏,並將結果存入寄存器x
q     退出記錄模式
@x     播放記錄在x寄存器中的宏命令
稍微解釋一下,當在normal模式下輸入:qx後,你對文本的全部編輯動做將會被記錄下來,再次輸入q即退出了記錄模
式,而後輸入@x對剛纔記錄下來的命令進行重複,此命令後可跟數字,表示要重複多少次,好比@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在保存以前不會對文件作實際的修改,只是加載到緩衝區中,對文件的編輯實際上是對緩衝區的編輯,直到:w時纔會存入物理文件。

:e file     把file加載到新的緩衝區中
:bn     跳轉到下一個緩衝區
:bd     刪除緩衝區(關閉文件)
:sp fn     分割窗口,並將fn加載到新的窗口中
退出編輯器

:w     將緩衝區寫入文件,即保存修改
:wq     保存修改並退出
:x     保存修改並退出
: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     複製一行,此命令前可跟數字,標識複製多行,如6yy,表示從當前行開始複製6行
yw     複製一個字
y$     複製到行末
p     粘貼粘貼板的內容到當前行的下面
P     粘貼粘貼板的內容到當前行的上面
]p     有縮進的粘貼,vim會自動調節代碼的縮進
"a     將內容放入/存入a寄存器,能夠支持多粘貼板
附:好比經常使用的一個寄存器就是系統寄存器,名稱爲+,因此從系統粘貼板粘貼到vim中的命令爲"+p,注意此處的+不表示操做符,二十一個寄存器。
移動光標
在vim中移動光標跟其餘的編輯器中有很大的區別,不過一旦學會了,就會飛速的在文本中移動了。

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$     擦除從當前位置至行末的內容,並進入編輯模式
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     將選中塊中的內容轉成大寫
O     跳轉光標到塊的另外一個端點
aw     選中一個字
ab     選中括號中的全部內容,包括括號自己
aB     選中{}括號中的全部內容
ib     選中括號中的內容,不含括號
iB     選中{}中的內容,不含{}

對標記進行動做
>     塊右移
<     塊左移
y     複製塊
d     刪除塊
~     切換塊中內容的大小寫c#

相關文章
相關標籤/搜索