vim編輯器的使用詳解

  • 2019 年 10 月 3 日
  • 筆記

在Linux江湖,最常用到的編輯器非vim莫屬,vim的功能很強大。

1.   vim簡介

在Linux世界中,最長用到的而且功能比較強大的是Vim編輯器。Vim編輯器是在內存緩衝區中處理數據。

vim 文件名 or vi 文件名

都可以通過vim打開文件

一般vim打開文件功能更多一些,特別是對於shell腳本這種文本,會有不同字符的高亮顯示。

 

如果啟動vim時未指定文件名,或者指定的文件名不存在,vim會開闢一段新的緩衝區域來編輯。

vim /etc/passwd

 

 

vim tt 

 

 

2   vim模式介紹

vim編輯器有兩種模式:

  1. 普通模式
  2. 插入模式

2.1   普通模式

當剛打開要編輯的文件或新建一個文件時,vim首先進入的是普通模式。在普通模式中,vim會將案件解釋程命令。

在普通模式下,可以用方向鍵在文本區域移動光標。vim有用來移動光標的命令:

h:左移一個字符

j:下移一行(文本的下一行)

k:上移一行(文本的上一行)

l:右移一個字符

 

PageDown(或Ctrl+F):下翻一屏

PageUp(或Ctrl+B):上翻一屏

G:移動到緩衝區的最後一行

num G:移動到緩衝區的第num行

gg:移動到緩衝區的第一行

2.2   普通模式的命令行模式

Vim編輯器在普通模式下有個特特別的功能叫命令行模式。命令行模式提供了一個交互式命令行,可以輸入額外的命令來控制vim的行為。要進入命令行模式,在普通模式下按下冒號鍵”:”,光標會移動到消息航,然後出現冒號,等待輸入命令。

在命令行模式下有幾個命令時可以退出緩衝區:

:q  如果未修改緩衝區數據,退出。

:q! 取消所有對緩衝區數據的修改並退出。

:w filename 將文件保存到另一個文件中。

:wq 將緩衝區數據保存到文件中並退出

 

3   編輯數據

在普通模式,輸入i,就會進入到插入模式,然後就可以編輯和數據的插入。如圖:

 

 

在普通模式下,vim提供了一些命令來編輯緩衝區中的數據。

命令

描述

x

刪除當前光標所在位置的字符

dd

刪除光標所在的行

dw

刪除當前光標所在的單詞

d$

刪除當前光標所在位置至行尾的內容

J

刪除當前光標所在行行尾的換行符(拼接符)

u

撤銷前一編輯命令

a

在當前光標後追加數據

A

在當前光標所在行尾追加數據

r char

用char替換當前光標所在位置的單個字符

R text

用text覆蓋當前光標所在位置的數據,知道按下ESC鍵

 

4   複製和粘貼

vim在刪除數據時,實際上會將數據保存在單獨的一個寄存器中。可以用p命令取回數據。而複製操作在vim中是y(代表yank),可以在y後面使用和d命令相同的第二字符(yw代表複製一個單詞,y$代表複製到行尾)。複製文本後,把光標移動到希望放置文本的地方,輸入p命令,複製的文件就會出現在該位置。

複製的過程你無法知道自己到底複製了多少內容,知道粘貼後才明白複製的內容是什麼,可視模式可以解決這個問題,可視模式會在你移動光標時就高亮顯示需要複製的文本的內容。要進入可視模式,將光標移動到開始複製的位置,然後按下v鍵,你會注意到光標所在位置的文本已經被高亮顯示。下一步,移動光標來覆蓋希望複製的文本,高亮顯示會覆蓋所有你移動的行文本,然後按下y鍵進行複製,寄存器中已經有了要複製的文本,將光標移動到希望放置文本的位置,使用p鍵來粘貼,這樣就完成了複製粘貼操作。

 

 

 選中後輸入 y複製,然後選擇需要粘貼的地方,輸入p粘貼

如圖:

 

 然後就複製成功粘貼了!

5   查找和替換

5.1   查找

   在vim中可以通過按下斜線(/)鍵。光標會跑到消息航,然後vim會顯示出斜線,然後輸入需要查找的關鍵字符,按下回車鍵,vim會在文本中查找要查找的文本。

通常會出現三種回應:

  1. 如果要查找的文本出現在光標當前位置之後,則光標會跳轉到該文本出現的第一個位置。
  2. 如果要查找的文本未在光標當前位置之後出現,而且在之前出現,則光標會染過文件末尾,出現在該文本所在的第一個位置(並用一條消息指明)
  3. 輸出一條錯誤消息,說明在文件中沒有找到要查找的文本。

如果要繼續查找同一個單詞,按下斜線,然後按回車,揮着使用n鍵,表示下一個(next).

 

 

5.2   替換

替換命令允許你快速的用一個單詞來替換文本中的另一個單詞。必須進入命令模式才能使用替換命令。替換命令的格式:

:s/old/new

Vim會跳到old第一次出現的地方,並用new來替換。

對這個命令進行一些修改可以替換多處文本:

:s/old/new/g    可以替換掉第一行出現的所有old,替換成new.

:n,ms/old/new/g  替換行號n和m之間的所有old

:%s/old/new/g   替換整個文件中的所有old   最常用到

:%s/old/new/gc  替換整個文件中的所有old,但在每次出現時提示。