vim


vim-logo.gif今天又遇到一個問題,像有時候會看到像這樣的字「忽然」這樣的東西。我們雖然心裡面知道這可能代表兩個字,但是卻還是不知道那到底是什麼。以前我的方法就是丟進網頁裡面去,今天護教說「沒救了,就用 vi 吧」,讓我想到,對呀,說不定 vim 可以解這個問題喔!
(more…)

vim-logo.gif當使用 vim 一段時間後,你可能會和我有一樣的想法:最好所有的事情都在 vim 裡面完成。但如果只憑藉前面我們討論過的那些指令或者是設定,還是不夠的。所以今天我們來稍微談一下 vim 的 script,也就是,用 vim 內建的「程式語言」來寫點小程式。
(more…)

vim-logo.gif以前有人問過我,有沒有什麼方法可以在程式的每一行前面補上所在的行數?我的答案是:
(more…)

vim-logo.gif慣於使用所見即所得,或者說喜歡用滑鼠的朋友們,對於 vim 這種好像只能憑藉鍵盤的方式很不習慣。我們可能會說 vim 是不錯,可是不能滑鼠選擇一塊區域,然後按一個鍵,或是一個地方,就可以完成某些事情。比方說有一些軟體可以讓你在編寫網頁的時候,你可以用滑鼠把文字區塊選起來,然後點一個小圖示或是用滑鼠點擊選單就做到把那個區域的前後補上<small>…</small>這樣的標籤。雖然 vim 有這麼多強大的功能,有取代、置換、幫你幹嘛幹嘛的,… 難道,就是這樣了嗎? vim 真的不行了嗎? (more…)

vim-logo.gif前面我們談了很多有關 vim 的指令,不管是取代、置換、刪除或是搬移等等,這些指令都是讓我們在編輯時比較輕鬆的方法。但是 vim 的編輯當中,有的為了看起來比較舒服,像是對於不同的關鍵字或是程式等等,提供了不同顏色的標明,像是我們之前已經看過的樣子: (more…)

vim-logo.gif我們前面談的很多東西像搜尋「/」取代置換「:s」全域命令「:g」這些,功能都可以說是很強大,但如果配合上常規表示法(regular expression)就能發揮更大的效用,就像我們在談 vim 搜尋的時候有約略提到用 [0-9] 表示只出現一次的數字,而數字可以是 0 1 2 3 4 5 6 7 8 9 。這些都可以說是被規範在常規表示法裡面(regular expression)。或許你看到這個英文已經打開 vim 打 :h regular-expression 來看說明了。沒錯,這就是我們這次要談的在 vim 裡面的常規表示法。
(more…)

vim-logo.gif​我們在講到 vim 的取代置換功能 :s 的時候,內文提到了一個 <Ctrl+R>然後按 / 就可以叫出用 / 作搜尋時所打的字串。這種呼叫出之前打過的字的方式,就是本次的主角 register。

按照 vim help 上面的說明,vim 提供的 registers(暫存器)有下列幾種:

  1. The unnamed register “”
  2. 10 numbered registers “0 to “9
  3. The small delete register “-
  4. 26 named registers “a to “z or “A to “Z
  5. four read-only registers “:, “., “% and “#
  6. the expression register “=
  7. The selection and drop registers “*, “+ and “~
  8. The black hole register “_
  9. Last search pattern register “/

雖然看上去有九種之多,但經常會用的並不多。
(more…)

vim-logo.gif​在這個系列的開始沒多久,我們就先談了 vim 有一個選擇模式,可以透過 大小寫的 V 或是 <Ctrl+V>來作選擇,因應這三種方式的不同而有不同的行為。

選擇反白區域可以 vim 使用游標移動的方法

在談命令模式下的刪除行為時,我們提到可以選擇要刪除的區域。如果你使用的是小寫「v」,那配合 vim 的游標移動,你可以作更複雜的選取方式。甚至你可以進入選取模式後使用「 / 」和「n」的組合更快速選到你想到的區域去。

從之前對選擇模式的粗略介紹,你大概依稀還記得這三個的差異,不過你可能會問:我選了這塊區域能做什麼?
(more…)

vim-logo.gif​在看過 vim 的全域指令 search 指令之後,你會不會也會想自己還有什麼需求可以叫 vim 做的呢?

今天我和布丁長輩還有DK長輩聊天的時候就講到一個問題:我可不可以知道到底這份文件有多少個我想要搜尋的字串?

當然啦,你如果會 vim 的全域指令你可能可以用 :g/pattern/p 之後,用 copy 的方式或是其他指令的組合把比對出來的東西存到另外一個檔案去,然後再用其他的工具(像是wc)計算行數。不過,這個方法,不夠方便。

比較辛苦一點的方式也可以用 /pattern 然後自己按 n 一個個算,不過… 我想可能會先算到瘋掉。

難道 vim 就只能這樣了嗎?
(more…)

vim-logo.gif​當你對 vim 瞭解越多的時候,有時候你會覺得自己變得很貪婪,常常會問:如果 vim 連這個都做得到,那它可不可以怎麼怎麼?就像我們之前介紹的置換功能,你可能會覺得 vim 真的可以幫你做到很多事情。但是它能不能做更多事情?
(more…)

vim-logo.gif在前面我們所談的那些可以說是比較基本的東西,但是對於一份文件來說,光有前面所介紹的游標移動、刪除等等功能是不足夠的。面對一份文件我們通常會因為某些緣故而使得我們必須去修改當中固定出現的字串樣式(pattern)成我們想要的樣子。最常遇到的就像中文文件的標點符號問題,或是 un*ix 和 DOS 文件格式之間轉換常會有個 ^M 結尾會讓人覺得很討厭,又或是我們想要把一份 HTML 格式的文件去除掉它的 HTML tag。

對於這些事情來說,拿中文標點符號置換這個很多編輯器都做得到,簡單地說如果想更動的 pattern 是一個固定的字串,那對於一般編輯器來說都不會太困難,但是對於具有固定格式,但字串內容卻不一定的該怎麼辦?就像要去掉 HTML 格式中的所有 HTML tag?這就是 vim 開始大顯身手的地方了。
(more…)

vim-logo.gif 在vim裡面除了我們在講刪除時所講的那些以外,事實上還有很多都是跟游標移動有關的指令。不過今天我們講的內容和 ctags 這個小傢伙比較有關。

簡單地說, ctags 主要是用來幫助程式寫作用的。怎麼說呢?如果你現在正在接手一套大程式,但事實上你需要維護的只是這大程式裡的某一條執行程序,你當然不會想說我要把這整個程式都看懂才要來做維護的工作,等到你看懂可能公司也準備請你走路了。所以這個時候 ctags 就可能幫上你的忙。它會把程式中函數(function)以及變數(variable)的定義區紀錄下來。比方說你現在看到目前在追的執行程序中呼叫了一個 line_extraction_algo(…) ,如果你想知道這個函數在幹什麼你會怎麼做?以前也許你就會用 grep 或是搜尋字串的方式看看這個東西在哪個檔案裡面,說不定還要一個個看到底哪個才是定義的地方。現在在 windows 或是一些整合性環境(IDE)大概都會提供在上面按兩下之後就會跳到函數或是變數的宣告區裡面。但是現有的IDE環境大概都沒有提供像 vim 那樣有很多好用的功能,這些等我們講到取代的時候大家就會逐漸發現 vim 的好。
(more…)

Next Entries »
Pages: 1 2