編輯一個文本文件是經常使用到的計算機操作。我們想做的大多數事情都需要使用某種文件編輯。文本編輯器會方便文件的創建和修改。這些文件也許會包含備記錄、日程表、程序源代碼等等。文本編輯器是簡化的字處理器,就不存在字處理器所具有的黑體、居中、下劃線等等這印刷上的特點。當然每一種操作系統軟件都至少支持一種文本編輯器。
通常有兩種方式:
行編輯器(一種每次修改只能在一行之中或組行之間進行的方式)
全屏編輯器(只能顯示正在編輯的那一屏進行修改,而且立刻能在屏幕上顯示出來)
當然UNIX中也有文本編輯器,下面就來介紹一下:
編輯器名稱
類 型
ed
最初的行編輯
ex
在ed上擴展更為復雜的編輯器
vi
可視化的全屏編輯器
emacs
公共域的全屏編輯器
UNIX支持的編輯器
下面就來具體介紹vi編輯器:
vi 的原意是
“Visual”,它是一個立即反應的編輯程式,也就是說可以立刻看到操作結果。
vi是大多數UNIX系統都支持的全屏文本編輯器。它是由行編輯器
ex發展而來的。它也兩個版本:
view編輯器和
vedit編輯器。其中view編輯器對vi設了只讀標志,而vedit編輯器對vi做了幾個標志設置,同時也簡化了vi的使用。 vi有兩種基本工作模式,
文本輸入模式和
命令模式。文本輸入模式即是用來輸入文字資料,而命令模式則是用來下達一些編排文件、存檔、以及離開vi等等的操作命令。當執行vi後,會先進入命令模式,此時輸入的任何字符都視為命令。
進入與退出
要進入vi可以直接在系統提示字符
$下鍵入
vi [文件名],然後鍵入回車。vi可以自動幫我們進入所要編輯的文檔或是開啟一個新文檔。進入vi後屏幕左方會出現波浪符號,凡是列首有該符號的就代表此列目前是空的。
要離開vi可以在命令模式提示符
:下鍵入
q。要切換到命令模式下則是用[ESC]鍵,如果不知道現在是處於什麼模式,可以多按幾次[ESC],系統會發出哔哔聲以確定進入命令模式。
鍵
功能
wq
保存文件,退出vi
w
保存文件,但不退出vi
q
退出編輯器
q!
退出編輯器,同時放棄所做的修改
ZZ
保存文件,退出vi
vi編輯器的退出命令
vi輸入模式
要如何輸入資料呢?有好幾個命令可以進入輸入模式:
1.添加文本
a 從光標所在位置後面開始增加資料,光標後的資料隨新增資料而向後移動。
A 從光標所在行的最後面的地方開始增加資料。
2.插入正文
i 從光標所在位置前面開始插入資料,光標後的資料隨新增資料而向後移動。
I 從光標所在行的第一個非空白字符前面開始插入資料。
3.增添新行
o 在光標所在行下新增一行並進入輸入模式。
O 在光標所在行上方新增一行並進入輸入模式。
實例
下面來演示一下(以i為例,其中紅色字母為光標所在位置):
·先按[Ese]鍵。使vi處於命令模式。
·按i鍵。將vi切換到文本輸入模式。
·按字符
123
。這時會發現123出現在m的前面。
此時光標仍停留在m上,vi還處於文本輸入模式,直到再按[Ese]才回到命令狀態。
如:The vi history
The vi editor is an interactive text editor that is supported by
m
ost of the UNIX operating systems.
到:The vi history
The vi editor is an interactive text editor that is supported by
123
m
ost of the UNIX operating systems.
vi 基本編輯
在配合一般鍵盤上的功能鍵,像是方向鍵、[Insert] 、[Delete] 等等,現在我們應該已經可以利用 vi 來處理文字資料了。當然 vi 還提供其他許多能讓文字的處理更方便的用法。
文本刪除與修改
何謂編輯?在這裡我們認為是文字的增加、修改以及刪除,甚至包括文字塊的移動、復制等等。這裡先介紹 vi 的如何做刪除與修改。
注意:在 vi 的原始概念裡,輸入和編輯是兩回事。編輯是在命令模式下操作的,是先利用命令移動光標來定位要進行編輯的地方,然後才下命令做編輯的。
x 刪除光標所在字符
dd 刪除光標所在的行
r 替換當前光標所在字符
R 從當前光標的位置開始替換字符,並且使vi進入文本輸入模式
s 刪除光標所在字符,並進入輸入模式
S 刪除光標所在的行,並進入輸入模式
u 放棄最近的修改
U 放棄對當前行的所有修改
實例
下面來演示一下(以R為例,其中紅色字母為光標所在位置):
·按R從當前光標開始替換字符。vi進入文本輸入模式。
·按字符
123
。vi編輯器會從當前光標開始用123替換ost。這時vi仍處於文本輸入模式。
如:The vi history
The vi editor is an interactive text editor that is supported by m
12
3
of the UNIX perating systems.
·按[Ese]鍵可以返回到命令模式。
·按U可以恢復對當前行所做的修改。
到:The vi history
The vi editor is an interactive text editor that is supported by
m
ost of the UNIX perating systems.
在命令模式下移動光標的基本命令是 h, j, k, l 。想來大家現在也應該能猜到只要直接用鍵盤上的方向鍵就可以了,而且無論在命令模式或輸入模式下都是可以。
當然鍵盤也有不足之處。有個很好用的命令u可以恢復被刪除的資料,而U命令則可以恢復對光標所在行的所有修改。這與某些電腦上的[Undo]按鍵功能相同。
移動光標
由於許多編輯工作是借用光標來定位的,所以 vi 提供了許多移動光標的方式,下面用幾張簡表來說明(這些當然也是命令模式下的命令):
命令
說明
功能鍵
0 (數字)
移動到光標所在列的最前面
[Home]
$
移動到光標所在列的最後面
[End]
[CTRL][d]
向下半頁
[CTRL][f]
向下一頁
[PageDown]
[CTRL]
向上半頁
[CTRL]
向上一頁
[PageUp]
命令
說明
H
移動到視窗的第一行
M
移動到視窗的中間行
L
移動到視窗的最後行
b
移動到下個字的第一個字母
w
移動到上個字的第一個字母
e
移動到下個字的最後一個字母
^
移動到光標所在列的第一個非空白字符
命令
說明
n-
減號移動到上一行的第一個非空白字符前面加上數字可以指定移動到以上 n 行
n+
加號移動到下一行的第一個非空白字符前面加上數字可以指定移動到以下 n 行
nG
直接用數字 n 加上大寫 G 移動到第 n 行
命令
說明
fx
Fx
往右移動到 x 字符上
往左移動到 x 字符上
tx
Tx
往右移動到 x 字符前
往左移動到 x 字符前
;
,
配合 f&t 使用,重復一次
配合 f&t 使用,反方向重復一次
/string
?string
往右移動到有 string 的地方
往左移動到有 string 的地方
n
N
配合 /&? 使用,重復一次
配合 /&? 使用,反方向重復一次
命令
說明
備注
n(
n)
左括號移動到句子的最前面前面加上數字可以指定往前移動 n 個句子
右括號移動到下個句子的最前面前面加上數字可以指定往後移動 n 個句子
句子是以! . ? 三種符號來界定
n{
n}
左括弧移動到段落的最前面前面加上數字可以指定往前移動 n 個段落
右括弧移動到下個段落的最前面前面加上數字可以指定往後移動 n 個段落
段落是以段落間的空白列界定
編輯命令
這些編輯命令非常有彈性,基本上可以說是由命令與范圍所構成。例如dw是由刪除命令d與范圍w所組成的,代表刪除一個字d(elete)w(ord)。
命令列表如下:
d 刪除(delete)
y 復制(yank)
p 放置(put)
c 修改(change)
范圍可以是下列幾個:
e 光標所在位置到該字的最後一個字母
w 光標所在位置到下個字的第一個字母
b 光標所在位置到上個字的第一個字母
$ 光標所在位置到該列的最後一個字母
0 光標所在位置到該列的第一個字母
) 光標所在位置到下個句子的第一個字母
( 光標所在位置到該句子的第一個字母
} 光標所在位置到該段落的最後一個字母
{ 光標所在位置到該段落的第一個字母
這些提供了更多的編輯文字的能力。值得注意的是刪除與復制都會將指定范圍的內容放到緩存區裡,然後就可以用命令p貼到其它地方去,這是vi用來處理區段拷貝與移動的辦法。
在某些vi的版本中,例如Linux所用的elvis裡就可以大幅簡化這些命令。如果稍微觀察一下這些編輯命令就會發現問題其實是定范圍的方式有點復雜,實際上只有四個命令罷了。 命令v非常好用,只要按下v鍵,光標所在的位置就會反白,然後就可以移動光標來設定范圍,接著再直接下命令進行編輯就可以了。
對於整行操作,vi另外提供了更方便的編輯命令。前面曾經提到過刪除整行文字的命令dd就是其中一個;cc可以修改整行文字;而yy則是復制整行文字的;命令D則可以刪除光標到該行結束為止所有的文字。