無標(biāo)題文章

學(xué)前須知

vim 是什么?

  1. vim 是人類目前已知的最好 [1]文本編輯器
  2. vim 是價值60億美元的 文本編輯器
  3. vim 會成為你最后一個 文本編輯器,因為它是最好的

vim 的宗旨:

更好,
更強(qiáng),
更快。

學(xué)習(xí) vim 的建議步驟:

  1. 活下來
  2. 感到舒適
  3. 感到自己更好、更強(qiáng)、并且更快
  4. 成為 vim 超人

敬告學(xué)習(xí)者:

  1. 學(xué)習(xí) vim 的過程是很痛苦的,但用起來棒極了
  2. 你先要學(xué)習(xí)最基本的生存技能,然后一點(diǎn)點(diǎn)地去探索奇技淫巧
  3. 就像學(xué)習(xí)樂器一樣,你學(xué)習(xí)的最開始階段會很痛苦
  4. 別指望在3天之內(nèi), ^in 3 days 把 vim 玩的比其它編輯器更好

開始學(xué)習(xí)

第一,活下來

  1. 安裝 vim 下載地址 [2]
  2. 打開 vim
  3. 往下讀

一個標(biāo)準(zhǔn)的編輯器應(yīng)該具備這樣的特點(diǎn):在鍵盤上打點(diǎn)什么,然后屏幕上就出現(xiàn)什么。但是現(xiàn)在的 vim 不行,它還處于普通(Normal)模式。你需要按下字母 i 來進(jìn)入插入(Insert)模式。
現(xiàn)在你應(yīng)該感覺好多了,折騰半天,總算用上了 記事本 (還tm是沒有保存、編輯的閹割版)。既然你這么想,請按下 ESC 鍵,讓我們回到普通模式。
然后,你需要知道這幾個東西:

  • i : 進(jìn)入插入模式; ESC 返回普通模式
  • x : 刪除當(dāng)前(光標(biāo)閃爍處)字符
  • :wq :保存并退出(:w 保存, :q 退出)
  • dd : 剪切當(dāng)前行
  • p : 粘貼

這就是 vim 的最基本內(nèi)容,不過你還是應(yīng)該知道:

  • hjkl : 移動光標(biāo),等同于插入模式下的 ←↓↑→ [^j down]
  • :help <command> : <command> 的幫助文檔,比如 :help i:help 收獲完整幫助文檔)

[^j down]: 為了記住這鬼東西,你要告訴自己 j 有點(diǎn)像

現(xiàn)在,你已經(jīng)知道了最基本的生存技能,大概能順利活著了。
什么時候你掌握好了(把這幾個命令用得很自然,就像吃喝拉撒一般),就可以進(jìn)入第二階段了。(估計得費(fèi)上幾天功夫)

對了,得說幾句幫助你理解普通模式:
你一定知道 Ctrl-c復(fù)制 ,這跟字母 c 本身幾乎毫無關(guān)系(你非得說 c for copy 我也沒辦法)。這就好像一用了 Ctrl ,就改變這整個世界的原本意思。 vim 的普通模式,就相當(dāng)于一直按著 Ctrl (或其它某些 非打印字符 鍵)進(jìn)行各種處理。

最后還有點(diǎn)事兒:

  • <xxx> : 應(yīng)依情景被替換的內(nèi)容(內(nèi)容類別由 xxx 指定),比如 <command> 就意味著此處應(yīng)輸入某命令, <text> 則代表文本
  • 所有以 : 開頭的命令,結(jié)尾都默認(rèn)要按下 Enter 鍵,比如 :q 其實意味著你要按下 : 、 qEnter 3個鍵
  • 命令都要用 西文 輸入,要 : 不要
  • : 打頭的命令,你是看不見(它們的顯示)的

第二,感到舒適

既然你活下來了,就有必要提高點(diǎn)生活質(zhì)量,而非像一條狗 [3] 那樣無奈、痛苦。

這里是更多的技巧 ^more skills ,值得記下來并進(jìn)行嘗試 [4]

1、進(jìn)入插入模式的替換方案:
  • a : 在光標(biāo)后的位置開始插入
  • o : 在光標(biāo)后的一行開始插入
  • O : 在光標(biāo)前的一行開始插入
  • cw : 把光標(biāo)閃爍處到單詞結(jié)尾處的東西刪掉,然后插入

為進(jìn)一步說明,假設(shè)現(xiàn)在處于普通模式,屏幕上有文本 word ,光標(biāo)在 r 處閃爍,想輸入 <text> 。[^new line]

為得到的效果 應(yīng)選用的插入模式進(jìn)入命令
wo<text>rd i
wor<text>d a
word\n<text> o
<text>\nword O
wo<text> cw

[^new line]: 你應(yīng)該知道 \n代表換行(new line)

2、基本移動
  • 0 : 到達(dá)當(dāng)前行的開頭(相當(dāng)于 Home 鍵)
  • ^ : 到達(dá)當(dāng)前行開頭第一個非空白類字符
  • $ : 到達(dá)當(dāng)前行的結(jié)尾(相當(dāng)于 End
  • g_ : 到達(dá)當(dāng)前行結(jié)尾最后一個非空白類字符
  • /<pattern> : 查找 <pattern>,比如 /word 就是在查找 word 這個單詞
3、復(fù)制粘貼
  • P : 在光標(biāo)閃爍處之前粘貼( p 則是在之后)
  • yy : 復(fù)制當(dāng)前行(相當(dāng)于 ddpddP —— 剪切并粘貼)
4、撤銷和重做
  • u : 撤銷
  • Ctrl-r : 重做
5、打開、保存、退出和文檔切換
  • :e <path/to/file> : 打開某路徑下的文檔
  • :w : 保存
  • :saveas <path/to/file> : 把當(dāng)前文本保存到某路徑下
  • :x / ZZ / :wq : 保存并退出當(dāng)前文檔
  • :q! : 退出并不保存當(dāng)前文檔( :qa! 退出所有打開的文檔并不保存)
  • :bn / :bp :切換到下一個/上一個打開的文檔

第三,感到自己更好、更強(qiáng)、并且更快

祝賀你走到了這里!現(xiàn)在要開始一些有趣的東西了。 [5]

首先,更好

來看看 vim 怎么體現(xiàn)機(jī)器的自我修養(yǎng)吧。 [6]

  1. . : 重復(fù)上一條指令
  2. N<command> : 重復(fù)做N次<command>

來看一些例子:

  • 2dd : 剪切當(dāng)前2行(光標(biāo)閃爍行及下一行)
  • 3p : 粘貼3次剪切板的文本

假設(shè)現(xiàn)在屏幕上顯示:

line1
line2

而光標(biāo)在 line1 那行,那么在普通模式下輸入 2dd3p (注意你看不見這些非 : 開頭的命令,別慌),文本就會變成:

line1
line2
line1
line2
line1
line2
  • 100iword <ESC> : 效果如下,千萬別忘了最后按下 ESC 鍵,也別忘了那個空格
    word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

  • . :重復(fù)上面的命令,這里的話,就是再寫100個 word

  • 3. : 再寫3個 word(而非300個,多聰明的 vim 命令)

其次,更強(qiáng)

vim 一大優(yōu)點(diǎn)就是,它能讓你更有效地穿梭于文本之間。別跳過這節(jié)。

行間移動:
  1. NG : 到第N行
  2. gg : 到文本開頭(相當(dāng)于 1G
  3. G : 到文本結(jié)尾行
詞間移動:
  1. w : 到下一個單詞開頭
  2. e : 到當(dāng)前單詞結(jié)尾
  3. W : 跳過最近的空白區(qū),到下一個非空白字符
  4. E : 到最近空白區(qū)前的那個非空白字符

假設(shè)現(xiàn)在處于普通模式,屏幕上有文本:

The quick-brown* fox jumps over the lazy dog.

而光標(biāo)在 u 上。那么:

輸入的命令 光標(biāo)會到達(dá)的位置
w -
e k
W f
E *
碼農(nóng)的“凌波微波”
  • % : 到達(dá)開括號處,適用于大中小三種括號
    比如普通模式下, 有文本 printf("foo"); ,光標(biāo)位于 "foo") 的任意位置,按下 %, 都可以立馬到達(dá) ( 處。
  • * / # : 到當(dāng)前單詞出現(xiàn)的下一個/上一個位置

如果你不覺得 % 、 *# 特別有用,只能說你不是碼農(nóng),或者不是資深碼農(nóng)。

最后,更快

還記得上一階段提到的基本移動嗎?學(xué)習(xí)它的原因是,你會寫大量的 <start position><command><end position> 樣式的指令。
比如 0y$ 的作用是,從當(dāng)前行的第一個字符,復(fù)制到這行的結(jié)尾; ye , 從光標(biāo)處復(fù)制到這個單詞結(jié)束; y2/word 復(fù)制了光標(biāo)所在處和 word 第2次出現(xiàn)中間的文本。
能用于復(fù)制命令 y 的,自然也能用于剪切命令 d ,虛擬選擇命令 v ,大寫命令 gU , 小寫命令 gu ,……這需要你去不斷探索。

第四,成為 vim 超人

你現(xiàn)在應(yīng)該能很爽地用 vim 了。不過接下來,才是 vim 真正的殺手锏。

1、 行內(nèi)移動

你只需要小手一按,就能:

  • 0 : 到第0列去
  • ^ : 到第1個字符去
  • $ : 到-1列去
  • g_ : 到第-1個字符去
  • f<char> : 到光標(biāo)后尋找某字符
  • , / ; : 到該字符出現(xiàn)的上一處/下一處去
  • Nf<char> : 到光標(biāo)后某字符出現(xiàn)的第N處去
  • t<char> : 到光標(biāo)后某字符前面的那個字符去
  • FT :和 ft 差不多,不過都是向找光標(biāo)前找

假設(shè)在普通模式下,屏幕上有文本 x = fib(6 + 7); #this is a comment. ,光標(biāo)在 b 處,那么:

命令 光標(biāo)會到的位置
0 x 前的那個
^ x
$ . 再之后的那個
g_ .
fi this 的那個 i
2fi is 的那個 i
ti h
Fi fib 的那個 i
Ti b

結(jié)合這節(jié)和之前的東西,你會發(fā)現(xiàn) dt<char> 能把從光標(biāo)處到某字符之前的東西都剪切走。

tbc……


  1. emacs 笑哭 ?

  2. 這基本是對 Windows 用戶說的,類 Unix 系統(tǒng)一般自帶 vi/vim ?

  3. 乍看起來,很多狗活得比人舒服。不過這里就當(dāng)是借用了《大話西游》的那句“他好像一條狗”的意思吧 ?

  4. 這可能會花上幾天時間,而你的收獲只是,學(xué)會了不用鼠標(biāo)操作“記事本”。但不要著急,看看下一個階段,然后你就會知道為什么 vim 值得你這樣做 ?

  5. 不過只涉及老 vi 編輯器已有的一些命令 ?

  6. 那些大量的重復(fù)工作,就應(yīng)該讓機(jī)器做 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • [TOC] ##Assoc 顯示或修改文件擴(kuò)展名關(guān)聯(lián) Assoc [.Ext[=[Filetype]]] .Ex...
    btijjj閱讀 382評論 0 1
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,270評論 0 4
  • 命令歷史 以:和/開頭的命令都有歷史紀(jì)錄,可以首先鍵入:或/然后按上下箭頭來選擇某個歷史命令。 啟動vim 在命令...
    im螞蟻閱讀 30,835評論 3 48
  • vim 選擇文本,刪除,復(fù)制,粘貼 文本的選擇,對于編輯器來說,是很基本的東西,也經(jīng)常被用到,總結(jié)如下: v 從...
    壹首簡單的歌閱讀 892評論 0 7
  • 飯后,爺爺給外公遞上一支煙,兩個人坐在桌角處閑話起來。我癡癡地坐在另一邊,聽他們講人世浮沉,從小時候躲避土匪...
    PhilXiang閱讀 239評論 0 1