Linux系統中的Vim編輯器

谢友海發表於2024-07-28

本章將和大家分享Linux系統中的Vim編輯器。廢話不多說,下面我們直接進入主題。

一、Vim 入門幫助

Vim 帶有完整的幫助文件:進入 Vim 後輸入“:help”即可訪問

二、Vim 模式介紹

與大部分其它編輯器不同,進入 Vim 後,預設狀態下鍵入的字元並不會插入到所編輯的檔案之中。Vim 的模式(mode,可以簡單地理解為“狀態 ”)概念非常重要。需要知道 Vim 有以下幾個模式:

  • 正常(normal)模式,預設的編輯模式;下面如果不加特殊說明,提到的命令都直接在正常模式下輸入;任何其它模式中都可以透過鍵盤上的 Esc 鍵回到正常模式。
  • 命令(command)模式,用於執行較長、較複雜的命令;在正常模式下輸入“:”(一般命令)、“/”(正向搜尋)或“?”(反向搜尋)即可進入該模式;命令模式下的命令要輸入Enter鍵(Enter)才算完成。
  • 插入(insert)模式,輸入文字時使用;在正常模式下鍵入“i”(insert)或“a”(append)即可進入插入模式(也有另外一些命令,例如:“c”,也可以進入插入模式,但這些命令有其它的作用)。
  • 可視(visual)模式,用於選定文字塊;可以在正常模式下輸入“v”(小寫)來按字元選定,輸入“V”(大寫)來按行選定,或輸入“Ctrl-V”來按方塊選定。
  • 選擇(select)模式,與普通的 Windows 編輯器較為接近的選擇文字塊的方式;在以可視模式和選擇模式之一選定文字塊之後,可以使用“Ctrl-G”切換到另一模式 —— 該模式很少在 Linux 上使用,本文中就不再介紹了。

1、正常模式

2、命令模式

3、插入模式

  • i 游標所在位置插入
  • I 游標所在位置行首插入
  • o 游標所在位置下方新開一行插入
  • O 游標所在位置上方新開一行插入
  • a 游標所在位置下一個字元的位置插入
  • A 游標所在位置行行尾插入

三、Vim 例項

1、首次執行 Vim

[root@localhost myfolder]# ll
總用量 4
-rw-r--r--. 1 root root 152 7月  27 23:28 file1
[root@localhost myfolder]# vim file1

使 Vim 開始編輯一個名為 file1 的檔案,螢幕上看起來大致是這樣:

1)“黑色塊”代表當前游標位置;

2)上波浪線(~)表示所在行並不是檔案內容的一部分。換句話說,Vim 將檔案之外的部分顯示為波浪線;

3)在視窗的底部,一個訊息行顯示說當前正在編輯的檔案叫 file1,它有27行,152個字元,當前游標所在位置為第21行的第1位。

如果是新檔案呢?

[root@localhost myfolder]# vim file

在視窗的底部,一個訊息行顯示說當前正在編輯的檔案叫file,並且它是一個新檔案。

2、插入文字

Vim 編輯器是一個模式編輯器。這意味著在不同狀態下編輯器有不同的行為模式。兩個基本的模式 Normal 模式和 Insert 模式。在 Normal 模式下你輸入的每一個字元都被視為一個命令。而在 Insert 模式下輸入的字元都作為實際要輸入的文字內容。剛啟動時 Vim 工作於 Normal 模式。要進入 Insert 模式你需要使用“i”命 令(i 意為 Insert),接下來就可以直接輸入了。別怕出錯,錯了還可以修改。

編輯內容時使用 Enter鍵 換行,編輯完成後按下 Esc 鍵退出 Insert 模式,回到 Normal 模式。

要知道你現在所處的工作模式是什麼,開啟顯示模式的開關:

:set showmode
:set noshowmode 關閉顯示模式

你會看到按下冒號鍵之後當前游標跑到視窗的最後一行去了。那是使用冒號命令的地方(顧名思義,冒號命令就是總是以冒號打頭的命令)。最後按下Enter鍵結束整個命令(所有的冒號命令都以這種方式表明命令的結束)。

現在,如果你輸入了“i”命令 Vim 就會在視窗底部顯示—INSERT—(插入)。這表明你目前處於 Insert 模式。如果按下 Esc 鍵返回到 Normal 模式,則剛才顯示出來的模式—INSERT—就會消失;Normal 模式並不會顯示—NORMAL—,作為預設的工作模式它不顯示任何字串。

不管你當前所處的模式是什麼,按下 Esc 鍵都會讓你回到 Normal 模式(即使已經在 Normal 模式下)。有時需要按兩次,如果 Vim 以一聲蜂鳴回答你,那說明你已經是在 Normal 模式了。

3、移動游標

回到 Normal 模式後,你就可以用下面的命令來移動游標:

  • h 左
  • j 下
  • k 上
  • l 右

備註:同時你還可以用箭頭鍵來移動游標。不過這樣做實際上會大大降低你的效率,因為用這些鍵你需要不停地在字母區和箭頭鍵之間頻繁轉換。

4、刪除字元

  • 在 Normal 模式下要刪除一個字元,只需要將游標移到該字元的前面,然後按下“x”。
  • 在 Normal 模式下要刪除一行,使用“dd”命令。
  • 命令“u”可以撤消上一次的操作。
  • 如果你撤消了多次,你還可以用 CTRL R 來反轉撤消的動作,即反撤消。
  • 撤消命令還有另一種形式,大寫的“U”命令,它一次撤消對一行的全部操作。第二次使用該命令則會撤消前一個“U”的操作。

5、其它編輯命令

另起一行 o/O (在 Normal 模式下):

  • “o”命令可以在當前行的下面另起一行,並使當前模式轉為 Insert 模 式。這樣你可以在該命令之後直接輸入內容。
  • “O”命令(注意是大寫的字母O)將在當前行的上面另起一行,並使當前模式轉為 Insert 模 式。

6、退出

  • 在 Normal 模式下要退出 Vim,可以使用“ZZ”命令。
  • 放棄所有修改可以使用 :q! 命令。
  • 放棄所有修改並重新載入可以使用 :e! 命令。
  • 儲存並退出可以使用 :wq 或 :wq!(強制儲存退出) 命令。

7、游標的指定移動

  • 在 Normal 模式下,“G”命令指定一個命令計數,這個命令就會把游標定位到由命令計數指定的行上,比 如“33G”就會把游標置於第 33 行上。
  • “G”命令會把游標定位到最後一行上。
  • “gg”命令是跳轉到第一行的快捷方法,和“1G”的效果是一樣的。

8、簡單搜尋

1)“/string”命令,可用於搜尋一個字串,例如:要找到單詞“mysql”,則可以使用命令:“/mysql”。

要查詢上次查詢的字串的下一個位置,使用“n”命令。如果你知道你要找的確切位置是目標字串的第幾次出現,還可以在“n”之前放置一個命令計數,例如:“3n”則會去查詢目標字串的第3次出現。向游標所在位置以上查詢用大寫的“N”。

2)“?string”命令,“?”命令與“/”的工作相同,只是搜尋方向相反。

3)忽略大小寫,可以透過設定“ignorecase”選項:

:set ignorecase  //忽略大小寫
:set noignorecase  //取消忽略大小寫

4)查詢結果高亮顯示

:set hlsearch  //查詢結果設定為高亮顯示
:set nohlsearch  //取消高亮顯示
:nohlsearch  //只去掉當前的高亮顯示

9、複製貼上

要把文字內容從一處複製到另一處:

  • 先刪除 dd 再貼上 p
  • “y”運算子命令會把文字複製到一個暫存器中,然後可以用“p”命令把它取回。

“y”命令:

  • “yw”來複制一個word;
  • “y2w”命令複製兩個word;
  • “yy”複製一行;
  • “3yy”複製游標所在行和向下的行,一共三行。

10、替換字元

  • :s/UNIX/linux 對游標所在行第一個出現的 UNIX 替換成 linux
  • :s/UNIX/linux /g 對游標所在行所有 UNIX 都替換成 linux ,g 表示全行替換
  • :% s/UNIX/linux /g 將全文中的 UNIX 都替換成 linux ,其中“%”指定該命令將作用於所有行上

四、Vim 的保護機制

如果我們沒有透過 q 退出,而是透過其他方式強行退出,比如說直接關終端,會導致 vim 的一個報錯,當我們下次開啟這個檔案的時候,會提示:

E325: 注意
發現交換檔案 ".file.swp"
            所有者: root    日期: Sun Jul 28 19:43:04 2024
            檔名: ~root/myfolder/file
            修改過: 是
            使用者名稱: root      主機名: localhost.localdomain
           程序 ID: 3884
正在開啟檔案 "file"
              日期: Sun Jul 28 17:25:26 2024

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    如果是這樣,請用 ":recover""vim -r file"
    恢復修改的內容 (請見 ":help recovery")。
    如果你已經進行了恢復,請刪除交換檔案 ".file.swp"
    以避免再看到此訊息。

交換檔案 ".file.swp" 已存在!
以只讀方式開啟([O]), 直接編輯((E)), 恢復((R)), 刪除交換檔案((D)), 退出((Q)), 中止((A)):

這是因為 vim 他不是實時寫入的機制,他會先把檔案寫到記憶體,等我們執行 w 操作以後,再寫回到原檔案。那麼在寫回原檔案,或者執行 q 的放棄操作之前,會生成一個臨時的檔案,以 . 開頭,以 .swp 結尾。當我們看到這種情況,就說明這個檔案是在被編輯的過程中強制退出的,或者是正在被人編輯。

所以這個檔案的作用就是防止強制退出造成的資料安全隱患,和防止檔案同時被多次修改。

我們可以根據他的提示執行相應的操作,比如說 Q 退出。如果想要順利編輯這個檔案的話,一方面可以使用 E 直接編輯,或者先退出,把 swp 檔案刪除了以後再編輯也是可以的。

注意:使用 vim 需要注意一下許可權問題,必須要有讀寫許可權才能使用 vim 。

可以看一下沒有寫許可權和沒有讀許可權會出現什麼問題。

此文由博主精心撰寫轉載請保留此原文連結:https://www.cnblogs.com/xyh9039/p/18327652

版權宣告:如有雷同純屬巧合,如有侵權請及時聯絡本人修改,謝謝!!!

相關文章