七個高效的文本編輯習慣(以Vim爲例)


        如果你花很多時間輸入純文本、寫程序或HTML,那麼通過高效地使用一個好的編輯器,你可以節省大部分時間。本文將提供指導和提示,讓你更迅速地做這些工作,並且少犯錯誤。

        本文用開源文本編輯器Vim(Vi IMproved)來演示如何高效編輯,本文方法同樣適用於其他的編輯器。


第1部分:編輯一個文件

1.快速移動


        大部分時間都花在閱讀、檢查錯誤和尋找正確的位置去工作,而不是插入新的文本或修改它。在文本內導航非常頻繁,因此你應該學會如何迅速做到這一點。很多時候,當你希望搜索一些已存在的文本,或在所有行裏尋找某個用到的單詞或短語時,你可以簡單地使用搜索命令、模式去找到它。但是也有更智能的方法:

  • 如果你看到一個特定的單詞,並想搜索它出現的其他地方,就使用命令*。它會從光標下面定位找到這個單詞,並且搜索下一個。
  • 如果設置了“incsearch”選項,當你還在輸入時,Vim將會顯示第一個匹配模式的文本。這能迅速顯示一個模式錯誤。
  • 如果設置了“hlsearch”選項,Vim將用黃色背景高亮顯示所有匹配的模式,讓你對搜索命令的結果有個快速概覽。它可以顯示一個變量在程序代碼哪個位置被使用。你甚至不需要移動光標去看匹配的文本。
        在結構化的文本中還有更多可能性快速移動。Vim有針對C(以及類似語言,如C++和Java)程序的特定命令:
  • 使用%從一個左括號跳轉到與其配對的右括號,或從一個“#if”到配對的“#endif”。實際上%可以跳轉到許多不同的匹配項目。它對檢查if()和{}的結構完整性非常有用。
  • 使用[{跳回當前代碼塊起始的“{”。
  • 使用GD從變量的調用跳轉到它的局部聲明。

        當然還有更多的,重點是你需要知道這些命令。你也許認爲不可能瞭解所有這些命令——有幾百種不同的移動命令,有些簡單,有些非常靈活——需要花費幾個星期的訓練去學會它們。然而,你不需要這樣做。相反,你需要知道自己具體的編輯方式,並且只學習那些能讓你的編輯更高效的命令。

三個基本步驟:
  • 當你正在編輯時,留意那些重複的和(或者)花費相當多時間的動作。
  • 尋找一個能更快完成這個動作的編輯器命令。你可以閱讀文檔,詢問朋友,或者看看別人是怎麼做的。
  • 練習使用這個命令,直到無需思考你的手指就能輸入。

讓我們用例子來說明這是如何工作的:
  • 你會發現,當編輯C程序文件時,你經常花時間尋找一個函數被定義的地方。目前你使用 * 命令去搜尋該函數名字出現的其他位置,但是最終會遍歷許多函數被使用的匹配,而不是被定義的。你會想到必須得有一個更快的方法。
  • 查閱快速參考,你會找到關於跳轉到標籤的註釋。文檔說明如何使用它去跳轉到一個你在查找的函數定義。
  • 你試驗一下使用包含Vim的ctags程序去生成一個標籤文件。學會使用  命令後,你會發現節省了大量的時間。更容易的辦法是在你的Makefile裏添加幾行,從而自動生成標籤文件。

使用這三個步驟時需要注意的一些事:
  • “我想把工作做好,我沒有時間去翻閱文檔尋找一些新命令。”如果你這樣想,你將會停留在計算石器時代。有些人什麼事都使用Notepad,然後驚訝於其他人使用一半的時間完成了工作。
  • 過猶不及。如果你總是試圖找到完美的命令去做每件小事情,你將沒有時間去思考實際上要去做的工作。只要挑選出那些超出必要時間的動作,練習相關命令直到你在使用它們時不需要去想。然後你就可以集中精力在文本上了。

        以下章節會建議一些大多數人需要去處理的動作。你可以從中受到啓發,在你的工作中使用這三個基本步驟。

2.不要輸入兩次


        我們輸入的是一組有限的單詞,甚至是有限的短語和句子,特別是在計算機程序中。顯然,你不想把同樣的東西輸入兩次。

       很多時候,你想修改一個單詞。如果是在整個文件中,你可以使用:s(substitute)命令。如果只是幾個地方需要修改,一種快速的方法是使用 * 命令去找到下一個出現的單詞,使用cw命令修改它。然後輸入n去找到下一個單詞,輸入英文逗點 . 去重複cw命令。

        . 命令重複上次的修改。修改在這裏就是插入、刪除或者替換文本。能夠重複是一個非常強大的機制。如果你基於它來安排你的編輯,許多修改將變得只是敲.鍵。留意其間的其他修改,因爲它會替代你原來要重複的修改。相反,你可以用m命令先標記這個位置,繼續重複你的修改,稍後再返回到這個位置。

       一些函數和變量名可以被笨拙的輸入。你能快速輸入“XpmCreatePixmapFromData”,不帶一個錯字,並且不用查詢它麼?Vim有一個完整的機制使它更容易。它在你正在編輯的文件裏查詢單詞,這也包括#include文件。你可以輸入“XpmCr”,然後按下CTRL-N,Vim會把它擴展爲“XpmCreatePixmapFromData”。這不僅節省了輸入時間,更能避免錯字,並且避免稍後編譯器報錯時去修復它。

        當你多次輸入一個短語或句子時,這有一個更快捷的辦法。Vim有一個錄製宏的機制。你輸入qa啓動錄製到寄存器“a”。然後像往常一樣,你輸入命令,最後再次按下q以終止錄製。當你需要重複所錄製的命令時,輸入@a。一共有26個寄存器可用。

        錄製功能可以重複許多不同的動作,不只是插入文本。當你要重複一些東西時,記住這一點。

       有一點需要注意,錄製的命令將會完全按照你輸入的回放。你必須知道移動的文本可能跟所重複的命令不同。左移四個字符也許適合你正在錄製的文本,但是在你重複命令的地方可能需要五個字符。這往往需要使用命令移到文本對象(詞,句子)或者移到一個特定的字符。

        當你需要重複的命令越複雜,一次正確輸入它們就越困難。不要去錄製它們,相反,你應該寫一個腳本或宏。這對製作你的部分代碼的模板非常有用。例如,一個函數頭。你可以把它做得如你所願的靈活。

3. 錯誤要修正

        輸入時候出錯很正常,沒有人能夠避免。關鍵是要迅速發現並糾正它們。編輯器應該能幫助你,但你得告訴它什麼是錯誤的、什麼是正確的。

        往往你會一遍又一遍地犯同樣的錯誤。你的手指輸入的並不是你打算要做的。這可以被縮寫糾正。舉幾個例子:
  1. :abbr Lunix Linux
  2. :abbr accross across
  3. :abbr hte the
複製代碼

在你輸入這些單詞後,它們會被自動糾正。

         使用相同的機制,你可以只輸入幾個字符來得到一個長單詞。這對於那些很難輸入的單詞很有用,避免了輸入錯誤。示例:
  1. :abbr pn penguin
  2. :abbr MS Mandrake Software
複製代碼
        然而,當你不想擴展到完整的單詞時,會覺得很困難在文本里插入“MS”。最好去使用沒有字面意思的短的單詞。

        Vim有一個靈活的高亮顯示機制在你的文本里發現錯誤。這實際上被用作程序的語法高亮顯示,但他也可以捕獲並高亮顯示錯誤。

       語法高亮用色彩顯示註釋。這聽起來並不像一個重要的功能,然而一旦開始用它,你會發現它有很大幫助。你能夠迅速發現本應該是註釋卻沒有被高亮顯示的文本(可能使你忘記了註釋標記)。或者看到以行代碼被高亮顯示成註釋(你忘記去插入一個“*/”)。這些錯誤很難在B&W文件裏發現,並有可能浪費大量時間去調試代碼。

       語法高亮還可以捕獲不匹配的括號。不匹配的“)”會以鮮紅的高亮背景顯示。你可以使用%命令去查看它們如何匹配,並在合適的位置插入一個“(”或“)”。

        其他常見的錯誤也能被迅速發現,例如使用“#included <stdio.h>”而不是“#include <stdio.h>”,這在B&W文件裏會被輕易錯過的錯誤。但是你會很快發現“include”是高亮顯示的,而“included”不會。

        一個更復雜的例子:使用一個針對英語文本的、包含所有單詞的長列表。不在此列內的任何單詞可能是一個錯字。你可以使用語法文件高亮顯示所有沒有包含在這個列表內的單詞。你可以使用一些額外的宏來添加單詞到詞庫,從而讓它們不再被標記爲錯誤。這就像你所期待的字處理器一樣。它在Vim裏用腳本實現,你可以進一步根據需要調整。例如,只去檢查程序裏註釋的拼寫錯誤。


第2部分:編輯多個文件


4.只有一個文件的情況很少

        人們不只是工作在一個文件上,大多數情況會有許多相關文件,你一個接一個編輯它們,或者幾個同時編輯。你應該能充分利用你的編輯器,使編輯幾個文件更高效率。

       之前提到的標籤機制也適用於文件之間移動。通常的做法是爲整個正在工作的項目生成一個標籤文件。然後,你可以在項目裏所有文件間尋找函數、機構、類型等的定義。相比較手動搜索,這節省的時間非常可觀。創造一個標籤文件是我瀏覽程序時要做的第一件事。

        另一個強大的機制是在一組文件裏使用:grep命令找到一個名字出現的所有位置。Vim建立一個所有匹配的列表,並跳轉到第一個匹配。:cn命令帶你依次到下一個匹配。如果你需要改變一個函數調用的參數數目,這會非常有用。

        Include文件包含有用的信息,但是找到一個包含你需要看到的聲明很花時間。Vim知道include文件並可以在它們中搜索你要找的單詞。最常見的動作是查找一個函數的原型。把光標放在你的文件裏的函數名上,輸入[I:,Vim將顯示一個包含所有在include文件裏匹配該函數名的列表。如果需要看到更多上下文,你可以直接跳轉到聲明。一個類似的命令可用來檢查你是否包含了正確的頭文件。

        Vim中,你可以把文本區分成幾個區域編輯不同的文件。然後,你可以在兩個或多個文件中比較內容,複製(粘貼)文本。有很多命令打開和關閉窗口,在它們之間跳轉,臨時隱藏文件等等。同樣,你需要應用三個基本步驟來選擇你打算學會使用的命令集。

        多窗口有更多用途。預覽標籤機制是一個很好的例子,它會打開一個特殊的預覽窗口,同時保持光標在你正在工作的文件中。在預覽窗口中會顯示文本,例如光標下的函數名所對應的函數聲明。如果移動光標到另一個名字並停留一秒鐘,預覽窗口將會顯示那個名字的定義。這也可以是一個在項目include文件裏聲明的結構或者函數的名字。


5.讓我們共同努力

       編輯器用於編輯文本,電子郵件程序發送和接收消息,操作系統運行程序。每個程序有它自己的任務,並擅長於它。這種力量源自程序協同工作。

        一個簡單的例子:你需要些一個不超過500字的總結。選擇當前段落寫入“wc”程序:vip:w!wc –w。外部命令“wc -w”用作計算單詞數目。很簡單,不是嗎?

        總會有一些你需要的功能沒有包含在編輯器裏。你可以從外部添加功能,使編輯器能使用另一個程序過濾文本。一直以來,Unix的精髓就是用不同的程序做好它們自己的工作,並協作執行一個更大的任務。不幸的是,大部分編輯器不能很好地同其它程序一起工作——例如,你不能用另一個編輯器去替換Netscape裏的電子郵件編輯器。你會終止使用殘缺的編輯器。另一個趨勢是在編輯器裏包含所有功能,Emacs是一個很好的例子來終止(有人稱之爲一個可被用來編輯文本的操作系統。)

        Vim試圖與其它程序集成,但這仍然是一個挑戰。目前,它可被用作MS-Developer Studio和Sniff的編輯器。一些像Mutt的電子郵件程序支持外部編輯器,可以使用Vim。與Sun工作站的集成在進行中。總之,在不久的將來這是一個必須加強的領域。只有這樣我們才能得到一個優於各部分簡單相加的系統。


6.文本結構


       你會經常遇到具有某種結構的文本,但是和現有命令所支持的不同。然後,你將不得不退回到編輯器的“積木”,創造你自己的宏和插件來處理這個文本。我們在這裏接觸更復雜的東西。


        更簡單的事情之一是加快編輯-編譯-修復週期。Vim有:make命令,開始編譯,捕捉它產生的錯誤,並讓你跳轉到錯誤位置來修復問題。如果你使用不同的編輯器,錯誤信息將無法識別。你應該調整“錯誤格式”選項,而不是重回到老的“把它寫下”系統。這告訴Vim你的錯誤是什麼樣子,以及如何獲取文件名和行號。它適用於複雜的gcc錯誤消息,因此你應該能使其與幾乎任何編輯器工作。


        有時調整到一種文件只是設置一些選項或寫一些宏。例如,爲了在手冊頁面跳轉,你可以寫一個宏去獲取光標下的單詞,清理緩衝區,然後從手冊頁面把那個單詞讀到緩衝區。這是一個簡單高效的方式來查詢交叉引用。


         使用者2三個基本步驟,你可以更高效地處理任何結構形式的文件。試想下你想要對文件做的動作,找到可以做它的命令,並開始使用它們。正如你聽到的,這真的很簡單。你只需要去做它。


第3部分:磨刀不誤砍柴工

7.形成習慣


       學開車需要努力。那是你保持騎自行車的理由麼?不,你認識到需要投入時間去學習一門技能。文本編輯不一樣。你需要學習新命令,並把它們變成一種習慣。


        另一方面,你不應該試圖學習編輯器提供的所有命令。那將是徹底的浪費時間。大部分人只需爲他們的工作學習10%到20%的命令。但對每個人來說這套命令是不同的。它需要你不時回過頭來思考是否有一些重複性任務可以被自動化。如果你做的任務,只有一次,並不期望去再做一次,那就不要試圖去優化它。但是你可能意識到你已經花了一個小時重複好幾次做某事,那就在文檔裏搜索一個可以更快做它的命令。或者寫一個宏來做到這一點。當它是一個更大的任務,例如選出一種特別的文本,你可以瀏覽下新聞組或互聯網,看看是不是有人已經爲你解決了這個問題。


        必不可少的基本步驟是最後一條。你能想到一個重複性的任務,找到一個好的解決方案,過了週末忘記你是怎麼做的。這不起作用。你必須重複它知道你的手指可以自動去這樣做。只有這樣你才能達到你需要的效率。一次不要學太多,同時做一些就好。把你不經常使用的技巧記錄在表格裏,以備日後查用。無論如何,如果你堅持目標,你會發現讓你編輯越來越高效地辦法。


        最後一句提醒,當人們忽略上述所提會發生什麼:我仍然看到人們在電腦屏幕(VDU)後花了半天時間,擡頭看着屏幕,然後低頭看兩個手指輸入,再擡頭看着屏幕,等等。——然後他們奇怪爲什麼如此累……用十指輸入!這不只是速度更快,也能減少無聊。每天使用一個小時計算機程序,只需要幾個星期就能學會按指法輸入。


結語

       標題的想法來自斯蒂芬-科維所著的成功書籍《高效能人士的七個習慣》。我向需要解決個人和職業問題人們(誰沒有?)推薦這本書。雖然有些人會宣稱它來自斯科特-亞當斯所著的《迪爾伯特——高度有缺陷人士的7年》(同樣推薦)。

布萊姆·米勒寫於 2000年11月


原文鏈接: Bram Moolenaar   翻譯: 伯樂在線伯樂在線讀者

譯文鏈接: http://blog.jobbole.com/44891/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章