當您輸入電子信箱、訂閱本公司之「電子報」時,我們會向您蒐集、處理、利用的個資為您的「電子信箱」以及「提交日期」,當您輸入電子信箱並送出時,即表示您同意我們使用您的個資,為保障您的權益,關於更多相關政策更新資訊,請務必閱讀我們的「
隱私權政策
」、「
使用條款
」及「
免責聲明
」。如您不同意本網站之「隱私權政策」、「使用條款」及「 免責聲明」,您可以隨時「
取消訂閱
」,謝謝您。
習慣了視窗平台的文字編輯器操作,到了
linux terminal
上會手足無措嗎
?
沒有
notepad++
,
sublime
,連
gedit
都沒有,怎麼看程式碼,怎麼查
log
,怎麼改設定檔
?
滑鼠不能用,
ctrl-c ctrl-v
不能用,編輯文字檔變成漫長的
try-and-error?
介紹您在
linux
上的文字編輯好夥伴
vi
,只要記住幾個簡單的操作指令,讓你在
terminal
上也能有如神助。
所有的
Unix Like
系統都會內建
vi
文字編輯器,其他的文字編輯器則不一定會存在
(
如
: emacs
,
pico
,
nano
,
joe
等
)
,而
vi
一般會有
vi
跟
vim
兩種不同版本,
vim
可視為
vi
的進階版,甚至可以作為程式開發工具使用,但在某些地方會因為管理規則的關係,只允許使用
vi
,因此本文會以
vi
的操作方式為主。
另一個使用
vi
的原因是,當透過
terminal
連上客戶端主機進行設定或是
log
檢查時,通常都不會有
x-window
的環境,也就不會有圖形介面可以用
,
故剩下唯一可以依靠的就是
vi
了。當然,你可以把想要檢查的
log
檔抓到本地端電腦上打開進行檢查,或是將想更改的設定檔抓到本地端電腦上,更改完後再上傳到主機上,但總是會多了一個檔案上傳
/
下載的動作,如果需要檢查的檔案數量變多,或是會即時的變動內容,就可能造成作業上的困難。
vi
在使用時會分不同的模式,一般常用的有下列幾種
指令模式
(command mode)
:
進入
vi
時是處於指令模式,只能下按鍵指令,不能輸入文字。
此模式下可以進行
:
移動游標
;
刪除、複製、貼上
;
復原、重做
;
區塊範圍
(
選取、複製、貼上
)
。
編輯模式
(insert mode)
:
在
指令模式輸入
i
,
o
,
a
,
r
即可進入編輯模式,編輯結束時按
Esc
會回到
指令模式。
插入功能:
i
、
o
、
a;
取代功能:
r
。
命令列模式
(command-line mode)
:
在
指令模式輸入
/
,
?
,
:
就會進入
命令列模式,畫面最下方一列會出現輸入的指令,可下指令。一樣按
Esc
可回
指令模式。
此模式下可以進行
:
搜尋、取代
;
儲存、離開、讀入檔案
;
顯示行號
;
多檔案編輯。
新手常犯的錯誤是,一進
vi
後,就先按
i
進入編輯模式,再用方向鍵移到需要編輯的地方進行編輯,這樣其實是比較慢的做法,如果先用指令定位或搜尋找到要編輯的地方,再開始編輯,會省下許多時間。
一般會盡量讓
vi
處於指令模式,以避免不小心更改到檔案內容。
換另外一種說法,只有在需要進行編輯時,才進入編輯模式。不知道目前到底是處於哪一種模式下
?
只要看一下螢幕上最後一列,如果出現
– INSERT –
或是
– REPLACE –
那就是在編輯模式,如果輸入的指令會出現在最後一列上,那就是命令列模式,想要回到指令模式,只要按
ESC
即可。
以下簡介操作時的常用指令
開啟檔案
:
由命令列來開檔
$ vi filename
開檔後游標會落在檔案最後一行的行尾
$ vi + filename
方便由檔案結尾處繼續編輯
開檔後游標會落在第
n
行的行首
$ vi +n filename
開檔後游標就會落在第一個找到的
string
上
$ vi +/string filename
可以按
n
繼續找
下一個
一次開啟多個檔
$ vi 1.txt 2.txt 3.txt
稱為
argument list
多檔編輯時,可用切換檔案指令
:n
編輯下一個檔案。
:2n
編輯下二個檔案。
:N
編輯前一個檔案。
只能用於
argument list
的情形
進入
vi
後再開檔
進入
vi
後,使用
:e filename
若
filename
不存在,會開一個以
filename
為名的新檔案
編輯前一個檔案
:e#
或
Ctrl-^
用於同時編輯兩個檔案,或將檔案一的部分內容複製到檔案二時相當好用。
編輯檔案:
進入
vi
後,按
i
,
o
,
a
,
r
進入
編輯模式,就可以進行檔案編輯。
vi
中游標的移動可以由方向鍵來移動。
Backspace
鍵可消去前一個字元。
Del
鍵可刪除游標所在處的字元。
基本游標移動指令
或
Backspace
或方向鍵
或
Enter
或
+
,或方向鍵
或
方向鍵或
-
Space
或方向鍵
向下翻頁
(PageDown)
Ctrl-f
向上翻頁
(PageUp)
Crtl-b
尋找、替換檔案內容
vi
最特殊的地方是和正規表示式
(regular expression)
結合在一起。在執行如尋找或替換等動作時,依據正規表示式的
pattern
,所有符合
pattern
的地方就會執行我們想要執行的動作。
在
指令模式
的情形下,按
/
或
?
就會進入命令列模式,在左下角出現一個
/
或
?
,然後輸入要尋找的字串,按下
Enter
就會開始尋找。
/
是由前往後找,
?
則是由後往前找。要找下一個的時候,只要輸入
n
即可,輸入
N
時則是反向尋找。
取代
(substitute)
在
指令模式
的情形下,按
:
就會進入命令列模式,在左下角出現一個
:
,然後依照替換格式輸入要尋找及替換的字串,按下
Enter
就會開始進行取代。
:[range]s/pattern/string/[c
,
e
,
g
,
i]
range
指定取代範圍
1
,
7
指從第一行至第七行,
1
,
$
指從第一行至最後一行,也可用
%
代表。
pattern
要被取代掉的字串
可用一般字串或正規表示式來表示
string
要將
pattern
取代的內容
每次取代前會詢問是否確認取代
不顯示
error
不詢問,指定取代範圍內全部替換
沒有加上
g
時只會取代範圍內第一個找到的位置
不分大小寫
vi
一開檔就會建立一個檔名為
。
<filename>
。
swp
的隱藏檔,可用於回復檔案用,一般與所開啟的檔案位於同一目錄下,可以用
:set noswf
把
swap
的功能關掉,但如果編輯的檔案較大,則不建議關閉
swap
,會很吃記憶體。
回復指令如下
:
$ vi -r filename
或進入
vi
後,下
:recover filename
通常在
vi
不正常結束時才會需要進行緊急回復。
visual mode
底下可以對檔案的內容作標示的動作。
v (
小寫
)
字元標示,按下
v
後移動游標,游標經過的地方會被標示起來。再按一次
v
結束標示。同用
mouse
拉出的標示區。
V (
大寫
)
行標示,按下
V
後會將游標所在處整行標示起來
(
包括行首前空白的部分
)
,以上下鍵移動游標,可標示多行。再按一次
V
結束標示。
Ctrl-v
區塊標示,可縱向標示矩形區域。再按一次
Ctrl-v
結束標示。
刪除標示區內容
複製標示區內容
Esc
鍵
或
Ctrl-c
結束
v-mode
把標示區內容存於
a
緩衝區中
Shift->
標示區內容向右移一個
Tab
Shift-<
標示區內容向左移一個
Tab
:set
或
:se
會顯示所有經過修改的部份,就是和預設值不一樣的部份。
:set all
顯示目前所有設定值內容。
:set option?
顯示
option
這設定的目前值。
:set option
直接線上設定,有些設定需加
=
後加上設定值內容。
:set nooption
取消該設定。
:set
可以同時設定多個參數。例如
:set autoindent noconfirm autowrite
。
以下為更改設定的範例
:
:set number
顯示行號。
:set nonumber
取消顯示行號。
依據程式相關語法顯示不同顏色
:syntax on
:syntax off