vi編輯器的三種模式


vi編輯器的三種模式

通常來說,vi編輯器有三種模式,分別是一般指令模式、編輯模式與指令行命令模式。 這三種模式的作用分別是:

一般指令模式(command mode)

以 vi 打開一個文件就直接進入一般指令模式了(這是默認的模式,也簡稱為一般模式)。在這個模式中, 你可以使用上下左右按鍵來移動光標,你可以使用刪除字符或刪除整行來處理文件內容, 也可以使用復制、黏貼來處理你的文件數據。

編輯模式(insert mode)

編輯模式可以對內容進行編輯,按下i, I, o, O, a, A, r, R等任何一個字母之后即可進入編輯模式。如果要回到一般指令模式時, 則必須要按下Esc這個按鍵即可退出編輯模式。

命令行模式(command-line mode)

在一般模式當中,輸入:, /, ? 三個中的任何一個按鈕,就可以將光標移動到最底下那一行。在這個模式當中, 可以提供你搜尋資料的動作,而讀取、存盤、大量取代字符、離開 vi 、顯示行號等等的動作則是在此模式中達成的! 總之,三者的關系可以用下圖來概況:

各模式下的快捷鍵

一般指令模式

 

移動光標的方法  
h 或 向左箭頭鍵(←) 光標向左移動一個字符
j 或 向下箭頭鍵(↓) 光標向下移動一個字符
k 或 向上箭頭鍵(↑) 光標向上移動一個字符
l 或 向右箭頭鍵(→) 光標向右移動一個字符
hjkl 是排列在一起的,因此可以使用這四個按鈕來移動光標。 如果想要進行多次移動的話,例如向下移動 30 行,可以 使用 “30j” 或 “30↓” 的組合按鍵,亦即加上想要進行的次數(數字)后,按下動作即可!  
[Ctrl] + [f] 屏幕向下移動一頁,相當於 [Page Down]按鍵
[Ctrl] + [b] 屏幕向上移動一頁,相當於 [Page Up] 按鍵
[Ctrl] + [d] 屏幕向下移動半頁
[Ctrl] + [u] 屏幕向上移動半頁
n<space> n 表示數字,例如 20 。按下數字后再按空格鍵,光標會向右移動這一行的 n 個 字符。例如 20 則光標會向后面移動 20 個字符距離。
0 或功能鍵[Home] 移動到這一行的最前面字符處
$ 或功能鍵[End] 移動到這一行的最后面字符處
H 光標移動到這個屏幕的最上方那一行的第一個字符
M 光標移動到這個屏幕的中央那一行的第一個字符
L 光標移動到這個屏幕的最下方那一行的第一個字符
G 移動到這個文件的最后一行
nG n 為數字。移動到這個文件的第 n 行。例如 20G 則會移動到這個文件的第 20 行
gg 移動到這個文件的第一行
n<Enter> n 為數字。光標向下移動 n 行
搜索與替換  
/word 向光標之下尋找一個名稱為 word 的字符串
?word 向光標之上尋找一個字符串名稱為 word 的字符串
n 重復前一個搜尋的動作
N 與 n 剛好相反,為反向進行前一個搜尋動作。 例如 /word 后,按下 N 則表示 ?word
:n1,n2s/word1/word2/g n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代 為 word2 , 比如:在 100 到 200 行之間搜尋 null並取代為 NULL 則 :100,200s/null/NULL/g
:1,$s/word1/word2/g 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2
:1,$s/word1/word2/gc 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2 。且在取代前顯示提示字符 給用戶確認 (confirm) 是否需要取代
刪除,復制與黏貼  
x, X 在一行字當中,x 為向后刪除一個字符, X 為向前刪除一個字符
nx n為數字,連續向后刪除 n 個字符
dd 刪除游標所在的那一整行
ndd n 為數字。刪除光標所在的向下 n 行,例如 20dd 則是刪除 20 行
d1G 刪除光標所在到第一行的所有數據
dG 刪除光標所在到最后一行的所有數據
d$ 刪除游標所在處,到該行的最后一個字符
d0 刪除游標所在處,到該行的第一個字符
yy 復制游標所在的那一行
nyy n 為數字。復制光標所在的向下 n 行,例如 20yy 則是復制 20 行
y1G 復制光標所在行到第一行的所有數據
yG 復制光標所在行到最后一行的所有數據
y0 復制光標所在的那個字符到該行行首的所有數據
y$ 復制光標所在的那個字符到該行行尾的所有數據
p, P p 為將已復制的數據黏貼到光標下一行,P 則為黏貼到上一行
J 將光標所在行與下一行的數據結合成同一行
u 回退,類似於Ctrl+z
[Ctrl]+r 前進,類似於Ctrl+y
. 重復前一個動作。 如果你想要重復刪除、重復黏貼等動作,按下小數點.就好了

一般指令模式切換到編輯模式的可用的快捷鍵

 

 

進入INSERT或REPLACE模式  
i, I 進入插入模式(Insert mode): i 為從目前光標所在處插入,I 為在目前所在行的第一個非空格符處開始插入
a, A 進入插入模式(Insert mode): a 為從目前光標所在的下一個字符處開始插入, A 為從光標所在行的最后一個字符處開始插入
o, O 進入插入模式(Insert mode): o 為在目前光標所在的下一行處插入新的一行; O 為在目前光標所在處的上一行插入新的一行
r, R 進入取代模式(Replace mode): r 只會取代光標所在的那一個字符一次;R 會一直取代光標所在的文字,直到按下 ESC 為止
[Esc] 退出編輯模式,回到一般指令模式中

一般指令模式切換到命令行模式可用的快捷鍵

 

 

命令行模式的存儲,離開等指令  
:w 將編輯的數據寫入硬盤文件中(保存)
:w! 若文件屬性為只讀時,強制寫入該文件。不過,到底能不能寫入,還是跟你對該文件的文件權限有關
:q 離開 vi
:q! 若曾修改過文件,又不想儲存,使用 ! 為強制離開不儲存文件
:wq 儲存后離開,若為 :wq! 則為強制儲存后離開
ZZ 若文件沒有更動,則不儲存離開,若文件已經被更動過,則儲存后離開!
:w filename 將編輯的數據儲存成另一個文件
:r filename 在編輯的數據中,讀入另一個文件的數據。亦即將filename這個文件內容加到游標所在行后面
:n1,n2 w filename 將 n1 到 n2 的內容儲存成 filename 這個文件
:! command 暫時離開 vi 到指令行模式下執行 command 的顯示結果。例如 :! ls /home即可在 vi 當中察看 /home 底下以 ls 輸出的文件信息
vim 環境的變更  
:set nu 顯示行號,設定之后,會在每一行的前綴顯示該行的行號
:set nonu 與:set nu 相反,為取消行號

 

《鳥哥的Linux私房菜》讀書筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM