<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0

    如果你的很多時間是用來敲純文本,寫程序或HTML,那么有效地使用一個好的編輯器能節省你不少時間。這篇文章里的指導和提示將有助于你更快工作,更少犯錯誤。

    文中采用開源文本編輯器Vim(Vi IMproved)說明有效編輯的思想,但這些思想也適用于其他編輯器。擇合適的編輯器只是有效編輯的第一步,對于哪個編輯器更好的討論將占很大地方,這里就不提了。如果你不知道該用哪個編輯器,或者對現在所使用的不太滿意,不妨試試Vim;你是不會失望的。

    第一部分:編輯一個文件

    快速定位

    編輯中大部分時間是花費在閱讀、查錯和尋找應該進行編輯的地方上,而不是插入新文字或進行修改。在文件中不斷定位(navigate)是經常要做的,所以最好學會如何快速地進行。

    你常會搜尋文檔中的一些文字。或者找出包含特定詞或詞組的行。你當然可以使用搜尋命令 /pattern,不過還有更聰明的方法:

    * 如果你看到一個特定詞,想看看其他地方是不是出現過同樣的詞,可以使用* 命令。它將對光標所指的詞進行搜尋。
    * 如果設置了 ' incsearch' 選項,Vim將在你正在輸入搜尋模式的時候就顯示搜尋的結果(而不是等到你敲了回車之后)。這能夠使你更快地找出拼寫錯誤。
    * 如果設置了 ' hlsearch' 選項,Vim將使用黃色背景對搜尋結果進行高亮顯示。你可以對搜尋的結果一目了然。應用在程序代碼中可以顯示變量的所有引用。你甚至不需要移動鼠標就能看到所有的搜尋結果。

    對于結構化的文檔,快速定位的辦法就更多了。Vim提供專門針對C程序(以及C++、Java等等)的特殊命令:

    * 使用 %可以從開始括號跳到對應的關閉括號。或者從 ``#if'' 跳到對應的 ``#endif''。事實上, % 可以完成許多對應項之間的跳轉。可以用來檢查if()和{}結構是否平衡。
    * 使用 [{可以在代碼段(block)中跳回到段起始的 ``{``。
    * 使用 gb 可以從引用某個變量的地方跳轉到它的局部聲明。

    定位的方法當然不止這些。關鍵是你需要知道有這些命令。你也許會說不可能學會所有命令 — Vim里有成百個定位命令,有的很簡單,有的很聰明 — 這需要幾星期的學習。不過,你不必如此;你只需要了解自己的編輯特點,然后掌握相關的定位命令就可以了。

    可以采取三個基本步驟:

    1. 在你進行編輯的時候,注意那些重復進行的操作。
    2. 找出能快速進行這些操作的編輯命令。閱讀文檔,問問朋友,或者看看其他人是如何做的。
    3. 進行練習,知道熟練為止。

    讓我們通過以下這個例子說明一下:

    1. 你發現在寫C程序時,經常要查找函數定義。你目前使用 * 命令對函數名進行搜尋,但得到的往往是函數的引用而不是函數定義。你覺得一定會有更好的辦法。
    2. 讀過一篇快速參考以后,你發現關于定位標記的說明,里面說明了如何定位函數定義,這正是你要找的!
    3. 你試著生成了一個標記文件,使用Vim自帶的ctags程序。你學會了使用CTRL-] 命令,發現這省了不少事。為了更方便,你在 Makefile 里加入了幾行以自動生成標記文件。

    當你使用以上三個步驟時,有幾點需要注意的地方:

    * ``我只想完成任務,不想去讀那些文檔來找新的命令。''。如果你真的是這么想的,那么你將永遠停留在計算的石器時代。有些人編寫什么都用Notepad,卻總不明白為什么其他人總能用他一半的時間成任務。
    * 不要過分。如果你總為一點小事也要去找完美的命令,你就沒法集中精力到你本要完成的任務上了。只要找出那些耗費過多時間的操作,然后使用相關的命令直到熟練就可以了。這以后你就能集中精力到自己的文檔上了。

    下面這些章節給出了大多數人遇到的操作。你仿照它們在實際工作中使用

    三個基本步驟

    不要敲兩次

    我們所使用的字詞集合是有限的。既使是詞組和句子也不過是有限的幾個。對于程序來說更是如此。很明顯,你不想把同樣的東西敲上兩遍。

    你經常會想把一個詞替換成另一個。如果是全文件替換,你可以使用:s (substitute)命令。如果只是幾個位置需要被替換,一個快速辦法是使用 * 命令找出下一個詞,使用 cw 來進行替換。然后敲n 找到下個詞,再用 . 重復 cw 命令。

    . 命令重復上一個改變。這里的改變是插入、刪除或替換操作。能夠重復進行操作是個極為強大的機制。如果好好使用它,那么你大部分的編輯工作可能只不過是敲幾下 . 的事。小心不要在兩次重復之間做其他修改,因為這將改變你要重復的操作。如果確實需要如此,可以使用 m 命令記住要修改的位置,等重復操作進行完畢之后再回過頭來修改它。

    有些函數名和變量名可能很難敲。你能準確無誤地輸入``XpmCreatePixmapFromData''么?Vim的自動補齊機制能給你省不少事。它查看你正在編輯的文件以及#include文件,你可以只敲入``XpmCr'',然后使用CTRL-N 命令讓Vim把它補齊為``XpmCreatePixmapFromData''。這不但節省了輸入時間,而且減少了輸入的錯誤。

    如果你有同樣的詞組或句子需要輸入多次,還有個更簡單的辦法。Vim可以進行錄制宏。使用 qa 命令開始在'a'寄存器里錄制宏。然后正常地輸入編輯命令,最后用 q 退出錄制狀態。如果你想重復所錄制的命令,只需執行 @a 命令。Vim總共提供26個這樣的宏寄存器。

    使用宏錄制功能可以記錄各種操作,不只限于插入操作。如果你想重復一些東西,不妨一試。

    需要注意的是記錄的命令會被原封不動地重復執行。在進行定位時簡單的重復宏操作可能不是你想要的結果。比如對于一個詞這里可能需要左移4個字符,在下個地方可能就要左移5個字符。所以必須定位到合適的位置再重復進行宏操作。

    如果你要重復的命令很復雜,把它們一次敲進去會很困難。這時你可以寫一個腳本或宏。這常被用于建立代碼模板;比如,一個函數頭。你想做得多聰明就可以做得多聰明。

    知錯就改

    編輯時經常會出錯。無人能免。關鍵是快速發現并進行改正。編輯器應該提供這方面的支持,不過你必須告訴它什么是對什么是錯。

    你可能常常會重復同樣的錯誤,你的手指所做的并非是你要它做的。可以使用縮寫(abbreviation)進行修正。下面是一些例子:


    * :abbr Lunix Linux
    * :abbr accross across
    * :abbr hte the


    這些詞會在編輯時被自動改正。

    同樣的機制也可以用于對很長的詞語進行縮寫。特別適用于輸入那些你覺得很難敲的詞,它可以避免出錯。比如:

    * :abbr pn pinguin
    * :abbr MS Mandrake Software

    但有時候你想要的正是那些縮寫,比如想插入``MS''。所以縮寫中最好使用那些不會出現在文中的詞。

    Vim提供了一個很聰明的高亮機制,一般用于程序的語法高亮,不過也可以用來查錯。

    語法高亮會使用顏色顯示注釋。這聽上去不是什么特別重要的功能,不過一旦用起來就會發現這其實很有用。你能夠快速地發現那些沒有高亮卻本應作為注釋的文字(可能是因為忘了敲注釋符)。也可以發現一些被錯誤當成注釋的代碼(可能是因為忘了敲``*/'')。這些錯誤在黑白方式下是很難被發現的,浪費了不少調試時間。

    語法高亮也可以用來查找不匹配的括號。一個未被匹配的``)''會被亮紅色背景加以標識。你可以使用 % 命令他們是被如何匹配的,然后把``(''或``)''插入到合適的位置。

    另一類常犯的錯誤也很容易發現,比如把 ``#include <stdio.h>''敲成了``#included <stdio.h>''。在黑白方式下這是很難發現的,但在語法高亮下則能很快發現``include''能被高亮而``included''沒有。

    再看一個更復雜的例子:對于英文文本你可以定義一個所要使用的詞的長列表。所有未在表中出現的詞都可能是錯誤,并進行高亮顯示。可以定義幾個用于編輯詞表的宏。這正是字處理器的拼寫檢查功能。Vim中是靠一些腳本來實現的,你也可以對它進行定制:比如,只對注釋中的文字進行拼寫檢查。

    第二部分:編輯多個文件

    文件總是成幫結伙

    人們很少只編輯一個文件。一般需要順序或同時編輯一些相關的文件。你應該利用編輯器使多文件編輯工作更為高效地。

    上面提到的標識(tag)機制也支持跨文件搜尋。一般做法是為項目的所有文件生成標識文件,然后在項目的所有文件中搜尋函數、結構、類型(typedef)等的定義。這比手工搜尋要快捷的多;我瀏覽一個程序要做的第一件事便是建立標識文件。

    另一個強大的功能是使用 :grep 命令對一組文件進行模式搜尋。Vim把搜尋結果做成一個列表,然后跳到第一個結果。使用 :cn 命令跳到下一個結果。如果你想改變一個函數調用的、參數個數,那么這個功能會很有用。

    頭文件里有很多有用的信息。然而要知道一個聲明出現在哪個頭文件中卻需要花不少時間。Vim能夠理解頭文件,能夠從中找到你需要的東西。把光標移動到函數名下,然后敲 [I:Vim就會顯示出一個頭文件中該函數名的所有匹配。
    如果你想得到更詳細的結果,可以直接跳到聲明中。一個類似的命令可以用于檢查你所使用的頭文件是否正確。

    你可以把Vim的編輯區域進行分隔,用來編輯不同的文件。你可以對兩個或多個文件進行比較,或者進行拷貝/粘貼。有許多命令用于打開關閉窗口,文件間跳轉,暫時隱藏文件等等。可以再使用上面提到的三個基本步驟選擇合適的命令進行學習。

    多窗口還有更多的用法。預覽標識(preview-tag)就是個很好的例子。它打開一個特殊的預覽窗口,光標還保留在你正在編輯的文件中。預覽窗口中可以是光標所指函數的聲明。如果你移動光標到另一個名字下,停留一兩秒,預覽窗口中就會顯示那個名字的定義。名字還可以是頭文件中聲明的結構或函數。

    讓我們一起來工作

    編輯器可以編輯文件。e-mail程序可以收發消息。操作系統可以運行程序。每個程序都有它自己的任務,而且應該做好。如果能讓程序一同工作,那么就會實現很強大的功能。

    舉個簡單的例子:選擇一個列表中的結構化的文字,并對它進行排序:!sort。這將使用外部命令``sort''來過濾文件。容易吧?排序功能是可以添加到編譯器中的。不過看一下``man sort''就知道它有很多選項。它可能用了一個極為精巧的排序算法。你還打算把它加到編輯器中么?更何況還有其他不少過濾程序。編輯器可能會變得很大。

    Unix精神的一個體現就是提供獨立的程序,各自做好自己的任務,然后組合起來完成更大的任務。不幸的是,許多編輯器不能很好地和其他程序一起工作,比如,你不能包Netscape的郵件編輯器換成其他編輯器。這樣你只能使用那個不順手的程序。另一個趨勢是在編輯器里提供所有的功能,Emacs就是個代表(有人說Emacs其實是個操作系統,只是可以用來編輯文件)。

    Vim盡力和其他程序集成,但這需要經過斗爭。目前Vim已經可以作為MS-Developer Studio和Sniff的編輯器。一些e-mail程序(比如Mutt)也支持外部編輯器。和Sun Workshop的集成工作正在進行中。總的來說這個領域還有待提高。將來我們會有一個大于其各部分總和的系統。

    文本結構化

    你可能經常會遇到有一些結構的文本,這些結構可能同于那些現有命令所支持的結構。這樣你不得不利用那些底層的``磚頭''創建你自己的宏和腳本。這里說明的就是這類更復雜的東西。

    有個簡單的辦法可以加速編輯-編譯-修改這個循環。Vim提供 :make 命令,用于進行編譯,并且獲取錯誤輸出,把你帶到發生錯誤的地方進行修正。如果你使用了另一個編譯器,那么錯誤就無法被Vim獲得。如果不想自己動手,可以修改' errorformat'選項。告訴Vim錯誤是什么樣子,以及如何從中獲得文件名和行號。它支持復雜的gcc錯誤信息,所以應該也能支持其他編譯器。

    有時處理一個新的文件類型只需要設置幾個選項或寫一些宏。比如,為了在man手冊中進行跳轉,你可以寫一個宏獲取光標下的詞,清除緩沖區,然后讀入新的man手冊。這是簡單而高效的參照(cross-reference)方法。

    使用三個基本步驟,你可以更有效地處理各種結構化文件。只需要想想你想對文件采取的操作,然后找到相應的命令去用就是了。就這么簡單,你只要去做就成了。

    第三部分:磨刀

    養成習慣

    要學會開車必須下功夫。這是不是你只騎自行車的原因么?當然不是,你會發現你必須花時間來獲得所需的技術。文本編輯也不例外。你需要學習新的命令,并使用它直至成為習慣。

    另一方面,你不應該試圖學習編輯器提供的每個命令。這是徹底的浪費時間。大多數人只需要學習10%到20%的命令就足夠工作了。但是每個人所需要的命令都各不相同。你需要不斷學習,找出那些可以自動完成的重復操作。如果你只做一次操作,而且以后也不會再去做,那么就不需要進行優化。是如果你發現你在過去的一小時中重復了好幾遍同樣的操作,那么就有必要查看一下手冊,看看能否更快速地完成。或者寫一個宏來做。如果是是個不小的任務,比如對一類文本進行對齊,你需要閱讀一下新聞組或看看Internet上是不是有人已經解決了同樣的問題。

    最根本的步驟是最后的那一個。你可能能夠找到一個重復性的任務,找到一個不錯的作法,可過了一個周末就徹底忘了自己是怎么做的了。這不成。你必須重復你的作法直到爛熟于胸。只有這時你才真正獲得了你需要的高效。一次不要學得太多。一次只試一些工作得很好的方法。對于那些不常用的技巧,你可能只需要把它記下來,留待以后查閱。總之,如果抱著這樣的目標,你的編輯技能就會更加有效。

    最后需要指出的是,如果人們忽略了以上幾點會發生什么:我仍然可以看到有人盯著屏幕看上半天,用兩個指頭敲幾下,然后繼續抬頭看著屏幕,還抱怨自己太累.. 把十個指頭都用上!這不光更快,還不累。每天抽出一個小時練習一下指法,只要幾星期就足夠了。

    后記

    書名得益于Stephen R. Covey所著的那本暢銷書《高效人的七種習慣》(``The 7 habits of highly effective people'')。

    關于作者

    Bram Moolenaar是Vim的主要作者。他編寫了Vim核心功能,并采納了許多開發者提供的代碼。他的e-mail地址是:Bram@Moolenaar.net

    posted on 2007-11-06 11:14 jadmin 閱讀(56) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久亚洲国产精品123区| 国产三级免费电影| 亚洲一区二区女搞男| 免费观看又污又黄在线观看| 日韩精品无码人妻免费视频| 中文字幕无码精品亚洲资源网久久| 2020因为爱你带字幕免费观看全集| 亚洲AV无码AV男人的天堂| 无码国产精品一区二区免费vr | 亚洲精品无码乱码成人| 久青草国产免费观看| 久久久久亚洲爆乳少妇无| 久久久久久久久久久免费精品| 久久久久久A亚洲欧洲AV冫| 国色精品va在线观看免费视频| 亚洲色成人WWW永久网站| 久久久久久AV无码免费网站下载 | 学生妹亚洲一区二区| 在线观看免费宅男视频| 国产午夜亚洲精品不卡免下载| 免费在线观看黄网| 久久精品成人免费观看97| 亚洲国产成人一区二区三区| 日本一卡精品视频免费| 久久亚洲最大成人网4438| 国产免费黄色大片| 三级网站免费观看| 亚洲视频一区在线播放| 成人免费网站在线观看| 免费无码婬片aaa直播表情| 国产国拍亚洲精品mv在线观看| 亚洲三级在线免费观看| 99热在线免费播放| 亚洲色欲色欲www在线播放| 亚洲人成色77777在线观看大| 精品国产免费一区二区三区香蕉| 亚洲国产精品成人久久久| 国产一区二区三区在线免费| 国产成人无码区免费网站| 亚洲看片无码在线视频| 亚洲无线码一区二区三区|