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命令列表
一、下表列出命令模式下的一些鍵的功能:
h
左移光標一個字符
l
右移光標一個字符
k
光標上移一行
j
光標下移一行
^
光標移動至行首
0
數字「0」,光標移至文章的開頭
G
光標移至文章的最後
$
光標移動至行尾
Ctrl+f
向前翻屏
Ctrl+b
向後翻屏
Ctrl+d
向前翻半屏
Ctrl+u
向後翻半屏
i
在光標位置前插入字符
a
在光標所在位置的後一個字符開始增長
o
插入新的一行,從行首開始輸入
ESC
從輸入狀態退至命令狀態
x
刪除光標後面的字符
#x
刪除光標後的#個字符
X
(大寫X),刪除光標前面的字符
#X
刪除光標前面的#個字符
dd
刪除光標所在的行
#dd
刪除從光標所在行數的#行
yw
複製光標所在位置的一個字
#yw
複製光標所在位置的#個字
yy
複製光標所在位置的一行
#yy
複製從光標所在行數的#行
p
粘貼
u
取消操做
cw
更改光標所在位置的一個字
#cw
更改光標所在位置的#個字
二、下表列出行命令模式下的一些指令
w filename
儲存正在編輯的文件爲filename
wq filename
儲存正在編輯的文件爲filename,並退出vi
q!
放棄全部修改,退出vi
set nu
顯示行號
/或?
查找,在/後輸入要查找的內容
n
與/或?一塊兒使用,若是查找的內容不是想要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#