學習vi和vim編輯器(6):ex編輯器概述(1),vimex
vi編輯器使用的底層編輯器就是ex行編輯器,可以認為vi編輯器是ex行編輯器的可視化模式。ex可以給你機動性更高,能力更強的編輯命令。ex以行為導向,在對檔案做大規模改變時就成了優點。
開啟檔案:
" ex filename "命令使用ex行編輯器開啟檔案,它列出來了檔案的總行數及命令提示字元(:),此時無法看到檔案的任何一行,除非下達顯示一行或多行的ex命令,如所示:
ex命令由行地址(可以只是一個行號)以及相應的命令構成。最基本的命令就是p,代表列印(到螢幕),所以在命令提示字元中輸入" 1p "代表列印第一行。此時甚至可以省略p,單純的輸入行號等價於顯示該行。通過在兩個數值間用逗號分隔來指定一個範圍的行號,例如" 1,3 "代表第1至第3行。沒有行號的命令只會對當前行起作用。
輸入" :vi "命令可以從ex編輯器進入vi編輯器,也可以在vi編輯器中輸入" Q "進入ex編輯器。想在vi編輯器中使用ex編輯器命令,必須輸入特定字元 :(冒號)。在冒號後面輸入行號,就可以直接跳轉到該行,例如" :6 "等效於vi編輯器中的" 6G "命令,都是將游標移動到第6行。
用ex編輯:
許多負責常見編輯操作的ex命令在vi中都有相應的更簡單的命令。但是如果需要改變許多行時,ex命令可能更有用。常見的ex命令有:
全名 縮寫 功能
delete d 刪除行
move m 移動行
copy co 複製行
t 複製行
行地址:每一個ex編輯命令都需要知道要編輯的行號。指定行地址有如下幾種方法:
(1)明確的指定行號;
(2)用符號來指定相對於當前位置的行號;
(3)標識某些行的搜尋模式作為地址;
定義行範圍:通過行號來清楚地定義某一行或某段行的範圍。明確的指定行號也稱為絕對行地址。例如
:3,18d 刪除3到18行;
:160,224m23 將第160行到第244行移動到第23行之後;
:23,29co100 將第23行到第29行複製到第100行之後;
通過:set nu 或:set number 來顯示行號,通過:set nonu或者 :set nonumber來關閉行號的顯示。 可以通過#來暫時顯示某些行的行號,例如" :1,10# "可以暫時顯示第1行到第10行的行號。另外通過如下命令也可以得到行號的資訊:
:= 列出檔案的總行數;
:.= 列出當前行的行號;
:/pattern/= 列出pattern第一次出現時的行號;
行定址符號:可以使用符號表示行地址,這些行定址符號可以和絕對行地址合并使用。
. 表示當前行;
$表示檔案的最後一行;
%表示檔案的每一行,等同於" 1,$ "的組合;
例如" : . ,$ d "刪除當前行到檔案結尾間的文本。" :20 , . m $ "將第20行到當前行的檔案內容移動到檔案結尾。" :%d "刪除檔案的所有行。" :%t$ "將所有行複製到檔案的結尾(做連續的複製)。
除了指定絕對行地址之外,還可以指定相對於當前這一行的地址。+與-代表加上或減去後面的數值,例如" : . , +20d "刪除當前這一行到該行之後20行的檔案內容。" :226 , $ m -2 "將第226行到檔案結尾的檔案內容移動到當前行的兩行之前。數字0表示檔案開頭,也就是第一行文本之前,所以0等效於1-。
搜尋模式:使用搜尋模式也可以指定行地址。例如
:/pattern/d 刪除下一個包含pattern的行;
:/pattern/+d刪除下一個包含pattern的行的下一行;
:/pattern1/,/pattern2/d 從第一個包含pattern1的行刪除到第一個包含pattern2的行;
這些模式的前後都要使用斜線作為分界線。
重新定義當前這一行的位置:當用分號代替逗號時,第一個行地址將會作為當前行地址,即使此時游標不在該行上。例如" :100;+5 p " 即可顯示第100行及其之後5行的內容。
全域搜尋:
ex中有一個全域命令g,可以搜尋模式並顯示所有包含這個模式的行。而" :g! "的功能則正好與" :g "相反,搜尋所有不包含指定模式的行。
:g/pattern 尋找(移到)檔案最後一次出現pattern的地方;
:g/pattern/p 尋找並顯示檔案中所有包含pattern的行;
:g!/pattern/nu 尋找並顯示檔案中所有不包含pattern的行,同時顯示所有找到行的行號;
:60,124g/pattern/p 尋找並顯示第60行與第124行之間包含pattern的行。
合并ex命令:
想輸入新的ex命令,並不是每次都需要輸入冒號,可以使用豎線(|)分隔命令,從而在同一個ex提示符下合并多個命令。
儲存並離開檔案:
:w 將緩衝區的內容寫入到檔案中,但不離開。編輯檔案時應該經常使用" :w ";
:q 離開編輯器;
:wq 寫入檔案同時離開編輯器,這是無條件寫入,即使檔案沒有被修改;
:x 寫入檔案同時離開編輯器。只有檔案被修改過時才會寫入;
本章vi命令總結:
ex,1p,1,2p,d,m,co,t,:=,:.=,:/pattern/=,.,$,% ,+,-,:/pattern/d,:g,:g!,|,:w,:q,
:wq,:x