如果我的 關(guān)于這個(gè)話題的最新帖子 沒 有提醒到你的話,那我明確地說,我是一個(gè) Vim 的粉絲。所以在你們中的某些人向我扔石頭之前,我先向你們展示一系列“鮮為人知的 Vim 命令”。我的意思是,一些你可能以前沒有碰到過的命令,但可能對你來說很有用。作為第二免責(zé)聲明,我不知道哪些命令是你可能知道的,以及哪些是對你來說有 用的。因此這些命令實(shí)際上是一些相對少見,但很可能很有用的 Vim 命令。
?
保存文件并退出
說起來有些慚愧,我也是最近才學(xué)到這個(gè)命令
:x
?
和下面的命令是等價(jià)的:
:wq
?
都是保存當(dāng)前文件并退出。
(譯者注:這兩個(gè)命令實(shí)際上并不完全等價(jià),當(dāng)文件被修改時(shí)兩個(gè)命令時(shí)相同的。但如果未被修改,使用 :x 不會更改文件的修改時(shí)間,而使用 :wq 會改變文件的修改時(shí)間。)
?
基本計(jì)算器
在插入模式下,你可以使用 Ctrl+r 鍵然后輸入 =,再輸入一個(gè)簡單的算式。按 Enter 鍵,計(jì)算結(jié)果就會插入到文件中。例如,嘗試輸入:
Ctrl+r '=2+2' ENTER
?
然后計(jì)算結(jié)果“4 ”會被插入到文件中。
?
查找重復(fù)的連續(xù)的單詞
當(dāng)你很快地打字時(shí),很有可能會連續(xù)輸入同一個(gè)單詞兩次,就像 this this。這種錯(cuò)誤可能騙過任何一個(gè)人,即使是你自己重新閱讀一遍也不可避免。幸運(yùn)的是,有一個(gè)簡單的正則表達(dá)式可以用來預(yù)防這個(gè)錯(cuò)誤。使用搜索命令(默認(rèn)時(shí) /)然后輸入:
\(\<\w\+\>\)\_s*\1
?
這會顯示所有重復(fù)的單詞。要達(dá)到最好的效果,不要忘記把下面的命令:
set hlsearch
?
放到你的 .vimrc 文件中高亮所有的匹配。
?
縮寫
一個(gè)很可能是最令人印象深刻的竅門是你可以在 Vim 中定義縮寫,它可以實(shí)時(shí)地把你輸入的東西替換為另外的東西。語法格式如下:
:ab [縮寫][要替換的文字]
?
一個(gè)通用的例子是:
:ab asap as soon as possible
?
會把你輸入的 “asap” 替換為 “as soon as possible”。
?
在你忘記用 root 方式打開文件時(shí)的文件保存
這可能是一個(gè)在論壇中一直受歡迎的命令。每當(dāng)你打開一個(gè)你沒有寫入權(quán)限的文件(比如系統(tǒng)配置文件)并做了一些修改,Vim 無法通過普通的 “:w” 命令來保存。
你不需要重新以 root 方式打開文件再進(jìn)行修改,只需要運(yùn)行:
:w !sudo tee %
?
這會直接以 root 方式保存。
?
實(shí)時(shí)加密文本
如果你不想讓別人看懂你的屏幕上的內(nèi)容,你可以使用一個(gè)內(nèi)置的選項(xiàng),通過下面的命令使用 ROT13 來對文本進(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 對整個(gè)區(qū)域進(jìn)行編碼。
注意它可以被映射到一個(gè)最常使用的鍵。它對字母符號也可以很好地工作。要對它進(jìn)行撤銷,最好的方法就是使用撤銷命令:u。
?
自動(dòng)補(bǔ)全
這是另外一個(gè)令我感到慚愧的功能,但我發(fā)現(xiàn)周圍很多人并不知道。Vim 默認(rèn)有自動(dòng)補(bǔ)全的功能。的確這個(gè)功能是很基本的,并且可以通過插件來增強(qiáng),但它也很有幫助。方法很簡單。Vim 嘗試通過已經(jīng)輸入的單詞來預(yù)測單詞的結(jié)尾。比如當(dāng)你在同一個(gè)文件中第二次輸入 “compiler” 時(shí),僅僅輸入 “com” 然后保持在插入模式,按 Ctrl+n 鍵就可以看到 Vim 為你補(bǔ)全了單詞。很簡單,但也很有用。
?
比較兩個(gè)文件的不同
你們中的大多數(shù)很可能都知道 vimdiff 命令,它可以使用分離模式打開 Vim 并比較兩個(gè)文件的不同。語法如下:
$ vimdiff [文件1][文件2]
?
但同樣的結(jié)果也可以通過下面的 Vim 命令來獲得:
:diffthis
?
首先在 Vim 中打開原始文件。然后使用分離模式帶來第二個(gè)文件:
:vsp [文件2]
?
最后在第一個(gè)緩沖區(qū)里輸入:
:diffthis
?
通過 Ctrl+w 來切換緩沖區(qū)并再次輸入:
:diffthis
?
這樣兩個(gè)文件中不同的部分就會被高亮。
(譯者注:可以直接在一個(gè)緩沖區(qū)里使用命令 :windo diffthis,而不用輸入 :diffthis 兩次)
要停止比較,使用:
:diffoff
?
按時(shí)間回退文件
Vim 會記錄文件的更改,你很容易可以回退到之前某個(gè)時(shí)間。該命令是相當(dāng)直觀的。比如:
:earlier 1m
?
會把文件回退到 1 分鐘以前的狀態(tài)。
注意,你可以使用下面的命令進(jìn)行相反的轉(zhuǎn)換:
:later
?
刪除標(biāo)記內(nèi)部的文字
當(dāng)我開始使用 Vim 時(shí),一件我總是想很方便做的事情是如何輕松的刪除方括號或圓括號里的內(nèi)容。轉(zhuǎn)到開始的標(biāo)記,然后使用下面的語法:
di[標(biāo)記]
?
比如,把光標(biāo)放在開始的圓括號上,使用下面的命令來刪除圓括號內(nèi)的文字:
di(
?
如果是方括號或者是引號,則使用:
di{
?
和:
di"
?
刪除指定標(biāo)記前的內(nèi)容
和刪除標(biāo)記內(nèi)部有些相似,但目的不同。命令如下:
dt[標(biāo)記]
?
會刪除所有光標(biāo)和標(biāo)記之間的內(nèi)容(保持標(biāo)記不動(dòng)),如果在同一行有這個(gè)標(biāo)記的話。例如
dt.
?
會刪除至句子的末尾,但保持 ‘.’ 不動(dòng)。
?
把 Vim 變?yōu)槭M(jìn)制編輯器
這不是我最喜歡的竅門,但有時(shí)會很有趣。你可以把 Vim 和 xxd 功能連起來來把文件轉(zhuǎn)換為十六進(jìn)制模式。命令如下:
:%!xxd
?
類似的,你可以通過下面的命令恢復(fù)原來的狀態(tài):
:%!xxd -r
?
把光標(biāo)下的文字置于屏幕中央
我們所要做的事情如標(biāo)題所示。如果你想強(qiáng)制滾動(dòng)屏幕來把光標(biāo)下的文字置于屏幕的中央,在可視模式中使用命令(譯者注:在普通模式中也可以):
zz
?
跳到上一個(gè)/下一個(gè)位置
當(dāng)你編輯一個(gè)很大的文件時(shí),經(jīng)常要做的事是在某處進(jìn)行修改,然后跳到另外一處。如果你想跳回之前修改的地方,使用命令:
Ctrl+o
?
來回到之前修改的地方
類似的:
Ctrl+i
?
會回退上面的跳動(dòng)。
?
把當(dāng)前文件轉(zhuǎn)化為網(wǎng)頁
這會生成一個(gè) HTML 文件來顯示文本,并在分開的窗口顯示源代碼:
:%TOhtml
?
(譯者注:原文是 :%Tohtml,但在我的電腦上是 :%TOhtml)
很基本但很不錯(cuò)。
總的來說,這一系列命令是在我讀了許多論壇主題和 Vim Tips wiki (如果你想學(xué)習(xí)更多關(guān)于編輯器的知識,我非常推薦這篇文章) 之后收集起來的。
如果你還知道哪些非常有用但你認(rèn)為大多數(shù)人并不知道的命令,可以隨意在評論中分享出來。就像引言中所說的,一個(gè)“鮮為人知但很有用的”命令也許只是你自己的看法,但分享出來總是好的。
via: http://xmodulo.com/useful-vim-commands.html
作者: Adrien Brochard 譯者: wangjiezhe 校對: wxy
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
