1. 程式人生 > >Linux作業系統基礎——vi篇

Linux作業系統基礎——vi篇

vi編輯器

vi基本概念

vi編輯器簡介,被譽為神的編輯器

  • vi編輯器是所有Unix及Linux系統下的編輯器,它的強大不遜色於任何最新的文字編輯器。這裡只是簡單介紹一小部分指令,會使用的話會大大提高編碼效率。Vi也是Linux中最基本的文字編輯器。

vi的基本概念

  • 基本上vi可以分為三種狀態,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(Lastline mode),各模式的功能如下
    1. 命令模式(command mode)
      • 控制游標的移動,字元、字或行的拷貝與刪除,進入底行模式或者插入模式
    2. 插入模式(Insert mode)
      • 只有在Insert模式下,才可以進行文字的輸入,按【ESC】鍵可回到命令模式。
    3. 底行模式(lastline mode)
      • 將檔案儲存或退出vi,也可以設定內部環境,如尋找字串、列出行號等。

vi基本操作

  1. 進入vi
    • 在終端輸入vi及檔名稱後,就會進入vi,如果檔名不存在,儲存時將會建立該檔案。預設狀態為命令模式,切換到插入模式才可進行文字的輸入。
  2. 切換至插入模式編輯檔案
    • 在命令列模式按下字母【i】(insert)即可進入插入模式,此時可編輯文字。
  3. 退出vi及儲存檔案
    • 在插入模式下,按【ESC】鍵轉到命令模式按一下【:】冒號鍵進入底行模式
:w      #filename被編輯的檔案以filename名字另存。
:wq     #儲存並退出
:x      #等同於wq
:q! #退出不儲存

vi命令模式

移動游標

  • 可以使用鍵盤上的上下左右來移動游標,或者使用vi的移動游標快捷鍵
h,j,k,l    #對應左下上右
space      #游標右移
Backspace  #游標左移
Ctrl + p   #游標上移
Ctrl + n   #游標下移
Enter      #游標下移
w或W       #游標右移一個字/詞至詞首
b或B       #游標左移一個字/詞至詞首
e或E       #游標右移一個字/詞至詞尾
(          #游標移至句首
)          #游標移至句尾
{          #游標移至段落開頭
} #游標移至段落結尾 nG #游標移至第n行行首 n+ #游標下移n行 n- #游標上移n行 n$ #游標移至第n行行尾 H #游標移至螢幕頂行 M #游標移至螢幕中間行 L #游標移至螢幕最後行 0 #游標移至當前行行首 $ #游標移至當前行行尾 G #游標移至檔案最後一行

字元操作

i  #在游標前插入
I  #在當前行首插入
a  #在游標後插入
A  #在當前行尾插入
o  #在當前行之下新開一行插入
O  #在當前行之上新開一行插入
x  #向後刪除一個字元
X  #向前刪除一個字元
u  #撤銷一步
U  #撤銷所有更改
c  #剪下
y  #選中
p  #貼上

行操作

vi 擁有強大的命令組合,所以將命令組合起來之後會有更加強大的效果

^    #行首
$    #行尾
dd   #刪除一行
d^   #刪除至行首
d$   #刪除至行尾
ndd  #刪除n行
yy   #複製一行
y^   #複製至行首
y$   #複製至行尾
nyy  #複製n行
p    #將複製行貼上在游標所在行下方
P    #將複製行貼上在游標所在行上方

搜尋和替換操作

/keyword           #從游標開始處向檔案尾搜尋keyword
?keyword           #從游標開始處向檔案首搜尋keyword
n                  #在同一方向重複上一次搜尋命令
N                  #在反方向上重複上一次搜尋命令
:s/p1/p2/g         #將當前行中所有p1均用p2替代
:n1,n2s/p1/p2/g    #將第n1至n2行中所有p1均用p2替代
:%s/p1/p2/g        #將檔案中所有p1均用p2替換

vi底行模式

:n1,n2 co n3     #將n1行到n2行之間的內容拷貝到第n3行下
:n1,n2 m n3      #將n1行到n2行之間的內容移動到第n3行下
:n1,n2 d         #將n1行到n2行之間的內容刪除
:w               #儲存當前檔案
:e filename      #開啟檔案filename進行編輯
:x               #儲存當前檔案並退出
:q               #退出vi
:q!              #不儲存檔案並退出vi
:!command        #執行shell命令command
:n1,n2 !command  #將command的輸出作為n1到n2行的內容覆蓋原內容