Vim 簡介

Vim 是 Linux 系統上的最著名的文本/ 代碼編輯器,也是早年的
Vi編輯器的加強版,而 gVim 則是其 Windows
版,它的最大特色是完全使用鍵盤命令進行編輯,脫離了滑鼠操作雖然使得入門變得困難,但上手之后鍵盤流的各種巧妙組合操作卻能帶來極為大幅的效率提升,
因此 Vim 和現代的編輯器(如 Sublime
Text)有著非常巨大的差異,而且入門學習曲線陡峭,需要記住很多按鍵組合和命令,如今被看作是高手、Geek
們專用的編輯器,盡管 Vim
已經是古董級的軟體,但還是有無數新人迎著困難去學習使用,可見其經典與受歡迎程度,
另外,由于 Vim
的可配置性非常強,各種插件、語法高亮配色方案等多不勝數,無論作為代碼編輯器或是文稿撰寫工具都非常給力!
在 Linux
系統中配置應用服務,實際上就是在修改它的組態檔(組態檔可能有多個,其中包含不同的引數),
而且日常作業中也一定免不了撰寫檔案的事情吧,
這些都是要通過文本編輯器來完成的,
在熱門 Linux 作業系統中都會默認安裝vim,
Vim - 難以駕馭的神器
神器總是很難駕馭的,主角總得付出一些努力才能識訓到更加強大的力量,對于 Vim
這種上古神器來說更是如此,由于它全程使用鍵盤操作,你必須記住一堆快捷鍵、按鍵組合以及各種命令才能開始使用,很多首次接觸
Vim
的人會覺得越學越復雜而中途放棄,然而,堅持下來的朋友就會漸漸地發現這種鍵盤流操作的設計絕妙之處!
如果你是一位 IT 界人士,需要或將要與 Linux 系統打交道,那么學習好 Vim
的操作絕對能讓你的作業輕松百倍!!
因為很多時候, Linux
作為服務器是不會開啟圖形界面,當需要遠程操作時,你只能利用SSH" 命令字符式
" 的 Shell
界面對其進行操作,這時如果你需要修改服務器上的網頁代碼或組態檔,VI或 VIM
命令就是你最佳最方便也是最強大的伙伴了!相信我,學好 數理化 VIM
,走遍天下也不怕!
Vim 入門幫助

下面首先對 Vim 做一下最基本的介紹,并給出一些參考資訊,以方便對 Vim
不熟悉的讀者也能夠理解并自
己查閱進一步資訊,
Vim 帶有完整的幫助檔案,
- 進入 Vim 后輸入 " :help"即可訪問
- 新手在作業系統的命令列上輸入 vimtutor 命令即可開始學習一個簡單的 30
分鐘的 Vim 教程2 Vim 命令
Vim 模式介紹

與大部分其它編輯器不同,進入 Vim
后,預設狀態下鍵入的字符并不會插入到所編輯的檔案之中,Vim 的
模式(mode ,可以簡單地理解為 " 狀態 " )概念非常重要,需要知道,Vim
有以下幾個模式:
- 正常(normal)模式,預設的編輯模式;下面如果不加特殊說明,提到的命令都直接在正常模式下
輸入;任何其它模式中都可以通過鍵盤上的 Esc 鍵回到正常模式, - 命令(command)模式 ,用于執行較長、較復雜的命令;在正常模式下輸入 " :"
(一般命令)、 " /"
(正向搜索)或 "
?"(反向搜索)即可進入該模式;命令模式下的命令要輸入回車鍵(Enter)才算完成, - 插入(insert)模式 ,輸入文本時使用;在正常模式下鍵入 " i"(insert )或 "
a"(append)即可
進入插入模式(也有另外一些命令,如 "
c",也可以進入插入模式,但這些命令有其它的作用), - 可視(visual)模式 ,用于選定文本塊;可以在正常模式下輸入 "
v"(小寫)來按字符選定,輸入
"V" (大寫)來按行選定,或輸入 " Ctrl-V"來按方塊選定, - 選擇(select)模式 ,與普通的 Windows
編輯器較為接近的選擇文本塊的方式;在以可視模式和
選擇模式之一選定文本塊之后,可以使用 " Ctrl-G" 切換到另一模式 ------
該模式很少在 Linux 上使用,本
文中就不再介紹了,
正常模式

命令模式

插入模式
- i 游標所在位置插入
- I 游標所在位置行首插入
- o 游標所在位置下方新開一行插入
- O 游標所在位置上方新開一行插入
- a 游標所在位置下一個字符的位置插入
- A 游標所在位置行行尾插入
Vim 實體
本實體作為基礎教程,拓展部分見附錄《Vim 用戶手冊中文版 7.2》

Vim 第一步
首次運行 Vim
[root@mastera0 ~]# ll file1
-rw-r--r--. 1 root root 274 Jun 24 12:19 file1
[root@mastera0 ~]# vim file1
使 Vim 開始編輯一個名為 file1 的檔案,螢屏上看起來大致是這樣:
* "黑色塊" 代表當前游標位置;
* 上波浪線(~)表示所在行并不是檔案內容的一部分,換句話說,Vim 將
檔案之外的部分顯示為波浪線;
* 在視窗的底部, 一個訊息行顯示說當前正 在編輯的檔案叫 file1,它有 16
行,274 個字符,但前光
標所在位置為第一行的第一位

如果是新檔案呢?
[root@mastera0 ~]# vim file

在視窗的底部, 一個訊息行顯示說當前正 在編輯的檔案叫
file,并且它是一個新檔案,
插入文本
Vim 編輯器是一個模式編輯器,這意味著在不同狀態下編輯器有不同
的行為模式,兩個基本的模式 Normal
模式和 Insert 模式,在 Normal
模式下你鍵入的每一個字符都被視為一個命令,而在 Insert 模式下鍵入
的字符 都作為實際要輸入的文本內容, 剛啟動時 Vim 作業于 Normal
模式,要進入 Insert 模式你需要使
用"i" 命 令(i 意為 Insert),接下來就可以直接輸入了,別怕出錯,
錯了還可以修 改,比如下面這首程式
員的打油詩:
A very intelligent turtle
Found programming UNIX a hurdle
"turtle" 之后你按下回車鍵另起一行,最后按下 鍵退出 Insert 模式 ,回到
Normal 模式,現在你的Vim 視窗中有了這樣的兩行內容 :

現在是什么模式?
要知道你現在所處的作業模式是什么,打開顯示模式的開關:
:set showmode
:set noshowmode 關閉顯示模式

你會看到按下冒號鍵之后當前游標跑到視窗的最后一行去了,那是使用冒
號命令的地方(顧名思義,冒號命
令就是總是以冒號打頭的命令) ,最后按
下回車鍵結束整個命令(所有的冒號命令都以這種方式表明命令的
結束).
現在,如果你鍵入了"i"命令 Vim 就會在視窗底部顯示--INSERT-- ,這
表明你目前處于 Insert 模式,
如 果 按 下 鍵 返 回 到 Normal 模 式 剛 才 顯 示 出 來 的 模
式"--INSERT-- 就會消失 ;Normal模式并不會顯示 ---
NORMAL--,作為默認的作業模式它不顯示任何字串,
Vim 新手最頭痛的問題就是模式---經常忘記自己置身于何種模式,
或者不經意敲了哪個字符就切換到別的
模式去了,
不管你當前所處的模 式是什么,按下 都會讓你回到 Normal 模式(即使已經在
Normal 模式 下),有時
需要按兩次 ,如果 Vim 以一聲蜂鳴回答你, 那說明你已經 是在 Normal 模式了,
移動游標
回到 Normal 模式后 , 你就可以用下面的命令來移動游標 :
* h 左
* j 下
* k 上
* l 右
人們一開始會認為這些字符是隨意選取的,畢竟有誰 l 來代 表 right 呢 ?
但事實上 , 這些字符都是精心挑選的 :
在編輯器中移動光 標是十分常用的操作 ,
這些字符在鍵盤上都分布在你右手周圍,這樣的安 排可以使你最快
最方便地使用它們 ( 尤其是對那些用十個手指而不是二指 禪用戶而言 ) ,
備注 : 同時你還可以用箭頭鍵來移動游標,不過這樣做實
際上會大大降低你的效率,因為用這些鍵你需要不
停地在 字母區和箭頭鍵之間頻繁轉換,想象一下要是你在一小時
內這樣做一百次會占用你多少時間 ? 另外 , 并
不是每個鍵 盤上都安排有箭頭鍵 , 或者都把它們放在最常見的位置 ; 所以使用
hjkl 還是大有好處,
練習檔案名位 hjkl ,放在共享當中,如果進入了插入模式不要忘了要用 回到
Normal 模 式, |
vimtutor| 也是學習這些命令的一個好去處,
記住:學習這些命令的最好辦法不是使用什么記憶法 , 而是練習,
洗掉字符
要洗掉一個字符,只需要將游標移到該字符上按下"x". ( 這是在追
憶古老的打字機時代,在打字機上洗掉字
符就是用 xxxx 來覆寫它) 把游標 移到上面例子中的第一行,鍵入 xxxxxxx(7 個
x) 來洗掉"A very ",
輸入其它內容
比如:首先鍵入的命令是 i( 進 入 Insert 模 式), 接著插入"A young", 然后 退
出 Insert 模式(最后的 ),
洗掉一行
洗掉一整行內容使用"dd"命令,洗掉后下面的行會移上來填補空缺:2.1.5
撤消與重做
撤銷一次操作
如果你誤刪了過多的內容,顯然你可以再輸入一遍,但是命令"u" 更 簡便,
它可以撤消上一次的操作 1 ,
實際看一下它的效果,用"dd" 命令來
洗掉前面例子中的第一行內容,"u"命令會把它找回來,
重做
如果你撤消了多次,你還可以用 CTRL-R(重做) 來反轉撤消的動作,換
句話說,它是對撤消的撤消,
撤銷一行操作
撤消命令還有另一種形式,"U"命令, 它一次撤消對一行的全部操作,第
二次使用該命令則會撤消前一
個"U"的操作,
- 洗掉 very
- 洗掉 turtle
- 用"u"撤消"U"
- 用"U" 恢復該行
"U"命令本身也造成了一次改變,這種改變同樣可以用"u" 命令 和 CTRL-R
來撤消和重做,看起來這很容易
把人搞糊涂,不過別擔心, 用"u"和 CTRL-R 你可以找回任何一個操作狀態,
其它編輯命令
Vim 有一大堆命令來改變文本,這里僅列 出一些最常用的,
追加 a
"i" 命令可以在當前游標之前插入文本,但如果你想在當前行的末尾
添加一些內容時怎么辦呢?你必需在光
標之后插入文本,答案是用"a" 命 令來代替"i",
另起一行 o\O
- "o"命令可以在當前行的下面另起一行,并使當前模式轉為 Insert 模
式,這樣你可以在該命令之后直接輸
入內容,假設游標位于下面兩行中第 一行的某處: - "O"命令(注意是大寫的字母 O)將在當前行的上面另起一行,
使用命令計數
假設你要向上移動 9 行,這可以用"kkkkkkkkk"或"9k" 來完成,事實
上,很多命令都可以接受一個數字作
為重復執行同一命令的次數,比如剛
才的例子,要在行尾追加三個感嘆號,當時用的命令是"a!!! ",
另 一個辦法是用"3a! "命令,
3 說明該命令將被重復執行 3 次,同樣, 刪 除 3 個字符可以用"3x",指
定的數字要緊挨在它所要修飾的命令前面,
退出
要退出 Vim,用命令"ZZ",該命令保存當前檔案并退出 Vim.
放棄編輯 :q!
有時你會在做了一連串修改之后突然意識到最好是放棄所有的修改重
新來過,別擔心,Vim 中有一個命令可
以丟棄所有的修改并退出:
:q!
別忘了在命令之后加回車,
放棄編輯并重新載入 :e!
如果你在放棄所有修改后還想以該檔案的初始內容作為開始繼續編
輯,還可以用":e!"命令放棄所有修改并
重新載入該檔案的原始內容,
保存并退出:wq :wq!
一般我們都是需要保存并退出的,有一些檔案保存的時候需要強制保存退出,這時加上!即可,比
如/etc/shadow2.1.8 求助
你想做的任何操作都可以在 Vim 的幫助檔案里找到答案, 別怕問問 題!
:help
會帶你到幫助檔案的起始點,
如果你沒有指定一個具體的幫助主題,":help" 命令會顯示上面提到
的幫助檔案的起點,Vim 的作者聰明地
(也許是懶惰地) 設計了它的幫助系 統:
幫助視窗也是一個普通的編輯視窗,你可以使用跟編輯其它檔案時一
樣的命令來操作幫助檔案,比如用 hljk 移動游標,
退出幫助視窗也跟退出其它檔案編輯視窗一樣,使用"ZZ" 即可,這只
會關閉幫助視窗,而不是退出 Vim.
瀏覽幫助檔案時,你會注意到有一些內容用兩個小柵欄圍了起來( 比
如|help|),這表明此處是一個超鏈接,
如果你把游標置于兩個小柵欄之間的任何位置然后按下
CTRL-](跳轉到一個標簽的命令),幫助系統就會帶
你 到那個指定的主題,(因為一些此處不便討論的原因,在 Vim 的術語中這種
超鏈接叫標簽,所以 CTRL-]
可以跳轉到當前游標之下的那個 word 所對應的 鏈接中 1 ,
幾次跳轉之后,你可能想回到原來的某個地方,CTRL-T(彈出標簽) 可
以回到前一個位置,用命令 CTRL-
O(跳轉到較早的位置) 也可以,
幫助視窗的開始有一個關于*help.txt*的說明,在星號"*" 之間的字 符被
幫助系統定義為一個標簽的目的地(超鏈接的目的地).
要查看關于某個特殊主題的幫助,使用下面的命令形式:
:help {subject}
例如,查看關于 showmode 的幫助
:help showmode3.2 改動
游標的指定移動
"G"命令 指定一 個命令計數,
這個命令就會把游標定位到由命令計數指定的行上,比 如"33G"就會把游標
置于第 33 行上,
[root@mastera0 ~]# cp /var/log/messages messages
[root@mastera0 ~]# vim messages
沒有指定命令計數作為引數的話 :
* "G" 會 把 光 標 定 位 到 最 后 一 行 上
* "gg"命令是跳轉到第一行的快捷的方法,"1G"效果也是一樣, 但是敲
起來就沒那么順手了,
* "%"命令 另一個移動到某行的方法是在命令"%" 之前指定一個命令計數 ,
如"50%"將會把游標定位在檔案的中間;比"90%" 跳到接檔案尾的地 方 ,
簡單搜索
"/string"命令
"/string"命令可用于搜索一個字串,比如要找到單詞"mysql", 使用命令:
/mysql
要查找上次查找的字串的下一個位置,使用"n" 命令,如果你知
道你要找的確切位置是目標字串的第幾
次出現,還可以在"n" 之前放置 一個命令計數,"3n"會去查找目標字串的第 3
次出現,向游標所在位置以
上查找用"N",
"?string"命令
"?"命令與"/"的作業相同,只是搜索方向相反,比如要找到單詞"mysql",
使用命令:
?mysql忽略大小寫
通常情況下你要準確地鍵入你要查找的東西,如果你并不關心目標字
符中字母的大小寫,可以通過設
置'ignorecase'選項:
:set ignorecase
取消則設定'noignorecase'選項:
:set noignorecase
如果你在編輯一段源程式時看到了一個叫"nr" 的變數,你想查看一
下這個變數就被用在了哪些地方,簡單
的辦法是把游標移到"nr" 上然后 用"*" 命令和"n"
命令一個一個地查找所有的匹配,
不過還有更好的辦法,使用下面的命令:
:set hlsearch
現在你要再查找"nr", Vim 就會以某種形式高亮顯示所有符合的匹配,對
于想查看一個變數被用在哪些地
方,這個辦法太棒了, 不需任何其它的命 令
看得眼花的時候還可以關閉這一功能:
:set nohlsearch
不過你要在下次搜索時再次使用這一功能就又得打開它,如果你只是想去
掉當前的高亮顯示,可以使用下面
的命令 :
:nohlsearch
復制粘貼
要把文本內容從一處復制到另一處\
- 先洗掉 dd 再粘貼 p\
- "y" 運算子命令會把文本復制到一個暫存器
中,然后可以用"p"命令把它取回,
"y"命令
* "yw"來復制一個 word;
* "y2w"命令復制兩個 word;
* "yy"復制一行;
* "3yy"復制游標所在行和向下的行,一共三行;
例如:\
- 復制 file 檔案中的 turtle 并粘貼到該行的最后;\
- 復制 file 檔案中的 intelligent turtle 并粘貼到該行的最后;\
- 復制 file 檔案中的第二行并粘貼到第四行;\
- 復制 file 檔案中的第一行第二行第三行,并粘貼到第五行第六行第七行,
替換字符
- ??/UNIX/linux 對游標所在行第一個出現的 UNIX 替換成 linux
- ??/UNIX/linux /g 對游標所在行所有 UNIX 都替換成 linux , g
表示全行替換 - :% s/UNIX/linux /g 將全文中的 carol 都替換位 natasha , "%"
指定該命令將作用于所有行上
Vim 的保護機制
如果我們沒有通過 q 退出,而是通過其他方式強行退出,比如說直接關終端,會導致
vim 的一個報錯,當我
們下次打開這個檔案的時候,會提示
Found a swap file by the name ".file.swp"
這是因為 vim 他不是實時寫入的機制,他會先把檔案寫到記憶體,等我們執行 w
操作以后,再寫回到原檔案,
那么在寫回原檔案,或者執行 q 的放棄操作之前,會生成一個臨時的檔案,以 .
開頭, swp 結尾,當我們看
到這種情況,就說明這個檔案是在變編輯的程序中強制退出的,或者是正在被人編輯,
所以這個檔案的作用就是防止強制退出造成的資料安全隱患,和防止檔案同時被多次修改,
Swap file ".file.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
我們可以根據他的提示執行相應的操作,比如說 Q
,退出,如果想要順利編輯這個檔案的話,一方面可以使
用 E ,無論如何也要編輯,或者先退出,把 swp
檔案洗掉了以后再編輯,也是可以的,
注意:要使用 vim 需要注意一下權限問題,必須要有讀寫權限才能使用 vim ,
可以看一下沒有寫權限和沒有讀權限會出現什么問題,
:::
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/543490.html
標籤:其他
上一篇:docker-swarm搭建
下一篇:Linux
