首頁 > 軟體

Linux中Vi和Vim編輯器用法詳解

2022-06-01 14:02:08

一、簡介

Linux下的文字編輯器有很多種,vi 是最常用的,也是各版本Linux的標配。注意,vi 僅僅是一個文字編輯器,可以給字元著色,可以自動補全,但是不像 Windows 下的 word 有排版功能。 
vi 是十年磨一劍的產品,雖然命令繁多,並且大多數功能都是依靠鍵盤輸入來完成,但是一旦你熟悉後,會發現 vi 的功能和效率是其他圖形介面編輯器無法比擬的。 
在Linux中,vi 被認為是事實上的標準編輯器,因為:

  • 所有版本的 Linux 都帶有 vi 編輯器;
  • 佔用資源少;
  • 與 ed、ex 等其他編輯器相比,vi 對使用者更加友好。

你可以使用 vi 編輯器編輯現有的檔案,也可以建立一個新檔案,還能以唯讀模式開啟文字檔案

二、安裝VIM

Vim 是 Vimproved 的縮寫,是 vi 的改進版。vim是Linux下最常用的文字編譯器,在終端輸入vim時可能會出現

Connand 'vim' not found, but can be installed with:

這是因為預設的文字編譯器是vi, 而沒有安裝或者升級vim的緣故

1、 Ctrl + Alt +T 進入終端,安裝vim:

sudo apt-get install vim

2、安裝完成後即可使用vim,輸入vim檢視:

美化vim

剛安裝的VIM,可能介面並不是十分友好,我們可以更改vim的組態檔,按照我們的需求去修改它。在命令列下,輸入命令:注意: 必須加上sudo,否則你是沒有許可權編輯vimrc的。

sudo vim /etc/vim/vimrc

在這個檔案中可以看到有下面這個if判斷,意思是語法高亮,如果是被註釋掉狀態,可以將其放開:

if has("syntax")
     syntax on
endif
"設定左側行號
set nu
"設定tab鍵長度為4
set tabstop=4
"突出顯示當前行
set cursorline
"在右下角顯示遊標位置的狀態行
set ruler
"自動縮排
set autoindent
"覆蓋檔案時不備份
set nobackup

編輯完成後使用 :wq 進行儲存退出 
說明: 冒號結束編輯 ,w為儲存 q為退出 如果你想放棄也可以 q!為強制退出

三、進入 viVIM 編輯器

可以通過以下方式進入 vi 編輯器:

  • vi filename:如果filename存在,則開啟;否則會建立一個新檔案再開啟。
  • vi -R filename:以唯讀模式(只能檢視不能編輯)開啟現有檔案。
  • view filename:以唯讀模式開啟現有檔案。
  • VIM同上的命令。

例如,使用 vi 編輯器建立一個新檔案並開啟:

$ vi testfile
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]

豎線(|)代表遊標的位置;波浪號(~)代表該行沒有任何內容。如果沒有 ~,也看不到任何內容,那說明這一行肯定是有空白字元(空格、tab 縮排、換行符等)或不可見字元

四、工作模式

三種工作模式:

  • 普通模式 
    由Shell進入vi編輯器時,首先進入普通模式。在普通模式下,從鍵盤輸入任何字元都被當作命令來解釋。普通模式下沒有任何提示符,輸入命令後立即執行,不需要回車,而且輸入的字元不會在螢幕上顯示出來。 
    普通模式下可以執行命令、儲存檔案、移動遊標、貼上覆制等。

工作模式切換:

  • 在普通模式下輸入 i(插入)、c(修改)、o(另起一行) 命令時進入編輯模式;按 esc 鍵退回到普通模式。
  • 在普通模式下輸入冒號(:)可以進入命令模式。輸入完命令按回車,命令執行完後會自動退回普通模式。 
    提示:如果不確定當前處於哪種模式,按兩次 Esc 鍵將回到普通模式。
  • 編輯模式 
    編輯模式主要用於文字的編輯。該模式下使用者輸入的任何字元都被作為檔案的內容儲存起來,並在螢幕上顯示出來。
  • 命令模式 
    命令模式下,使用者可以對檔案進行一些高階處理。儘管普通模式下的命令可以完成很多功能,但要執行一些如字串查詢、替換、顯示行號等操作還是必須要進入命令模式。 
    注意:有些教學中稱有兩種工作模式,是把命令模式合併到普通模式。

五、退出 vi 編輯器

一般在命令模式下退出 vi 編輯器。

  • q :如果檔案未被修改,會直接退回到Shell;否則提示儲存檔案。
  • q! :強行退出,不儲存修改內容。
  • wq :w 命令儲存檔案,q 命令退出 vi,合起來就是儲存並退出。
  • ZZ :儲存並退出,相當於 wq,但是更加方便。

退出之前,你也可以在 w 命令後面指定一個檔名,將檔案另存為新檔案,例如:將當前檔案另存為 filename2。

w filename2

注意:vi 編輯檔案時,使用者的操作都是基於緩衝區中的副本進行的。 如果退出時沒有儲存到磁碟,則緩衝區中的內容就會被丟失。

六、移動遊標

為了不影響檔案內容,必須在普通模式(按兩次 Esc 鍵)下移動遊標。使用下表中的命令每次可以移動一個字元:

  • k :向上移動遊標(移動一行)
  • j :向下移動遊標(移動一行)
  • h :向左移動遊標(移動一個字元)
  • l :向右移動遊標(移動一個字元)

兩點提醒:

  • vi 是區分大小寫的,輸入命令時注意不要鎖定大寫。
  • 可以在命令前邊新增一個數位作為字首,例如,2j 將遊標向下移動兩行。

當然,還有很多其他命令來移動遊標,不過記住,一定要在普通模式(按兩次 Esc 鍵)下。

用來移動遊標的命令:

  • 0 或 |:將遊標定位在一行的開頭。
  • $:將遊標定位在一行的末尾。
  • w:定位到下一個單詞。
  • b:定位到上一個單詞。
  • (:定位到一句話的開頭,句子是以 ! . ? 三種符號來界定的。
  • ):定位到一句話的結尾。
  • {:移動到段落開頭。&&&&&&
  • }:移動到段落結束。&&&&&&&&&
  • [[:回到段落的開頭處。&&&&&&&&&&
  • ]]:向前移到下一個段落的開頭處。&&&&&&&&&&
  • n|:移動到第 n 列(當前行)。
  • 1G:移動到檔案第一行。
  • G:移動到檔案最後一行。
  • nG:移動到檔案第 n 行。
  • :n:移動到檔案第 n 行。
  • H:移動到螢幕頂部。
  • nH:移動到距離螢幕頂部第 n 行的位置。
  • M:移動到螢幕中間。
  • L:移動到螢幕底部。
  • nL:移動到距離螢幕底部第 n 行的位置。
  • :x:x 是一個數位,表示移動到行號為 x 的行。

七、控制命令

有一些控制命令可以與 Ctrl 鍵組合使用,一定要在普通模式(按兩次 Esc 鍵)下。如下:

  • CTRL+d:向前捲動半屏
  • CTRL+f:向前捲動全螢幕
  • CTRL+u:向後捲動半屏
  • CTRL+b:向後捲動整屏
  • CTRL+e:向上捲動一行
  • CTRL+y:向下捲動一行
  • CTRL+I:重新整理螢幕

八、編輯檔案

切換到編輯模式下才能編輯檔案。有很多命令可以從普通模式切換到編輯模式,如下所示:

  • i:在當前遊標位置之前插入文字
  • I:在當前行的開頭插入文字
  • a:在當前遊標位置之後插入文字
  • A:在當前行的末尾插入文字
  • o:在當前位置下面建立一行
  • O:在當前位置上面建立一行

復原命令:

  • u: 一步一步復原
  • Ctr-r: 反覆原

重複命令:

  • .: 重複上一次操作的命令

九、刪除字元

下面的命令,可以刪除檔案中的字元或行:

  • x:刪除當前遊標下的字元
  • X:刪除遊標前面的字元
  • dw:刪除從當前遊標到單詞結尾的字元
  • d^:刪除從當前遊標到行首的字元
  • d$:刪除從當前遊標到行尾的字元
  • D:刪除從當前遊標到行尾的字元
  • dd:刪除當前遊標所在的行

可以在命令前面新增一個數位字首,表示重複操作的次數,例如,2x 表示連續兩次刪除遊標下的字元,2dd 表示連續兩次刪除遊標所在的行。

十、修改文字

如果你希望對字元、單詞或行進行修改,可以使用下面的命令:

  • cc:刪除當前行,並進入編輯模式。
  • cw:刪除當前字(單詞),並進入編輯模式。
  • r:替換當前遊標下的字元。
  • R:從當前遊標開始替換字元,按 Esc 鍵退出。
  • s:用輸入的字元替換當前字元,並進入編輯模式。
  • S:用輸入的文字替換當前行,並進入編輯模式。

十一、貼上覆制

vi 中的複製貼上命令:

  • yy:複製當前行
  • nyy:複製n行
  • yw:複製一個字(單詞)
  • nyw:複製n行
  • p:將複製的文字貼上到遊標後面
  • P:將複製的文字貼上到遊標前面

十二、高階命令

下面的一些命令雖然看起來有些古怪,但是會讓你的工作更有效率,如果你是 vi 重度使用者,就瞭解一下吧。

  • J:將當前行和下一行連線為一行
  • <<:將當前行左移一個單位(一個縮排寬度)
  • >>:將當前行右移一個單位(一個縮排寬度)
  • ~:改變當前字元的大小寫
  • ^G:Ctrl+G組合鍵可以顯示當前檔名和狀態
  • U:復原對當前行所做的修改
  • u:復原上次操作,再次按 'u' 恢復該次操作
  • :f:以百分號(%)的形式顯示當前遊標在檔案中的位置、檔名和檔案的總行數
  • :f filename:將檔案重新命名為 filename
  • :w filename:儲存修改到 filename
  • :e filename:開啟另一個檔名為 filename 的檔案
  • :cd dirname:改變當前工作目錄到 dirname
  • :e #:在兩個開啟的檔案之間進行切換
  • :n:如果用 vi 開啟了多個檔案,可以使用 :n 切換到下一個檔案
  • :p:如果用 vi 開啟了多個檔案,可以使用 :n 切換到上一個檔案
  • :N:如果用 vi 開啟了多個檔案,可以使用 :n 切換到上一個檔案
  • :r file:讀取檔案並在當前行的後邊插入
  • :nr file:讀取檔案並在第 n 行後邊插入

十三、文字查詢

全檔案搜尋

可以在普通模式(按兩次 Esc 鍵)下輸入

  • / 命令(向下查詢),這時狀態列(最後一行)出現"/"並提示輸入要查詢的字串,回車即可。 ? 命令為向上查詢。
  • n 命令可以按相同的方向繼續查詢,輸入 N 命令可以按相反的方向繼續查詢。

部分特殊字元列表:

搜尋的字串中可以包含一些有特殊含義的字元,如果希望搜尋這些字元本身,需要在前面加反斜槓()。

  • ^ :匹配一行的開頭
  • . :匹配一個字元
  • * :匹配0個或多個字元
  • $ :匹配一行的結尾
  • [ ] :匹配一組字元

搜尋某行中的單個字元

f 向上搜尋,F 向下搜尋,並且會把遊標定位到匹配的字元。 
t 命令向上搜尋,並把遊標定位到匹配字元的前面;T 命令向下搜尋,並把遊標定位到匹配字元的後面。

十四、set 命令

set 命令可以對 vi 編輯器進行一些設定。使用 set 命令需要進入命令模式。

  • :set ic:搜尋時忽略大小寫。
  • :set ai:設定自動縮排(自動對齊)。
  • :set noai:取消自動縮排(自動對齊)。
  • :set nu:顯示行號。
  • :set sw:設定縮排的空格數,例如,將縮排空格數設定為4::set sw=4。
  • :set ws:迴圈搜尋:如果直到檔案末尾也沒有查詢到指定字元,那麼會回到開頭繼續查詢。
  • :set wm:設定自動換行,例如,設定距離邊際2個字元時換行::set wm=2 。
  • :set ro:將檔案型別改為唯讀。
  • :set term:輸出終端型別。
  • :set bf:忽略輸入的控制字元,如 BEL(響鈴)、BS(退格)、CR(回車)等。

十五、執行命令

切換到命令模式,再輸入 ! 命令即可執行 Linux 命令。 
例如,儲存檔案前,如果希望檢視該檔案是否存在,那麼輸入

:! ls

即可列出當前目錄下的檔案。按任意鍵回到 vi 編輯器。

十六、文字替換

切換到命令模式,再輸入 s/ 命令即可對文字進行替換。語法為:

:s/search/replace/g

search 為檢索的文字,replace 為要替換的文字,g 表示全域性替換。

:%s/原有字元/替換後字元 ##只替換每一行中出現的第一個原有字元
:%s/原有字元/替換後字元/g ##替換所有
:1,5s/原有字元/替換後字元/g ##替換1-5行

十七、幾點提示

vi 編輯器的使用講解完畢,但是請記住下面幾點:

  • 輸入冒號(:)進入命令模式,按兩次 Esc 鍵進入普通模式。
  • 命令大小寫的含義是不一樣的。
  • 必須在編輯模式下才能輸入內容。

十八、最全VIVim快捷鍵鍵點陣圖

到此這篇關於Linux中Vi和Vim編輯器用法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com