如果我的關(guān)于這個話題的最新帖子沒有提醒到你的話,那我明確地說,我是一個 Vim 的粉絲。所以在你們中的某些人向我扔石頭之前,我先向你們展示一系列“鮮為人知的 Vim 命令”。我的意思是,一些你可能以前沒有碰到過的命令,但可能對你來說很有用。作為第二免責聲明,我不知道哪些命令是你可能知道的,以及哪些是對你來說有用的。因此這些命令實際上是一些相對少見,但很可能很有用的 Vim 命令。

保存文件并退出

說起來有些慚愧,我也是最近才學到這個命令

: x

和下面的命令是等價的:

: wq

都是保存當前文件并退出。

(譯者注:這兩個命令實際上并不完全等價,當文件被修改時兩個命令時相同的。但如果未被修改,使用 : x 不會更改文件的修改時間,而使用 :wq 會改變文件的修改時間。)

基本計算器

在插入模式下,你可以使用 Ctrl+r 鍵然后輸入 =,再輸入一個簡單的算式。按 Enter 鍵,計算結(jié)果就會插入到文件中。例如,嘗試輸入:


Ctrl+r '=2+2' ENTER


然后計算結(jié)果“4 ”會被插入到文件中。

查找重復(fù)的連續(xù)的單詞

當你很快地打字時,很有可能會連續(xù)輸入同一個單詞兩次,就像 this this。這種錯誤可能騙過任何一個人,即使是你自己重新閱讀一遍也不可避免。幸運的是,有一個簡單的正則表達式可以用來預(yù)防這個錯誤。使用搜索命令(默認是 /)然后輸入:

微博桌面截圖_20150306094004

這會顯示所有重復(fù)的單詞。要達到最好的效果,不要忘記把下面的命令:


set hlsearch


放到你的 .vimrc 文件中高亮所有的匹配。

縮寫

一個很可能是最令人印象深刻的竅門是你可以在 Vim 中定義縮寫,它可以實時地把你輸入的東西替換為另外的東西。語法格式如下:


:ab [縮寫] [要替換的文字]


一個通用的例子是:


:ab asap as soon as possible


會把你輸入的 “asap” 替換為 “as soon as possible”。

在你忘記用 root 方式打開文件時的文件保存

這可能是一個在論壇中一直受歡迎的命令。每當你打開一個你沒有寫入權(quán)限的文件(比如系統(tǒng)配置文件)并做了一些修改,Vim 無法通過普通的 “:w” 命令來保存。

你不需要重新以 root 方式打開文件再進行修改,只需要運行:


:w !sudo tee %


這會直接以 root 方式保存。

實時加密文本

如果你不想讓別人看懂你的屏幕上的內(nèi)容,你可以使用一個內(nèi)置的選項,通過下面的命令使用 ROT13 來對文本進行編碼:


ggVGg?


gg 把光標移動到 Vim 緩沖區(qū)的第一行,V 進入可視模式,G 把光標移動到緩沖區(qū)的最后一行。因此,ggVG 使可視模式覆蓋這個當前緩沖區(qū)。最后 g? 使用 ROT13 對整個區(qū)域進行編碼。

注意它可以被映射到一個最常使用的鍵。它對字母符號也可以很好地工作。要對它進行撤銷,最好的方法就是使用撤銷命令:u。

自動補全

這是另外一個令我感到慚愧的功能,但我發(fā)現(xiàn)周圍很多人并不知道。Vim 默認有自動補全的功能。的確這個功能是很基本的,并且可以通過插件來增強,但它也很有幫助。方法很簡單。Vim 嘗試通過已經(jīng)輸入的單詞來預(yù)測單詞的結(jié)尾。比如當你在同一個文件中第二次輸入 “compiler” 時,僅僅輸入 “com” 然后保持在插入模式,按 Ctrl+n 鍵就可以看到 Vim 為你補全了單詞。很簡單,但也很有用。

比較兩個文件的不同

你們中的大多數(shù)很可能都知道 vimdiff 命令,它可以使用分離模式打開 Vim 并比較兩個文件的不同。語法如下:


$ vimdiff [文件1] [文件2]


但同樣的結(jié)果也可以通過下面的 Vim 命令來獲得:


:diffthis


首先在 Vim 中打開原始文件。然后使用分離模式帶來第二個文件:


:vsp [文件2]


最后在第一個緩沖區(qū)里輸入:


:diffthis


通過 Ctrl+w 來切換緩沖區(qū)并再次輸入:


:diffthis


這樣兩個文件中不同的部分就會被高亮。

(譯者注:可以直接在一個緩沖區(qū)里使用命令 :windo diffthis,而不用輸入 :diffthis 兩次)

要停止比較,使用:


:diffoff


按時間回退文件

Vim 會記錄文件的更改,你很容易可以回退到之前某個時間。該命令是相當直觀的。比如:


:earlier 1m


會把文件回退到 1 分鐘以前的狀態(tài)。

注意,你可以使用下面的命令進行相反的轉(zhuǎn)換:


:later


刪除標記內(nèi)部的文字

當我開始使用 Vim 時,一件我總是想很方便做的事情是如何輕松的刪除方括號或圓括號里的內(nèi)容。轉(zhuǎn)到開始的標記,然后使用下面的語法:


di[標記]


比如,把光標放在開始的圓括號上,使用下面的命令來刪除圓括號內(nèi)的文字:


di(


如果是方括號或者是引號,則使用:


di{


和:


di"


刪除指定標記前的內(nèi)容

和刪除標記內(nèi)部有些相似,但目的不同。命令如下:


dt[標記]


會刪除所有光標和標記之間的內(nèi)容(保持標記不動),如果在同一行有這個標記的話。例如


dt.


會刪除至句子的末尾,但保持 ‘.’ 不動。

把 Vim 變?yōu)槭M制編輯器

這不是我最喜歡的竅門,但有時會很有趣。你可以把 Vim 和 xxd 功能連起來來把文件轉(zhuǎn)換為十六進制模式。命令如下:


:%!xxd


類似的,你可以通過下面的命令恢復(fù)原來的狀態(tài):


:%!xxd -r


把光標下的文字置于屏幕中央

我們所要做的事情如標題所示。如果你想強制滾動屏幕來把光標下的文字置于屏幕的中央,在可視模式中使用命令(譯者注:在普通模式中也可以):

zz

跳到上一個/下一個位置

當你編輯一個很大的文件時,經(jīng)常要做的事是在某處進行修改,然后跳到另外一處。如果你想跳回之前修改的地方,使用命令:


Ctrl+o


來回到之前修改的地方

類似的:


Ctrl+i


會回退上面的跳動。

把當前文件轉(zhuǎn)化為網(wǎng)頁

這會生成一個 HTML 文件來顯示文本,并在分開的窗口顯示源代碼:


:%TOhtml


(譯者注:原文是 :%Tohtml,但在我的電腦上是 :%TOhtml)

很基本但很不錯。

總的來說,這一系列命令是在我讀了許多論壇主題和 Vim Tips wiki(如果你想學習更多關(guān)于編輯器的知識,我非常推薦這篇文章) 之后收集起來的。

如果你還知道哪些非常有用但你認為大多數(shù)人并不知道的命令,可以隨意在評論中分享出來。就像引言中所說的,一個“鮮為人知但很有用的”命令也許只是你自己的看法,但分享出來總是好的。

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費用,即可穩(wěn)步提升排名至首頁。歡迎體驗最佳的哈爾濱網(wǎng)站建設(shè)