標籤:
前言
本文內容翻譯 Basic vi Command, Colorado State University, 翻譯原文的大部分內容。
本文介紹的是 UNIX 下的 vi 編輯器,和 Linux 下常用的 vim 會略有不同。由於 vim 是從 vi 發展而來的文字編輯器,所以本文的內容也值得一讀。
我把新學到的或者值得注意的命令用黃色高亮了出來
什麼是 vi ?
UNIX 作業系統的預設編輯器就是 vi (visual editor)。可見 vi 是可視化編輯器的縮寫。UNIX 環境下可替換的編輯器還包括 pico 和 emacs,emacs 是 GNU 的產品。
UNIX 的 vi 編輯器有是一個全屏編輯器,有兩個操作模式:
1. 命令模式 (Command mode), 發送命令可以操作檔案。
2. 插入模式 (Insert mode),可以對當前檔案插入文本。
在命令模式下,每一個輸入的字元都是一個命令,操控著當前被編輯的文本;在命令模式下,一個輸入的字元可能使得 vi 編輯器進入插入模式。在插入模式,每一個輸入的字元都會添加到檔案文本中;按 <Esc> (Escape) 可以關閉插入模式。
在下面的表格中,最基本的有用的命令使用星號(*) 標識出來。
註:UNIX 和 vi 都是大小寫敏感的。請注意使用正確的大小寫,避免出現無法預計的結果。
下面記錄一下基本的 vi 命令:
開始、結束 vi
啟動 vi
輸入 vi filename 啟動 vi 。如果檔案 filename 已存在,則該檔案的第一頁會被顯示出來。如果該檔案不存在,則建立一個空檔案,你可以在裡面輸入文本。
* vi filename // 從第 1 行開始編輯檔案 filename
編輯 vi
通常,在你離開 vi 時候,建立或被修改的檔案會被儲存。當然,也可以不儲存就離開 vi 。
注意,無論什麼時候按下冒號(:),游標都會移到螢幕的底部。這類命令在按下斷行符號<Return>(or <Enter>) 鍵結束。
* :x<Return> // 退出 vi, 把修改的檔案儲存為原來調用時的檔案名稱
* :wq<Return> // 同時
:q<Return> // 退出 vi
* :q!<Ruturn> // 不儲存最後修改的內容,直接退出
移動游標
不像 windows 和 Mac 的編輯器,滑鼠無法移動 vi 編輯器螢幕內的游標。你必須使用下面列出的命令。在一些 UNIX 平台,方向鍵也可以使用,但是,由於 vi 是基於 Qwerty 鍵盤(沒有方向鍵的鍵盤)設計的,所以在 vi 上,方向鍵有時會產生奇怪的效果,應當避免使用。
如果你在 windows 和 UNIX 之間來回切換,你可能會覺得,移動游標方式的不同是是兩個環境間最令人沮喪的不同點。
在下面列表中,字母前面的符合 ^ 代表輸入該字母的同時要按下 <Ctrl> 鍵。
* j or <Return> [or ↓] // 游標向下移動一行
* k [or ↑] // 游標向上移動一行
* h or <返回> [or ←] // 游標向左移動一位
* l or <空格> [or →] // 游標向右移動一位
* 0(零) // 游標移動到當前行開始
* $ // 游標移動到當前行末尾
w // 游標移動到下一個單詞開始位置
b // 游標移動到前一個單詞開始位置
:0<Return> or 1G // 游標移動到檔案第一行
:n<Return> or nG // 移動游標到第 n 行
:$<Return> or G // 移動游標到檔案最後一行
螢幕操作
下面命令使得 vi 編輯器的螢幕上下移動多行,或者重新整理。
^f // 向前(forward)移動一屏
^b // 向後(backward)移動一屏
^d // 向下(down / forward)移動半屏
^u // 向上(up / backward)移動半屏
^l // 重繪(redraw)螢幕
^r // 重繪(redraw)螢幕,移除已刪行
增,改,刪文本
不像 windows 編輯器,你無法把滑鼠覆蓋的文本替換,或刪除。而是使用下面的命令進行操作。
插入添加文本
下面的命令允許你添加插入文本。每一個命令都 vi 編輯器進入插入模式;因此,必須按<Esc>鍵來結束文本輸入,把 vi 編輯器變回命令模式。
* i // 在游標前插入文本,直到按下 <Esc>
I // 在當前行的開始位置插入文本,直到按下 <Esc>
* a // 在游標後面插入文本,直到按下 <Esc>
A // 在當前行末尾插入文本,直到按下 <Esc>
* o // 在當前行下面插入一行,並輸入文本,直到按下 <Esc>
* O // 在當前行上面插入一行,並輸入文本,直到按下 <Esc>
修改文本
下面命令運行你修改文本
* r // 替換游標下的一個字元( 無需 <Esc>)
R // 替換字元,從游標位置開始,直到按下 <Esc>
刪除文本
下面命令允許你刪除文本
* x // 刪除游標下的一個字元
Nx // 從游標位置開始,刪除 N 個字元
dw // 刪掉游標下的一個單詞
dNw // 刪掉游標位置開始後的 N 個單詞,例如,d5w 刪除 5 個單詞
D // 刪除游標位置開始的行尾部分
* dd // 刪除當前行
Ndd // 刪除 N 行,從當前行開始
複製粘貼文本
下面命令運行你複製粘貼文本
yy // 複製(yank)當前行到緩衝(buffer)
Nyy or yNy // 把當前行後面的 N 行複製到緩衝(buffer)
p // 在當前行後面粘貼(paste)緩衝中的文本
其他命令
搜尋文本
替換一個單詞或者短語,這在文本編輯中經常出現。需要定位一個指定的字串,可以使用下面的命令:
/string // 在文本中,向前搜尋 string 的出現位置
?string // 在文本中,向後搜尋 string 的出現位置
n // 尋找下一個
N // 尋找上一個
確定行號
有時,能夠確定當前行行號或者檔案的總行數是很有用的。
:.= // 在螢幕底部,顯示當前行行號
:= // 在螢幕底部,顯示檔案的總行數
^g // 在螢幕底部,即顯示當前行行號,右顯示檔案總行數
儲存,讀取檔案
下面的命令允許你讀取其他檔案到當前檔案,或者把當前檔案另存新檔其他檔案
:r filename<Return> // 讀取檔案 filename,然後把讀取的內容插入到當前行後面
:w <Return> // 儲存當前內容到原始檔案
:w newfile<Return> // 把當前內容到另存新檔 newfile
:12,35w smallfile<Retrun> // 把 12 行到 15 行的內容儲存到名為 smallfile 的檔案中
:w! prefile<Return> // 把當前內容寫入到之前已存在的檔案 prefile 中。
基本 vi 命令