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

保存文件并退出

說(shuō)起來(lái)有些慚愧,我也是最近才學(xué)到這個(gè)命令

: x

和下面的命令是等價(jià)的:

: wq

都是保存當(dāng)前文件并退出。

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

基本計(jì)算器

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


Ctrl+r '=2+2' ENTER


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

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

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

微博桌面截圖_20150306094004

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


set hlsearch


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

縮寫(xiě)

一個(gè)很可能是最令人印象深刻的竅門(mén)是你可以在 Vim 中定義縮寫(xiě),它可以實(shí)時(shí)地把你輸入的東西替換為另外的東西。語(yǔ)法格式如下:


:ab [縮寫(xiě)] [要替換的文字]


一個(gè)通用的例子是:


:ab asap as soon as possible


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

在你忘記用 root 方式打開(kāi)文件時(shí)的文件保存

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

你不需要重新以 root 方式打開(kāi)文件再進(jìn)行修改,只需要運(yùn)行:


:w !sudo tee %


這會(huì)直接以 root 方式保存。

實(shí)時(shí)加密文本

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


ggVGg?


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

注意它可以被映射到一個(gè)最常使用的鍵。它對(duì)字母符號(hào)也可以很好地工作。要對(duì)它進(jìn)行撤銷(xiāo),最好的方法就是使用撤銷(xiāo)命令:u。

自動(dòng)補(bǔ)全

這是另外一個(gè)令我感到慚愧的功能,但我發(fā)現(xiàn)周?chē)芏嗳瞬⒉恢?。Vim 默認(rèn)有自動(dòng)補(bǔ)全的功能。的確這個(gè)功能是很基本的,并且可以通過(guò)插件來(lái)增強(qiáng),但它也很有幫助。方法很簡(jiǎn)單。Vim 嘗試通過(guò)已經(jīng)輸入的單詞來(lái)預(yù)測(cè)單詞的結(jié)尾。比如當(dāng)你在同一個(gè)文件中第二次輸入 “compiler” 時(shí),僅僅輸入 “com” 然后保持在插入模式,按 Ctrl+n 鍵就可以看到 Vim 為你補(bǔ)全了單詞。很簡(jiǎn)單,但也很有用。

比較兩個(gè)文件的不同

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


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


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


:diffthis


首先在 Vim 中打開(kāi)原始文件。然后使用分離模式帶來(lái)第二個(gè)文件:


:vsp [文件2]


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


:diffthis


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


:diffthis


這樣兩個(gè)文件中不同的部分就會(huì)被高亮。

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

要停止比較,使用:


:diffoff


按時(shí)間回退文件

Vim 會(huì)記錄文件的更改,你很容易可以回退到之前某個(gè)時(shí)間。該命令是相當(dāng)直觀的。比如:


:earlier 1m


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

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


:later


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

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


di[標(biāo)記](méi)


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


di(


如果是方括號(hào)或者是引號(hào),則使用:


di{


和:


di"


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

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


dt[標(biāo)記](méi)


會(huì)刪除所有光標(biāo)和標(biāo)記之間的內(nèi)容(保持標(biāo)記不動(dòng)),如果在同一行有這個(gè)標(biāo)記的話。例如


dt.


會(huì)刪除至句子的末尾,但保持 ‘.’ 不動(dòng)。

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

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


:%!xxd


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


:%!xxd -r


把光標(biāo)下的文字置于屏幕中央

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

zz

跳到上一個(gè)/下一個(gè)位置

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


Ctrl+o


來(lái)回到之前修改的地方

類似的:


Ctrl+i


會(huì)回退上面的跳動(dòng)。

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

這會(huì)生成一個(gè) HTML 文件來(lái)顯示文本,并在分開(kāi)的窗口顯示源代碼:


:%TOhtml


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

很基本但很不錯(cuò)。

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

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

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