這篇文章是系列教程的第二講,在這個部分中,咱們會介紹 vi/vim 基本的文件編輯操做,幫助讀者理解編輯器中的三個模式,這是 LFCS 認證考試中必須掌握的linux
使用 vi/vim 執行基本的文件編輯操做vim
vi 是爲 Unix 而生的第一個全屏文本編輯器。它的設計小巧簡單,對於僅僅使用過諸如 NotePad++ 或 gedit 等圖形界面的文本編輯器的用戶來講,使用起來可能存在一些困難。緩存
爲了使用 vi,咱們必須首先理解這個強大的程序操做中的三種模式,方便咱們後邊學習這個強大的文本處理軟件的相關操做。編輯器
請注意,大多數的現代 Linux 發行版都集成了 vi 的變種——— vim(改進版 VIVi IMproved),相比於 vi,它有更多新功能。因此,咱們會在本教程中交替使用 vi 和 vim。學習
若是你的發行版尚未安裝 vim,你能夠經過如下方法來安裝:設計
我爲何要學習 vi教程
至少有如下兩個理由:接口
此外,vi 有着很是豐富的內置幫助手冊,程序打開後就能夠經過 :"help" 命令來查看。這個內置幫助手冊比 vi/vim 的 man 頁面包含了更多信息。圖片
啓動 vi資源
能夠經過在命令提示符下輸入 vi 來啓動。
而後按下字母 i,你就能夠開始輸入了。或者經過下面的方法來啓動 vi:
1.# vi filename
這樣會打開一個名爲 filename 的緩存區(稍後會詳細介紹緩存區),在你編輯完成以後就能夠存儲在磁盤中了。
理解 vi 的三個模式
1.命令command模式,vi 容許用戶瀏覽該文件並輸入由一個或多個字母組成的、簡短的、大小寫敏感的 vi 命令。這些命令的大部分均可以增長一個前綴數字表示執行次數。
好比:yy(或Y) 複製當前的整行,3yy(或3Y) 複製當前整行和下邊緊接着的兩行(總共3行)。經過 Esc 鍵能夠隨時進入命令模式(而無論當前工做在什麼模式下)。事實上,在命令模式下,鍵盤上全部的輸入都被解釋爲命令而非文本,這每每使得初學者困惑不已。
2.末行ex模式,咱們能夠處理文件(包括保存當前文件和運行外部程序)。咱們必須在命令模式下輸入一個冒號(:),才能進入這個模式,緊接着是要在末行模式下使用的命令。執行以後 vi 自動回到命令模式。
3.文本輸入insert模式(一般在命令模式下使用字母 i 進入這個模式),咱們能夠隨意輸入文本。大多數的鍵入將以文本形式輸出到屏幕(一個重要的例外是Esc鍵,它將退出文本編輯模式並回到命令模式)。
vi 命令
下面列出經常使用的 vi 命令。文件編輯的命令能夠經過添加歎號的命令強制執行(如,:q! 命令強制退出編輯器而不保存文件)。
h 或 ← 光標左移一個字符
j 或 ↓ 光標下移一行
k 或 ↑ 光標上移一行
l (小寫字母 L) 或 → 光標右移一個字符
H 光標移至屏幕頂行
L 光標移至屏幕末行
G 光標移至文件末行
w 光標右移一個詞
b 光標左移一個詞
0 (數字零) 光標移至行首
^ 光標移至當前行第一個非空格字符
$ 光標移至當前行行尾
Ctrl-B 向後翻頁
Ctrl-F 向前翻頁
i 在光標所在位置插入文本
I (大寫字母 i) 在當前行首插入文本
J (大寫字母 j) 將下一行與當前行合併(下一行上移到當前行)
a 在光標所在位置後追加文本
o (小寫字母 O) 在當前行下邊插入空白行
O (大寫字母 O) 在當前行上邊插入空白行
r 替換光標所在位置的一個字符
R 從光標所在位置開始覆蓋插入文本
x 刪除光標所在位置的字符
X 當即刪除光標所在位置以前(左邊)的一個字符
dd 剪切當前整行文本(爲了以後進行粘貼)
D 剪切光標所在位置到行末的文本(該命令等效於 d$)
yX 給出一個移動命令 X (如 h、j、H、L 等),複製適當數量的字符、單詞或者從光標開始到必定數量的行
yy 或 Y 複製當前整行
p 粘貼在光標所在位置以後(下一行)
P 粘貼在光標所在位置以前(上一行)
. (句點) 重複最後一個命令
u 撤銷最後一個命令
U 撤銷最後一行的最後一個命令,只有光標仍在最後一行才能執行。
n 在查找中跳到下一個匹配項
N 在查找中跳到前一個匹配項
:n 下一個文件,編輯多個指定文件時,該命令加載下一個文件。
:e file 加載新文件來替代當前文件
:r file 將新文件的內容插入到光標所在位置的下一行
:q 退出並放棄更改
:w file 將當期打開的緩存區保存爲file。若是是追加到已存在的文件中,則使用 :w >> file 命令
:wq 保存當前文件的內容並退出。等效於 x! 和 ZZ
:r! command 執行 command 命令,並將命令的輸出插入到光標所在位置的下一行
vi 選項
下列選項可讓你在運行 Vim 的時候很方便(須要寫入到" ~/.vimrc" 文件):
1.# echo set number >> ~/.vimrc 2.# echo syntax on >> ~/.vimrc 3.# echo set tabstop=4 >> ~/.vimrc 4.# echo set autoindent >> ~/.vimrc
查找和替換
vi 具備經過查找將光標移動到(在單獨一行或者整個文件中的)指定位置。它還可自動或者經過用戶確認來執行文本替換。
a) 在行內查找。f 命令在當前行查找指定字符,並將光標移動到指定字符出現的位置。
例如,命令 fh 會在本行中將光標移動到字母h下一次出現的位置。注意,字母 f 和你要查找的字符都不會出如今屏幕上,可是當你按下回車的時候,要查找的字符會被高亮顯示。
好比,如下是在命令模式按下 f4 以後的結果。
b) 在整個文件內查找。使用 / 命令,緊接着須要查找的單詞或短語。這個查找能夠經過使用 n 命令或者 N 重複查找上一個查找的字符串。如下是在命令模式鍵入 /Jane 的查找結果。
c) vi 經過使用命令來完成多行或者整個文件的替換操做(相似於 sed)。咱們可使用如下命令,使得整個文件中的單詞 「old」 替換爲 「young」。
1.:%s/old/young/g
注意:冒號位於命令的最前面。
冒號 (:) 進入末行模式,在本例中 s 表示替換,% 是從第一行到最後一行的表示方式(也可使用 nm 表示範圍,即第 n 行到第 m 行),old 是查找模式,young 是用來替換的文本,g 表示在每一個查找出來的字符串都進行替換。
另外,在命令最後增長一個 c,能夠在每個匹配項替換前進行確認。
1.:%s/old/young/gc
將舊文本替換爲新文本前,vi/vim 會向咱們顯示如下信息:
同時編輯多個文件
咱們在命令提示符輸入 vim file1 file2 file3 以下:
1.# vim file1 file2 file3
vim 會首先打開 file1,要跳到 file2 需用 :n 命令。當須要打開前一個文件時,:N 就能夠了。
爲了從 file1 跳到 file3
a) :buffers 命令會顯示當前正在編輯的文件列表
1.:buffers
b) :buffer 3 命令(後邊沒有 s)會打開第三個文件 file3 進行編輯。
在上邊的圖片中,標記符號 # 表示該文件當前已被打開,可是是在後臺,而 %a 標記的文件是正在被編輯的。另外,文件號(如上邊例子的 3)後邊的空格表示該文件尚未被打開。
vi 的臨時緩存區
爲了複製連續的多行(好比,假設爲 4 行)到一個名爲 a 的臨時緩存區(與文件無關),而且還要將這些行粘貼到在當前 vi 會話文件中的其它位置,咱們須要:
若是願意,咱們能夠重複上述步驟,將緩存區 a 中的內容插入到咱們文件的多個位置。像本節中這樣的一個臨時緩存區,會在當前窗口關閉時釋放掉。
總結
像咱們看到的同樣,vi/vim 在命令接口下是一個強大而靈活的文本編輯器。經過如下連接,隨時分享你本身的技巧和評論。
免費提供最新Linux技術教程書籍,爲開源技術愛好者努力作得更多更好:http://www.linuxprobe.com/