從shell中啟動可視化編輯器
vi filename 指示shell啟動vi編輯器,並將參數filename傳給它。如果當前目前中存在該檔案,則vi編輯器將它解釋為要開啟的檔案;如果沒有該檔案,則vi編譯器建立新檔案
vi file1 file2 file3 shell傳遞3個參數給vi,vi將它們解釋為要開啟的檔案。可以使用:w命令儲存檔案,使用:n命令訪問下一個檔案
vi +# filename 開啟檔案,並將游標移到指定的行。例如,命令vi +100 records 從第100行開始編輯檔案records
vi +/the filename 開啟檔案,並將游標移動包含有目標字串的行。例如,命令vi +/Jason friends 從第1個含有字串Jason的行開始編輯檔案friends
view filename 開啟檔案進行編輯,但是拒絕儲存對檔案的修改,除非使用w!命令
游標移動命令
hjkl 將游標分別向左、下、上、右移動一個字元
0(零) 將游標移到當前行的行首
^(脫字元) 同0一樣將游標移到當前行的行首
$ 將游標移到當前行的行末
##G 將游標移到G前面的數字指定的行。例如,42G將游標移到檔案的第42行
G 將游標移到檔案的最後一行
w 將游標向前移到下一個單詞的首字母
e 將游標向前移到下一個單詞的最後一個字母
b 將游標向後移到上一個單詞首字母
- 將游標定位到上一行的行首
+ 將游標定位到下一行的行首
12| 將游標定位到當前行的第12列
L 將游標定位到螢幕的最下面一行
M 將游標定位到螢幕中間的一行
H 將游標定位到螢幕的最上面一行
'' 兩個單引號將游標移到它的先前的位置
游標定位命令(內容相關的)
fb 將游標向前移到當前行上的下一個字母b(或者其他的任意指定的字元)
Fb 將游標向後移到當前行上的上一個字母b(或指定的字元)
t# 將游標移到當前行上字元#的第1個執行個體的右側。例如,命令tM將游標移到當前行上第1個M的右側
T# 在當前行上向左移動游標,將它移到字元#的第1個執行個體的前一字元
/word 將游標向前移到單詞word的下一個執行個體
?word 將游標向後移到單詞word的上一個執行個體
n 將游標移到前面命令/word或?word中指定模式的下一個執行個體
顯示調整命令
Ctrl+D 顯示檔案中的下半屏文本
Ctrl+U 顯示檔案中的上半屏文本
Ctrl+F 顯示檔案中的下一屏文本
Ctrl+B 顯示檔案中的上一屏文本
設定顯示選項
:set number 將行號作為螢幕顯示的一部分,但是行號並不是檔案的一部分。它的縮寫形式為:set nu
:set nonumber 清除螢幕上的行號。也可以使用縮寫形式:set nonu
:set showmode 在螢幕的右下角顯示追加模式資訊
:set list 在每行的行末顯示貨幣符號,並用Ctrl+I表示定位字元
:set showmatch 在輸入)或]時,將游標移到與之匹配的(或[
:set window=value 定義螢幕上顯示的文本行的行數
:set autoindent 自動縮排。也可以使用縮寫形式:set ai
:set tabstop=value 設定顯示定位字元的空白字元個數。也可以使用縮寫形式ts=value
:set wrapmargin=value 設定顯示器的右頁邊。當輸入進入所設定的頁邊時,編輯器自動斷行符號換行
:set ignorecase 指示編輯器搜尋字串,並忽略目標中字母的大小寫
:set 顯示設定的所有選項
:set all 顯示所有可以設定的選項
文本刪除命令
dd 刪除當前游標所有的文本行
#dd 刪除#行文本
dw 從文本中刪除一個單詞
#dw 從文本中刪除#個單詞
x 刪除游標所在的一個字元
#x 從文本中刪除#個字元
D 刪除當前行上游標後面的部分
:#,#d 例如,:12,37d 將刪除第12~37行之間的所有文本,包括第12和37行
撤銷命令
u 撤銷。恢複最近一次的文本修改操作,即使已經移動了游標。在Linux系統中,再次使用撤銷命令將恢複更前一次的文本修改操作。在BSD的vi中,第2次撤銷操作將撤銷第一次撤銷操作,恢複第1次撤銷前修改的文本
:redo 在Linux系統中,取消撤銷操作恢複文本修改。在標準的UNIX系統中,第2個u命令取消第1個u命令,結果就是一個“redo”
U 如果在修改後還沒有將游標移出當前行,則可以撤銷對當前行進行的所有的文本修改
向文本中添加文本
a(小寫) 從游標的右側開始插入文本
A(大寫) 從當前行的行末開始添加文本
i(小寫) 從游標的左側開始插入文本
I(大寫) 從當前行的行首插入文本
o(小寫) 在游標的下面開啟(或插入)一個新行
O(大寫) 在游標的上面開啟一個新行
:#r filename 例如,:8r report.old讀取檔案report.old,並將它的內容放到當前檔案的第8行之後
Esc 無論使用什麼命令進入了追加/插入模式,都可以通過按Esc鍵離開追加模式返回到vi的命令模式
Ctrl+V 允許輸入控制字元。按Ctrl+V鍵後再按斷行符號鍵將把Ctrl+M插入到檔案中
在檔案中修改文本
cw 僅僅修改游標處的單詞(刪除單詞,然後進入追加模式中,以在被刪除單詞的位置添加文本)
s(小寫) 替換單個字元
S(大寫) 替換整行文本
cc 替換整行文本(同S)
r 用輸入的下一個字元替代當前游標處的字元,並自動返回到命令模式
R 將編輯器放到覆蓋模式,用輸入的字元來逐個替換游標處的字元
C(大寫) 修改行上從游標到行末之間的文本
ct# 修改行上從游標到前向第1個目標字元之間的文本。例如ctY將刪除當前行上從游標到向前第1個字元Y之間的所有文本,並進入追加模式以在刪除文本的位置添加文本
cf# 修改行上從游標到前向第1個目標字元之間的文本(包括目標字元)。例如cfY將刪除當前行上從游標到向前第1個字元Y之間(包括Y)的所有文本,並進入追加模式以在刪除文本的位置添加文本
cT# 修改行上從游標到後向第1個目標字元之間的文本。例如cTY將刪除當前行上從游標到向後第1個字元Y之間的所有文本,並進入追加模式以在刪除文本的位置添加文本
cF# 修改行上從游標到後向第1個目標字元之間的文本(包括目標字元)。例如cFY將刪除當前行上從游標到向後第1個字元Y之間(包括Y)的所有文本,並進入追加模式以在刪除文本的位置添加文本
接出和粘貼行的單詞
yy 將當前行複製或接出到內在緩衝區。20yy將當前行和它後面的19行(共20行)文本複製到記憶體。目標行仍然保留在檔案中,可以使用p命令將這些記憶體中的文本粘貼到檔案中
dd 刪除當前行,並將它放到與yy命令使用的相同的記憶體緩衝區。目標行從檔案中刪除,但是可以使用p命令將它粘貼到檔案中的其他地方
yw 將當前游標所在的單詞接出或複製到內在緩衝區。6yw命令將把當前單詞和它後面的5個(共6個)單詞複製到記憶體
dw 刪除當前的單詞,並將它放到與yw命令使用的相同的記憶體緩衝區。可以使用p命令將單詞粘貼到檔案的其他地方
yt# 接出從游標到向前一個字元(不包括該字元)之間的文本。例如,ytB命令將從游標到字元B的下一執行個體(不包括字元B)之間的文本接出或複製到記憶體
yf# 接出從游標到向前一個字元(包括該字元)之間的文本。例如,yf:命令將從游標到字元:的下一個執行個體(包括字元:)之間的文本接出或複製到記憶體
yT# 後向接出(不包括目標字元)。例如,yTN命令將從游標到字元N的後向第1個執行個體之間的文本(不包括字元N)接出或複製到記憶體
yF# 後向接出(包括目標字元)。例如,yFJ命令將把從游標到字元N的向後第1個執行個體之間的文本(包括字元N)接出或複製到記憶體
p 將記憶體中的文本行粘貼到檔案中游標所在行的下面,或將記憶體中的單詞粘貼到檔案中游標的右側
P(大寫) 將接出或刪除的文本行粘貼到檔案中游標所在行的上面。或將接出或刪除的單詞粘貼到檔案中游標的左側
檔案移動命令
J 將下行文本同當前行合并成一行
:#,# move # 將指定的行移到目標位置。:12,35 move 58命令將第12~35行之間的所有文本移到第58行的後面。縮寫為mo
:1,26 co 82 將第1~26行之間的所有文本複製到第82行的後面(可以選擇行號)
使用可視化編輯器進行全域編輯
:s /target/replacement/ 尋找當前行上目標字串的第1個執行個體並刪除,然後用字串replacement替換。只修改當前行上的第1個目標執行個體
:g /target/s//replacement/ 尋找所有行上目標字串的第1個執行個體並刪除,然後用字串replacement替換。修改所有行上目標的第1個執行個體
:#,# s/target/replacement/ 在指定的行上進行替換。例如,:7,37 s/march/walk/將尋找第7~37行之間的所有文本行,並用字串walk替換每行中的第1個目標字串march。所有指定行上的第1個目標字串修改
:#,# s/target/replacement/g 在指定的行上進行全域替換。例如,:1,$ s/fun/joyful/g 將在第1行到檔案最後一行之間尋找目標字串fun的所有執行個體並刪除,然後用字串joyful替換。指定行上的目標字串的所有執行個體都被修改
:g /target/s/replacement 尋找所有行上目標字串的第1個執行個體並刪除,然後用字串replacement替換。所有行上的第1個目標都被修改
:#,# target/s/replacement/ 在指定的行上進行替換,例如,:7,37 march/s/walk命令在第7~37行之間每個文本行上尋找目標字串的第1個執行個體並刪除,然後用字串walk替換。所有指定行上的第1個目標字串都被修改
:#,# target/s/replacement/g 在指定的行上進行全域替換。例如,:1,$ fun/s/joyful/g將在第1行到檔案最後一行之間尋找目標字串fun的所有執行個體並刪除,然後用字串joyful替換。指定行上的所有目標字串都被修改
編輯工具:映射,縮寫和標記
m# 用字母標記當前行。例如,ma命令表示用a標記當前行。即使移動了標記行,它仍然標記為a,可以用a來定位該行
'# 錨點行。例如,命令'a將游標移到標記a的行。命令'a,$d將刪除從標記行到檔案末尾之間的所有行
:map # command string 在命令模式中輸入#時,將其作為一個命令串。例如,:map #o#!/bin/ksh產生一個新的命令模式指令,您輸入#時,它被解釋為:o開啟個新行,並添加文本#!/bin/ksh到檔案中。為了在命令中包含斷行符號和其他控制字元,可以在它們的前面用Ctrl+V命令
:ab abbreviation char-string 設定追加模式縮寫。例如,在命令模式中輸入:ab mv Milky Way Galaxy,則建立縮寫。如果在追加模式中輸入字串mw,然後按Esc鍵,mw將被Milky Way Galaxy替代
在vi編輯器中向shell發出命令
:!ls 啟動一個shell,並讓shell運行ls程式。在運行完指定的程式後,必須按斷行符號鍵以返回到編輯器中
:!ksh 啟動一個shell,它允許運行多個命令。退出shell可以回到編譯器中
:Or!speel% 對當前檔案(%)進行拼字檢查,並將spell的輸出詩篇到當前檔案中,從第1行(0行後面)開始放置這些輸出
:31r!command% 運行UNIX命令(如cal或date)並將它的輸出讀入到當前檔案,從第31行開始放置這些輸出
Ctrl+Z 用於掛起當前編輯會話進程的csh和ksh命令,它允許您向父shell發出命令
fg 重新啟用掛起的編輯進程的csh和ksh命令
讀、寫和退出編輯器
:wq 儲存編輯會話期間對檔案所做的修改,退出編輯器返回到shell
:q 如果沒有對檔案進行修改或添加檔案,可以用q退出對一個檔案的編輯
:q! 退出對檔案的編輯返回到shell模式,但是不儲存在編輯會話期間對檔案所做的修改
:w filename v將檔案的緩衝區副本(修改版本)儲存到一個新檔案
[color=#DC143C][b]:#,# w newtest 例如,:1,6 w newtext命令建立一個名為newtext的檔案,並將當前檔案的第1~6行文本複製到檔案newtext中
:1,6 w >> oldfile 將當前檔案的第1~6行文本的一個副本追加到已有檔案oldfile的末尾
:1,6 w! oldfile 用當前檔案的第1~6行文本覆蓋檔案oldfile
進入vi的命令
vi filename :開啟或建立檔案,並將游標置於第一行首
vi +n filename :開啟檔案,並將游標置於第n行首
vi + filename :開啟檔案,並將游標置於最後一行首
vi +/pattern filename:開啟檔案,並將游標置於第一個與pattern匹配的串處
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢複filename
vi filename....filename :開啟多個檔案,依次編輯
移動游標類命令
h :游標左移一個字元
l :游標右移一個字元
space:游標右移一個字元
Backspace:游標左移一個字元
k或Ctrl+p:游標上移一行
j或Ctrl+n :游標下移一行
Enter :游標下移一行
w或W :游標右移一個字至字首
b或B :游標左移一個字至字首
e或E :游標右移一個字j至字尾
) :游標移至句尾
( :游標移至句首
}:游標移至段落開頭
{:游標移至段落結尾
nG:游標移至第n行首
n+:游標下移n行
n-:游標上移n行
n$:游標移至第n行尾
H :游標移至螢幕頂行
M :游標移至螢幕中間行
L :游標移至螢幕最後行
0:(注意是數字零)游標移至當前行首
$:游標移至當前行尾
螢幕翻滾類命令
Ctrl+u:向檔案首翻半屏
Ctrl+d:向檔案尾翻半屏
Ctrl+f:向檔案尾翻一屏
Ctrl+b;向檔案首翻一屏
nz:將第n行滾至螢幕頂部,不指定n時將當前行滾至螢幕頂部。
插入文本類命令
i :在游標前
I :在當前行首
a:游標後
A:在當前行尾
o:在當前行之下新開一行
O:在當前行之上新開一行
r:替換當前字元
R:替換當前字元及其後的字元,直至按ESC鍵
s:從當前游標位置處開始,以輸入的文本替代指定數目的字元
S:刪除指定數目的行,並以所輸入文本代替之
ncw或nCW:修改指定數目的字
nCC:修改指定數目的行
刪除命令
ndw或ndW:刪除游標處開始及其後的n-1個字
do:刪至行首
d$:刪至行尾
ndd:刪除當前行及其後n-1行
x或X:刪除一個字元,x刪除游標後的,而X刪除游標前的
Ctrl+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替換
選項設定
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行之間的內容刪除
:w :儲存當前檔案
:e filename:開啟檔案filename進行編輯
:x:儲存當前檔案並退出
:q:退出vi
:q!:不儲存檔案並退出vi
:!command:執行shell命令command
:n1,n2 w!command:將檔案中n1行至n2行的內容作為command的輸入並執行之,若不指
定n1,n2,則表示將整個檔案內容作為command的輸入
:r!command:將命令command的輸出結果放到當前行 。xsb 發表於:2005.11.09 18:11 ::分類: ( OS ) ::閱讀:(751次) :: Permanent link :: 引用 (0) re: vi使用手冊(zt) [回複]
http://www.5ilinux.com/blog/archives/000058.html
功能最強在的編輯器——vi
vi是所有UNIX系統都會提供的螢幕編輯器,它提供了一個視窗裝置,通過它可以編輯檔案。當然,對UNIX系統略有所知的人,或多或少都覺得vi超級難用,但vi是最基本的編輯器,所以希望讀者能好好把它學起來,以後在UNIX世界裡必將暢行無阻、遊刃有餘,因為其他幾種文本處理器並非UNIX標準配備。說不定別人的Linux機器沒安裝joe或pico,如果您不會vi,那您可能就沒輒了。
vi的基本概念
基本上vi可分為三種操作狀態,分別是命令模式(Command mode)、插入模式(Insert mode)和底線命令模式(Last line mode),各模式的功能區分如下:
1. Comand mode:控制螢幕游標的移動,字元或游標的刪除,移動複製某區段及進入Insert mode下,或者到Last line mode。
2. Insert mode:唯有在Insert mode下,才可做文字資料輸入,按Esc等可回到Comand mode。
3. Last line mode:將儲存檔案或離開編輯器,也可設定編輯環境,如尋找字串、列出行號等。
不過可以把vi簡化成兩個模式,即是將Last line mode也算入Command mode,把vi分成Command 和Insert mode。
vi的基本操作
•進入vi
在系統提示符號輸入vi及檔案名稱後,即可進入vi全螢幕編輯畫面:
$ vi testfile
有一點要特別注意,就是您進入vi之後是處於“Command mode”下,您要切換到Insert mode才能輸入文字。初次用vi的使用者都會想先用上下左右鍵移動游標,結果電腦一直叫,把自己氣個半死,所以進入vi後,先不要亂動,轉換入Insert後再說。
•切換至Insert mode編輯檔案
在Command mode下按‘i’、‘a’或‘o’三鍵就可進入Insert mode。這時候您就可以開始輸入文字了。
i: 插入,從目前游標所在之處插入所輸入的文字。
a: 增加,目前游標所在的下一個字開始輸入文字。
o: 插入新的一行,從行首開始輸入文字。
•Insert的切換→Command mode,按Esc鍵
您目前處於Insert mode,您就只能一直打字。假如您發現打錯字了,想用游標鍵往回移動,將該字刪除,就要按ESC鍵轉換回Command mode,再刪除文字。
•離開vi及存檔案
在Command mode下,可按冒號“:”鍵入入Last line mode,例如:
:w filename (輸入“w filename”,將文章存入指定的檔案名稱filename)
:wq (輸入“wq”,因為進入之時已經指定檔案名稱testfile,所以會寫入testfile並離開vi)
:q! (輸入“q!”,強制離開並放棄編輯的檔案)
Command mode功能鍵列表
在介紹command mode指令的時後,指令後面加上“常用”字眼的功能鍵,表示比較常用的vi指令,請讀者您一定要學會、記住。
(1)I、a、o切換進入Insert mode。[超級常用]
(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行行首。[常用]
Last line mode下指令簡介
讀者您要使用Last line mode之前,請記得先按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:在last line mode提示符號“:”前按w即可將檔案存起來。[超常用]
#,# w filename:如果您想摘取文章的某一段,存成另一個檔案,可用這個指令#代表行號,例如30,50 w nice,將您正在編輯文章的第30~50行存成nice這個檔案。
6.離開
q:按q就離開,有時如果無法離開vi,可搭配“!:強置離開vi,如“q!”
qw:一般建議離開時,搭配w一起使用,如此離開時還可存檔案。[常用]