日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

進(jìn)行有效編輯的七種習(xí)慣

 byrbzdl 2007-01-17

Bram Moolenaar 
 
如果你的很多時(shí)間是用來(lái)敲純文本,寫(xiě)程序或HTML,那么有效地使用一個(gè)好的編 
輯器能節(jié)省你不少時(shí)間。這篇文章里的指導(dǎo)和提示將有助于你更快工作,更少犯 
錯(cuò)誤。 
 
文中采用開(kāi)源文本編輯器Vim(Vi IMproved)說(shuō)明有效編輯的思想,但這些思想也 
適用于其他編輯器。擇合適的編輯器只是有效編輯的第一步,對(duì)于哪個(gè)編輯器更 
好的討論將占很大地方,這里就不提了。如果你不知道該用哪個(gè)編輯器,或者對(duì) 
現(xiàn)在所使用的不太滿(mǎn)意,不妨試試Vim;你是不會(huì)失望的。 
 
第一部分:編輯一個(gè)文件 
 
快速定位 
 
編輯中大部分時(shí)間是花費(fèi)在閱讀、查錯(cuò)和尋找應(yīng)該進(jìn)行編輯的地方上,而不是插 
入新文字或進(jìn)行修改。在文件中不斷定位(navigate)是經(jīng)常要做的,所以最好學(xué) 
會(huì)如何快速地進(jìn)行。 
 
你常會(huì)搜尋文檔中的一些文字?;蛘哒页霭囟ㄔ~或詞組的行。你當(dāng)然可以使 
用搜尋命令 /pattern,不過(guò)還有更聰明的方法: 
 
 * 如果你看到一個(gè)特定詞,想看看其他地方是不是出現(xiàn)過(guò)同樣的詞,可以使用 
 * 命令。它將對(duì)光標(biāo)所指的詞進(jìn)行搜尋。 
 * 如果設(shè)置了 ‘ incsearch‘ 選項(xiàng),Vim將在你正在輸入搜尋模式的時(shí)候就 
 顯示搜尋的結(jié)果(而不是等到你敲了回車(chē)之后)。這能夠使你更快地找出拼寫(xiě) 
 錯(cuò)誤。 
 * 如果設(shè)置了 ‘ hlsearch‘ 選項(xiàng),Vim將使用黃色背景對(duì)搜尋結(jié)果進(jìn)行高亮 
 顯示。你可以對(duì)搜尋的結(jié)果一目了然。應(yīng)用在程序代碼中可以顯示變量的所有 
 引用。你甚至不需要移動(dòng)鼠標(biāo)就能看到所有的搜尋結(jié)果。 
 
 
 
對(duì)于結(jié)構(gòu)化的文檔,快速定位的辦法就更多了。Vim提供專(zhuān)門(mén)針對(duì)C程序(以及 
C++、Java等等)的特殊命令: 
 
 
 * 使用 %可以從開(kāi)始括號(hào)跳到對(duì)應(yīng)的關(guān)閉括號(hào)?;蛘邚?nbsp;``#if‘‘ 跳到對(duì) 
 應(yīng)的 ``#endif‘‘。事實(shí)上, % 可以完成許多對(duì)應(yīng)項(xiàng)之間的跳轉(zhuǎn)???nbsp;
 以用來(lái)檢查if()和{}結(jié)構(gòu)是否平衡。 
 * 使用 [{可以在代碼段(block)中跳回到段起始的 ``{``。 
 * 使用 gb 可以從引用某個(gè)變量的地方跳轉(zhuǎn)到它的局部聲明。 
 
 
 
定位的方法當(dāng)然不止這些。關(guān)鍵是你需要知道有這些命令。你也許會(huì)說(shuō)不可能學(xué) 
會(huì)所有命令 — Vim里有成百個(gè)定位命令,有的很簡(jiǎn)單,有的很聰明 — 這需要 
幾星期的學(xué)習(xí)。不過(guò),你不必如此;你只需要了解自己的編輯特點(diǎn),然后掌握相 
關(guān)的定位命令就可以了。 
 
可以采取三個(gè)基本步驟: 
 
 
 1. 在你進(jìn)行編輯的時(shí)候,注意那些重復(fù)進(jìn)行的操作。 
 2. 找出能快速進(jìn)行這些操作的編輯命令。閱讀文檔,問(wèn)問(wèn)朋友,或者看看其他 
 人是如何做的。 
 3. 進(jìn)行練習(xí),知道熟練為止。 
 
 
 
讓我們通過(guò)以下這個(gè)例子說(shuō)明一下: 
 
 
 1. 你發(fā)現(xiàn)在寫(xiě)C程序時(shí),經(jīng)常要查找函數(shù)定義。你目前使用 * 命令對(duì)函 
 數(shù)名進(jìn)行搜尋,但得到的往往是函數(shù)的引用而不是函數(shù)定義。你覺(jué)得一定會(huì) 
 有更好的辦法。 
 2. 讀過(guò)一篇快速參考以后,你發(fā)現(xiàn)關(guān)于定位標(biāo)記的說(shuō)明,里面說(shuō)明了如何定位 
 函數(shù)定義,這正是你要找的! 
 3. 你試著生成了一個(gè)標(biāo)記文件,使用Vim自帶的ctags程序。你學(xué)會(huì)了使用 
 CTRL-] 命令,發(fā)現(xiàn)這省了不少事。為了更方便,你在 Makefile 里加 
 入了幾行以自動(dòng)生成標(biāo)記文件。 
 
 
 
當(dāng)你使用以上三個(gè)步驟時(shí),有幾點(diǎn)需要注意的地方: 
 
 
 * ``我只想完成任務(wù),不想去讀那些文檔來(lái)找新的命令。‘‘。如果你真的是這 
 么想的,那么你將永遠(yuǎn)停留在計(jì)算的石器時(shí)代。有些人編寫(xiě)什么都用 
 Notepad,卻總不明白為什么其他人總能用他一半的時(shí)間成任務(wù)。 
 * 不要過(guò)分。如果你總為一點(diǎn)小事也要去找完美的命令,你就沒(méi)法集中精力到 
 你本要完成的任務(wù)上了。只要找出那些耗費(fèi)過(guò)多時(shí)間的操作,然后使用相關(guān) 
 的命令直到熟練就可以了。這以后你就能集中精力到自己的文檔上了。 
 
 
 
下面這些章節(jié)給出了大多數(shù)人遇到的操作。你仿照它們?cè)趯?shí)際工作中使用 
三個(gè)基本步驟。 
 
不要敲兩次 
 
我們所使用的字詞集合是有限的。既使是詞組和句子也不過(guò)是有限的幾個(gè)。對(duì)于 
程序來(lái)說(shuō)更是如此。很明顯,你不想把同樣的東西敲上兩遍。 
 
你經(jīng)常會(huì)想把一個(gè)詞替換成另一個(gè)。如果是全文件替換,你可以使用 
:s (substitute)命令。如果只是幾個(gè)位置需要被替換,一個(gè)快速辦法是使 
用 * 命令找出下一個(gè)詞,使用 cw 來(lái)進(jìn)行替換。然后敲 
n 找到下個(gè)詞,再用 . 重復(fù) cw 命令。 
 
. 命令重復(fù)上一個(gè)改變。這里的改變是插入、刪除或替換操作。能夠重復(fù) 
進(jìn)行操作是個(gè)極為強(qiáng)大的機(jī)制。如果好好使用它,那么你大部分的編輯工作可能 
只不過(guò)是敲幾下 . 的事。小心不要在兩次重復(fù)之間做其他修改,因?yàn)檫@ 
將改變你要重復(fù)的操作。如果確實(shí)需要如此,可以使用 m 命令記住要修 
改的位置,等重復(fù)操作進(jìn)行完畢之后再回過(guò)頭來(lái)修改它。 
 
有些函數(shù)名和變量名可能很難敲。你能準(zhǔn)確無(wú)誤地輸入 
``XpmCreatePixmapFromData‘‘么?Vim的自動(dòng)補(bǔ)齊機(jī)制能給你省不少事。它查看 
你正在編輯的文件以及#include文件,你可以只敲入``XpmCr‘‘,然后使用 
CTRL-N 命令讓Vim把它補(bǔ)齊為``XpmCreatePixmapFromData‘‘。這不但節(jié)省 
了輸入時(shí)間,而且減少了輸入的錯(cuò)誤。 
 
如果你有同樣的詞組或句子需要輸入多次,還有個(gè)更簡(jiǎn)單的辦法。Vim可以進(jìn)行 
錄制宏。使用 qa 命令開(kāi)始在‘a‘寄存器里錄制宏。然后正常地輸入編 
輯命令,最后用 q 退出錄制狀態(tài)。如果你想重復(fù)所錄制的命令,只需 
執(zhí)行 @a 命令。Vim總共提供26個(gè)這樣的宏寄存器。 
 
使用宏錄制功能可以記錄各種操作,不只限于插入操作。如果你想重復(fù)一些東西, 
不妨一試。 
 
需要注意的是記錄的命令會(huì)被原封不動(dòng)地重復(fù)執(zhí)行。在進(jìn)行定位時(shí)簡(jiǎn)單的重復(fù)宏 
操作可能不是你想要的結(jié)果。比如對(duì)于一個(gè)詞這里可能需要左移4個(gè)字符,在下 
個(gè)地方可能就要左移5個(gè)字符。所以必須定位到合適的位置再重復(fù)進(jìn)行宏操作。 
 
如果你要重復(fù)的命令很復(fù)雜,把它們一次敲進(jìn)去會(huì)很困難。這時(shí)你可以寫(xiě)一個(gè)腳 
本或宏。這常被用于建立代碼模板;比如,一個(gè)函數(shù)頭。你想做得多聰明就可以 
做得多聰明。 
 
知錯(cuò)就改 
 
編輯時(shí)經(jīng)常會(huì)出錯(cuò)。無(wú)人能免。關(guān)鍵是快速發(fā)現(xiàn)并進(jìn)行改正。編輯器應(yīng)該提供這 
方面的支持,不過(guò)你必須告訴它什么是對(duì)什么是錯(cuò)。 
 
你可能常常會(huì)重復(fù)同樣的錯(cuò)誤,你的手指所做的并非是你要它做的??梢允褂每s 
寫(xiě)(abbreviation)進(jìn)行修正。下面是一些例子: 
 
 
 * :abbr Lunix Linux 
 * :abbr accross across 
 * :abbr hte the 
 
 
這些詞會(huì)在編輯時(shí)被自動(dòng)改正。 
 
同樣的機(jī)制也可以用于對(duì)很長(zhǎng)的詞語(yǔ)進(jìn)行縮寫(xiě)。特別適用于輸入那些你覺(jué)得很難 
敲的詞,它可以避免出錯(cuò)。比如: 
 
 
 * :abbr pn pinguin 
 * :abbr MS Mandrake Software 
 
 
但有時(shí)候你想要的正是那些縮寫(xiě),比如想插入``MS‘‘。所以縮寫(xiě)中最好使用那些 
不會(huì)出現(xiàn)在文中的詞。 
 
Vim提供了一個(gè)很聰明的高亮機(jī)制,一般用于程序的語(yǔ)法高亮,不過(guò)也可以用來(lái) 
查錯(cuò)。 
 
語(yǔ)法高亮?xí)褂妙伾@示注釋。這聽(tīng)上去不是什么特別重要的功能,不過(guò)一旦用 
起來(lái)就會(huì)發(fā)現(xiàn)這其實(shí)很有用。你能夠快速地發(fā)現(xiàn)那些沒(méi)有高亮卻本應(yīng)作為注釋的 
文字(可能是因?yàn)橥饲米⑨尫?。也可以發(fā)現(xiàn)一些被錯(cuò)誤當(dāng)成注釋的代碼(可 
能是因?yàn)橥饲胉`*/‘‘)。這些錯(cuò)誤在黑白方式下是很難被發(fā)現(xiàn)的,浪費(fèi)了不少 
調(diào)試時(shí)間。 
 
語(yǔ)法高亮也可以用來(lái)查找不匹配的括號(hào)。一個(gè)未被匹配的``)‘‘會(huì)被亮紅色背景 
加以標(biāo)識(shí)。你可以使用 % 命令他們是被如何匹配的,然后把``(‘‘或 
``)‘‘插入到合適的位置。 
 
另一類(lèi)常犯的錯(cuò)誤也很容易發(fā)現(xiàn),比如把 ``#include <stdio.h>‘‘敲成了 
``#included <stdio.h>‘‘。在黑白方式下這是很難發(fā)現(xiàn)的,但在語(yǔ)法高亮下 
則能很快發(fā)現(xiàn)``include‘‘能被高亮而``included‘‘沒(méi)有。 
 
再看一個(gè)更復(fù)雜的例子:對(duì)于英文文本你可以定義一個(gè)所要使用的詞的長(zhǎng)列表。 
所有未在表中出現(xiàn)的詞都可能是錯(cuò)誤,并進(jìn)行高亮顯示??梢远x幾個(gè)用于編輯 
詞表的宏。這正是字處理器的拼寫(xiě)檢查功能。Vim中是靠一些腳本來(lái)實(shí)現(xiàn)的,你 
也可以對(duì)它進(jìn)行定制:比如,只對(duì)注釋中的文字進(jìn)行拼寫(xiě)檢查。 
 
第二部分:編輯多個(gè)文件 
 
文件總是成幫結(jié)伙 
 
人們很少只編輯一個(gè)文件。一般需要順序或同時(shí)編輯一些相關(guān)的文件。你應(yīng)該利 
用編輯器使多文件編輯工作更為高效地。 
 
上面提到的標(biāo)識(shí)(tag)機(jī)制也支持跨文件搜尋。一般做法是為項(xiàng)目的所有文件生 
成標(biāo)識(shí)文件,然后在項(xiàng)目的所有文件中搜尋函數(shù)、結(jié)構(gòu)、類(lèi)型(typedef)等的定 
義。這比手工搜尋要快捷的多;我瀏覽一個(gè)程序要做的第一件事便是建立標(biāo)識(shí)文 
件。 
 
另一個(gè)強(qiáng)大的功能是使用 :grep 命令對(duì)一組文件進(jìn)行模式搜尋。Vim把 
搜尋結(jié)果做成一個(gè)列表,然后跳到第一個(gè)結(jié)果。使用 :cn 命令跳到下 
一個(gè)結(jié)果。如果你想改變一個(gè)函數(shù)調(diào)用的、參數(shù)個(gè)數(shù),那么這個(gè)功能會(huì)很有用。 
 
頭文件里有很多有用的信息。然而要知道一個(gè)聲明出現(xiàn)在哪個(gè)頭文件中卻需要花 
不少時(shí)間。Vim能夠理解頭文件,能夠從中找到你需要的東西。把光標(biāo)移動(dòng)到函 
數(shù)名下,然后敲 [I:Vim就會(huì)顯示出一個(gè)頭文件中該函數(shù)名的所有匹配。 
如果你想得到更詳細(xì)的結(jié)果,可以直接跳到聲明中。一個(gè)類(lèi)似的命令可以用于檢 
查你所使用的頭文件是否正確。 
 
你可以把Vim的編輯區(qū)域進(jìn)行分隔,用來(lái)編輯不同的文件。你可以對(duì)兩個(gè)或多個(gè) 
文件進(jìn)行比較,或者進(jìn)行拷貝/粘貼。有許多命令用于打開(kāi)關(guān)閉窗口,文件間跳 
轉(zhuǎn),暫時(shí)隱藏文件等等。可以再使用上面提到的三個(gè)基本步驟選擇合適的命令進(jìn) 
行學(xué)習(xí)。 
 
多窗口還有更多的用法。預(yù)覽標(biāo)識(shí)(preview-tag)就是個(gè)很好的例子。它打開(kāi)一 
個(gè)特殊的預(yù)覽窗口,光標(biāo)還保留在你正在編輯的文件中。預(yù)覽窗口中可以是光標(biāo) 
所指函數(shù)的聲明。如果你移動(dòng)光標(biāo)到另一個(gè)名字下,停留一兩秒,預(yù)覽窗口中就 
會(huì)顯示那個(gè)名字的定義。名字還可以是頭文件中聲明的結(jié)構(gòu)或函數(shù)。 
 
讓我們一起來(lái)工作 
 
編輯器可以編輯文件。e-mail程序可以收發(fā)消息。操作系統(tǒng)可以運(yùn)行程序。每個(gè) 
程序都有它自己的任務(wù),而且應(yīng)該做好。如果能讓程序一同工作,那么就會(huì)實(shí)現(xiàn) 
很強(qiáng)大的功能。 
 
舉個(gè)簡(jiǎn)單的例子:選擇一個(gè)列表中的結(jié)構(gòu)化的文字,并對(duì)它進(jìn)行排序: 
!sort。這將使用外部命令``sort‘‘來(lái)過(guò)濾文件。容易吧?排序功能是可以 
添加到編譯器中的。不過(guò)看一下``man sort‘‘就知道它有很多選項(xiàng)。它可能用了 
一個(gè)極為精巧的排序算法。你還打算把它加到編輯器中么?更何況還有其他不少 
過(guò)濾程序。編輯器可能會(huì)變得很大。 
 
Unix精神的一個(gè)體現(xiàn)就是提供獨(dú)立的程序,各自做好自己的任務(wù),然后組合起來(lái) 
完成更大的任務(wù)。不幸的是,許多編輯器不能很好地和其他程序一起工作,比如, 
你不能包Netscape的郵件編輯器換成其他編輯器。這樣你只能使用那個(gè)不順手的 
程序。另一個(gè)趨勢(shì)是在編輯器里提供所有的功能,Emacs就是個(gè)代表(有人說(shuō) 
Emacs其實(shí)是個(gè)操作系統(tǒng),只是可以用來(lái)編輯文件)。 
 
Vim盡力和其他程序集成,但這需要經(jīng)過(guò)斗爭(zhēng)。目前Vim已經(jīng)可以作為 
MS-Developer Studio和Sniff的編輯器。一些e-mail程序(比如Mutt)也支持外 
部編輯器。和Sun Workshop的集成工作正在進(jìn)行中。總的來(lái)說(shuō)這個(gè)領(lǐng)域還有待提 
高。將來(lái)我們會(huì)有一個(gè)大于其各部分總和的系統(tǒng)。 
 
文本結(jié)構(gòu)化 
 
你可能經(jīng)常會(huì)遇到有一些結(jié)構(gòu)的文本,這些結(jié)構(gòu)可能同于那些現(xiàn)有命令所支持的 
結(jié)構(gòu)。這樣你不得不利用那些底層的``磚頭‘‘創(chuàng)建你自己的宏和腳本。這里說(shuō)明 
的就是這類(lèi)更復(fù)雜的東西。 
 
有個(gè)簡(jiǎn)單的辦法可以加速編輯-編譯-修改這個(gè)循環(huán)。Vim提供 :make 命 
令,用于進(jìn)行編譯,并且獲取錯(cuò)誤輸出,把你帶到發(fā)生錯(cuò)誤的地方進(jìn)行修正。如 
果你使用了另一個(gè)編譯器,那么錯(cuò)誤就無(wú)法被Vim獲得。如果不想自己動(dòng)手,可 
以修改‘ errorformat‘選項(xiàng)。告訴Vim錯(cuò)誤是什么樣子,以及如何從中獲 
得文件名和行號(hào)。它支持復(fù)雜的gcc錯(cuò)誤信息,所以應(yīng)該也能支持其他編譯器。 
 
有時(shí)處理一個(gè)新的文件類(lèi)型只需要設(shè)置幾個(gè)選項(xiàng)或?qū)懸恍┖?。比如,為了在man 
手冊(cè)中進(jìn)行跳轉(zhuǎn),你可以寫(xiě)一個(gè)宏獲取光標(biāo)下的詞,清除緩沖區(qū),然后讀入新的 
man手冊(cè)。這是簡(jiǎn)單而高效的參照(cross-reference)方法。 
 
使用三個(gè)基本步驟,你可以更有效地處理各種結(jié)構(gòu)化文件。只需要想想你想對(duì)文 
件采取的操作,然后找到相應(yīng)的命令去用就是了。就這么簡(jiǎn)單,你只要去做就成 
了。 
 
第三部分:磨刀 
 
養(yǎng)成習(xí)慣 
 
要學(xué)會(huì)開(kāi)車(chē)必須下功夫。這是不是你只騎自行車(chē)的原因么?當(dāng)然不是,你會(huì)發(fā)現(xiàn) 
你必須花時(shí)間來(lái)獲得所需的技術(shù)。文本編輯也不例外。你需要學(xué)習(xí)新的命令,并 
使用它直至成為習(xí)慣。 
 
另一方面,你不應(yīng)該試圖學(xué)習(xí)編輯器提供的每個(gè)命令。這是徹底的浪費(fèi)時(shí)間。大 
多數(shù)人只需要學(xué)習(xí)10%到20%的命令就足夠工作了。但是每個(gè)人所需要的命令都 
各不相同。你需要不斷學(xué)習(xí),找出那些可以自動(dòng)完成的重復(fù)操作。如果你只做一 
次操作,而且以后也不會(huì)再去做,那么就不需要進(jìn)行優(yōu)化。是如果你發(fā)現(xiàn)你在過(guò) 
去的一小時(shí)中重復(fù)了好幾遍同樣的操作,那么就有必要查看一下手冊(cè),看看能否 
更快速地完成?;蛘邔?xiě)一個(gè)宏來(lái)做。如果是是個(gè)不小的任務(wù),比如對(duì)一類(lèi)文本進(jìn) 
行對(duì)齊,你需要閱讀一下新聞組或看看Internet上是不是有人已經(jīng)解決了同樣的 
問(wèn)題。 
 
最根本的步驟是最后的那一個(gè)。你可能能夠找到一個(gè)重復(fù)性的任務(wù),找到一個(gè)不 
錯(cuò)的作法,可過(guò)了一個(gè)周末就徹底忘了自己是怎么做的了。這不成。你必須重復(fù) 
你的作法直到爛熟于胸。只有這時(shí)你才真正獲得了你需要的高效。一次不要學(xué)得 
太多。一次只試一些工作得很好的方法。對(duì)于那些不常用的技巧,你可能只需要 
把它記下來(lái),留待以后查閱??傊绻е@樣的目標(biāo),你的編輯技能就會(huì)更 
加有效。 
 
最后需要指出的是,如果人們忽略了以上幾點(diǎn)會(huì)發(fā)生什么:我仍然可以看到有人 
盯著屏幕看上半天,用兩個(gè)指頭敲幾下,然后繼續(xù)抬頭看著屏幕,還抱怨自己太 
累.. 把十個(gè)指頭都用上!這不光更快,還不累。每天抽出一個(gè)小時(shí)練習(xí)一下指 
法,只要幾星期就足夠了。 
 
后記 
 
書(shū)名得益于Stephen R. Covey所著的那本暢銷(xiāo)書(shū)《高效人的七種習(xí)慣》(``The 7 
habits of highly effective people‘‘)。 
 
關(guān)于作者 
 
Bram Moolenaar是Vim的主要作者。他編寫(xiě)了Vim核心功能,并采納了許多開(kāi)發(fā)者 
提供的代碼。他的e-mail地址是:Bram@Moolenaar.net 

--
make it simple, make it reasonable

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多