亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
vi的一些用法
[打印本頁]
作者:
zhangbo1882
時間:
2007-08-20 22:27
標題:
vi的一些用法
第一部分: 編輯一個文件
1. 快速移動
文本編輯的多數(shù)時間都花費在瀏覽, 檢查錯誤或者找出你要進行編輯工作的正確位置, 輸入新的內容或改變已有的內容倒在其次. 在文本中隨意漫游是
非常常見的操作. 所以高效編輯的第一要義是學習如何能夠在文本中快速移動, 準確定位.
通常情況下, 你知道要查找的內容, 或者查看所有的文本行只是為了找出某個單詞或者短語. 你
可以使用查找命令"/pattern"查找文本
,
但有幾點要注意的:
如果你已經找到了一個單詞并且想找出這個單詞還在其它哪些地方出現(xiàn), 可以使用"*"命令, 它查找下一個匹配的目標.
如果你設置了'incsearch'選項, Vim將會以反白顯示出第一個被找出的匹配. 這能在你還在/命令下敲入關鍵字時就快速地顯示出來(類似于
emacs的遞增查找功能)
如果你設置了'hlsearch'選項, Vim將會高亮顯示所有查找到的匹配, 這種策略可以讓你對要查找的內容有一個概括的了解, 如果你在程序代
碼中使用這一功能, 它能顯示出所有引用某個變量的地方. 你不需要移動光標就可以看到所有符合條件的匹配(同一屏幕上可以看到不至一個地方被匹
配).
在一些結構規(guī)范的文本中還有其它一些更方便的小技巧進行快速移動, Vim內嵌了方便C程序(以及與C語言很相象的C++和Java)的命令,使
用"%"命令可以從一個打開的括號跳轉到與它成對匹配的另一個括號處, 還可以從一個預處理指令"#if"跳轉到與之匹對的"#endif"
. 其
實"%"命令能跳轉到好幾種文本元素的'另一半'去. 這對檢查你的() 和 {}是否正確匹對非常方便.
使用"[{"跳轉到當前代碼塊的開頭(代碼塊是用"{}"括起來的程序段).
使用"gd"可以跳轉到當前光標所在的單詞(變量)的局部定義處
. 當然, 還有很多其它的技巧. 關鍵是你要知道有這樣的命令. 你也許會說你不可能
學習所有的命令. -- 共有幾百個不同的移動命令, 一些很簡單, 還有一些是智能化的 -- 不過它可能要花費你數(shù)周的時間學習使用它們. 當
然, 你不必全部掌握, 只要有你自己的一套辦法, 并且能處理你所要進行的操作.
有三個步驟可以使你學到你需要的技巧.
當你編輯文件的時侯, 留意一下你經常要重復進行的操作是什么. 或者你花大部分時間都在干些什么.
想一想有沒有一個編輯命令可以替你做最讓你頭痛的事. 讀在線文檔, 問一個朋友, 或者看一下別人是怎么做的.
練習使用這些命令, 直到你的手指可以不加思索地運用自如
舉個例子來說明到底怎樣做:
你在寫C程序的時侯, 你經常要花時間找到一個函數(shù)的定義. 現(xiàn)在你使用的是 "*"命令查找這個函數(shù)名都在哪些地方出現(xiàn)過, 但在你到達真正的目標之
前, 可能還有符合你的查找條件的很多個匹配(如注釋中出現(xiàn)的或該函數(shù)在其它地方被調用) 騷擾你. 你可能會想一定有一種捷徑可以一步到位.
瀏覽一下參考手冊你就會發(fā)現(xiàn)有個地方提到tag. 文檔指出如何使用這一功能跳轉到函數(shù)的定義處. 這正是你要的東東!
你已經知道如何生成一個tags文件(ctags *.[ch]或etags *.[ch]), 使用ctags 程序就可生成Vim所要的tags文
件. 接下來你練習使用CTRL-]命令. 為了更方便地使用這一功能, 你還可以往你的makefile文件里加入自動生成tags 文件的命令.
當你使用這面的三個原則時要當心: "我想使用這些命令, 但我沒時間去看文檔中的一些新命令". 如果你還這樣想, 那么你可能還處于計算機的石
器時代(就是說你比較菜啦). 有些人做什么都用notepad, 他們可能覺得別人用更短的時間完成相同的工作是不可思議的事.
不要重復做相同的事. 如果你經常要去找一個你常用的命令, 你就沒時間專注于你手頭上的事的. 只要找到耗費你太多時間的操作, 練習使用這些操作對
應的快捷命令, 直到你可以不加思索地使用它們. 這樣你才可能把精力集中在你要編輯的文本上面.
下面是一些多數(shù)人都會遇到的常見問題的解決方案的建議. 你可以以此為例, 學習使用上面的三個原則.
2. 不要兩次鍵入同樣的東西
我們鍵入的文本都是一個有限的集合. 甚至使用了有限的短語和句子. 尤其是計算機程序. 顯然, 你不必兩次鍵入這些相同的東西.
最常見的事是你要把一個詞改為另一個, 如果你要將整個文件里所有地方出現(xiàn)的這個詞都換為另一個, 你可以考慮使用":s"命令, 如果你要有選擇地
進行更改, 而且最好在看了上下文之后再決定, 你可以使用 "*" 命令查找這個詞的另一個匹配, 如果你決定要改, 那么使用"cw"使用改變這些
詞, 然后再用"n"命令到下一個匹配處使用"."重復上一個命令. "."命令重復上一次改變. 一個改變, 是指插入或刪除或替換一些文本. 可以
對這些操作進行重復是一種功能強大的機制. 如果你用它來組織你的編輯操作, 很多以往必需手工做的修改就只需要簡單地使用"."命令. 要特別注意在
重復上一次修改操作之前你有沒有做其它事, 夾在中間的有些操作可能會改變"."命令實際重復的內容. 使用"m"命令標注文本的一個位置地很有用.
它可以讓你在作了重復的修改之后回到你上次停留的地方.
一些函數(shù)名和變量名很難正確地鍵入, 比如"XpmCreatePixmapFromData", 沒有一個樣本看著或不看它的幫助是很難的(至少
是很煩的). Vim有一個補全機制可以讓這種事變成小菜一碟. 它會在文件里查找你要鍵入的文本, 找到相近的匹配就直接插入, 而且, 它還在你的
include文件里遞歸查找. 你可以鍵入"XpmCr", 接著
按下CTRL-N鍵, Vim會把它擴充
為"XpmCreatePixmapFromData", 這樣的功能還來的不光是為你節(jié)省了時間
, 它還減少了你手工鍵入時出錯的機會, 而且, 你
的編譯器也不會產生那么的警告錯誤了.
如果你要重復鍵入一個短語或一個句子, 也有一種快捷的方法. Vim有一種記錄宏的機制. 你鍵入"qa"開始把一段宏記錄入寄存器變量'a'中.
按下來你可以象平常一樣鍵入你要的操作, 只是這些操作都會被Vim記錄進它命名為'a'的宏中 , 再次再下"q"鍵, 就結束了宏'a'的錄制.
當你要重復執(zhí)行你剛才記錄的那些操作時只要使用"@a"命令. 共有26個可用的寄存器供你記錄宏.
使用宏你可以重復多個不同的操作. 而不僅僅是插入文本了. 如果你要進行某種重復的操作, 記著要用這一招呀.
使用宏要注意宏只是機械地重復你剛才鍵入的動作, 當你在文件里移動時要小心. 你用宏重復時和你當初錄制時要操作的文本對象可能不一樣. 你錄制
宏時向右移 4個字符可能對它當前的環(huán)境來說是正常工作. 但當你回放這些宏時, 它工作的文本環(huán)境可能需要移動5個字符.
當你要錄制的操作比較復雜時, 要想一次就全部通過也不是一件容易的事, 此時你可以寫一段宏或腳本. 這對于使你的程序模板化非常有用. 比
如, 一個函數(shù)頭 , 你可以把這項功能定制得如你所愿的智能化.
3. 錯誤修復
打字時出現(xiàn)錯誤是在所難免的事, 辦法只有一個, 就是盡快糾正它. 編輯器可以幫你自動做這一工作. 但是你要事先告訴它怎么才算錯, 正確的又
是什么.
對常人來說, 常犯的錯誤都是同一個錯誤. 你的手指就是不聽使喚. 這可以通過縮寫功能來糾正. 一些例子是:
:abbr Lnuix Linux
:abbr accross across
:abbr hte the 你一鍵入完錯誤的詞編輯器就會用正確的詞來替代它.
同樣的機制也可被用來以少數(shù)幾個字符代替鍵入一個長的詞. 特別是一些你很難正確拼寫出來的詞. 這樣也避免了你犯錯誤的機會. 例:
:abbr pn pinguin
:abbr MS Mandrake Software 不過, 副作用就是編輯器總是試圖把它所知道的縮寫擴展為整個單詞, 如果你真想鍵入MS,
反倒成了一個難題. 所以盡量使用沒有歧義的縮寫.
Vim有一套優(yōu)秀的語法高亮機制找到你的文本中存在的錯誤. 程序員尤其是這一功能的最大受益人.
語法高亮用特殊的顏色來顯示注釋. 這聽起來好象沒什么, 但一旦你使用了這項功能你就會發(fā)現(xiàn)好處多多. 你可以快速發(fā)現(xiàn)哪些部分應該是一個注釋. 但
是并沒有被語法高亮指出來. 對程序員來說, 忘記注釋的結束標記*/是很正常的事. 這在只有黑白兩色的文本中可不是一件省油的事.
沒有正確匹對的括號也可被語法高亮指出. 一個沒有被正確匹對的括號")"會被一個亮紅色的背景特別指出. 你可以使用 "%"命令看一看它應該跟
誰匹配, 然后在正確的位置補上一個"("或")"
其它的一些常見錯誤也可被語法高亮功能協(xié)助你檢查出來, 如#i ncluded . 在黑與白的世界中它們對錯難分. 但語
法高亮可以幫你快速分辨出雌雄真假.
一個更復雜的例子: 對于英語文本來說, 可以有一個長長的可用單詞的列表, 不包括在其中的單詞都被視為一個錯誤, 使用一個語法文件, 你可以
把所有沒有出現(xiàn)在該文件列表中的單詞用語法高亮功能標出來. 用一個特殊的宏你就可以往這個單詞清單里加入新的生詞. 加入后它們就不再被視為一個錯誤
了. 這種功能以往只能在單詞分析器中. 在Vim中使用簡單的腳本就可實現(xiàn), 而且, 你可以按自己的需要來定制這一功能. 比如, 你可以只檢查程
序中的注釋.
第二部分: 編輯多個文件
4. 經常需要編輯不止一個文件
人們往往都不是只編輯一個文件. 通常有多個相關的文件. 可能要在單個地編輯文件后一次編輯幾個文件. 或者同時編輯幾個文件. 要進行高效的編
輯就要充分利用編輯器一次編輯多個文件的功能.
前面提到的tag機制可被用于在多個文件間跳轉. 通常的方法是為你正在做的項目生成一個tag文件. 之后就可以在這個項目的多個文件之間自由跳
轉, 發(fā)現(xiàn)函數(shù)定義, 結構, 類型定義typedef, 等等. 比起你單個地搜索這些文件, 可以大大節(jié)省你的時間; 瀏覽一個項目之前第一要作的
事就是為它創(chuàng)建一個tags文件.
另一個強大的機制是在一個項目中找出一個名字在多個文件中的不同地方, 使用 ":grep"命令. Vim產生所有匹配的清單, 并且跳轉到第一
個匹配處. "cn"命令可以使你跳轉到它的下一個匹配處. 這對于你要改變一個函數(shù)的參數(shù)來說非常有用.
被#i nclude包含的文件含有豐富的信息, 但是要找出你想要的東西卻要耗費大量的時間. Vim可以處理#i nclude所包含的文
件. 并且可以在其中查找你要找的東西. 經常的需求是查看一個函數(shù)的原型. 將
光標定位在你要查看其原型的函數(shù)名上, 然后按下"[I"命令,
Vim將會顯示include文件中匹配這個函數(shù)名的一個清單
. 如果你要看它的上下文信息, 可以跳轉到它的聲明處. 一個簡單的命令可以用來檢查你
是否包含了正確的頭文件.
Vim中可以把一個文本區(qū)分為幾個不同的部分, 然后分別編輯各個部分, 編輯完成后你可以比較兩個或多個文件的內容, 或在它們之間copy/
paste文本內容. 有很多命令可以打開或關閉窗口, 或在它們之間跳轉. 臨時地隱藏文件. 等等. 再用上面的三個法則來練習你要掌握的新的命
令.
多個窗口有多種用途. 預覽標簽機制是一個很好的例證. 它會打開一個特殊的預覽窗口, 并且使光標仍然停留在你當前所在的位置. 在預覽窗口中的文本
列出了當前光標所在處的函數(shù)的聲明(有些可能不是聲明) 將當前光標移動到另一個函數(shù)名上, 停留幾秒鐘, 預覽窗口中的內容就會變成是關于新函數(shù)名的
聲明.
5. 協(xié)同作業(yè)
編輯器是用來編輯文本的, e-mail程序是用來收發(fā)email的, 操作系統(tǒng)是用來運行用戶程序的. 每個程序都有它自己的業(yè)務范圍. 將這些
程序的功能組合起來就可產生強大的處理能力.
一個簡例: 在一個清單中選擇一些結構化的文本并且將它排序"!sort". 外部程序 "sort"處理真正的排序工作. 就這么簡單, 排序功
能可以被集成進一個編輯器中. 但是, 如果你看一個"man sort", 你就會發(fā)現(xiàn)它有眾多可用的選項. 它有一個高度優(yōu)化的算法來執(zhí)行排序工
作. 你難道要在你的編輯器里寫一個同樣強大的排序程序嗎? 或者其它的流過濾程序? 那將會使你的編輯器變得十分臃腫.
Unix的哲學是使用獨立的小程序, 每個小程序做一項專門的任務, 并且把它作好, 將它們的工作整合到一起來完成一個復雜的任務. 不幸的是, 多
數(shù)編輯器并不能與其它程序一起協(xié)同工作, 比如你不能替換Netscape里的e-mail編輯器. 另一種做法是把所有的功能都包括到一個程序中
去. 在編輯器領域, emacs是這方面的一個典范(有人甚至說它是一個能編輯文本的操作系統(tǒng))
Vim 的做法是將這些分散的小程序整合起來, 但這樣做也并不容易, 目前來說可以在MS的Developer Studio和Sniff中使用
Vim編輯器, 一些e-mail程序也支持外掛的編輯器, 象Mutt, 就可以使用Vim. 與Sun的Workshop集成也可以正常工作. 在
這方面Vim還有待在將來進一步提高. 直到我們找到一個比所有這些加起來還好的系統(tǒng).
6. 文本是結構化的
可能你經常要打交道的文本都有一些內在的結構. 只是不被當前可用的命令所支持而以, 你可能不得不要回頭建立你自己的宏和腳本來操作這些文本.
這樣做顯然有些復雜.
最簡單的一件事就是加速你的 編輯-編譯-修改的周期. Vim有它自己的":make" 命令, 該命令編譯你的程序項目, 捕獲編譯的錯誤/警
告并允許你直接跳轉到引起這一錯誤/警告的程序行上去. 如果你有一個另類的編譯器, 它輸出的錯誤信息可能對Vim來說是不可識別的. 不要緊, 更
改你的'errorformat'選項, 這一選項告訴 Vim你的編譯器將生成何種格式的錯誤信息, 以便于它能識別. 比如如何找到出錯的文件
名, 出錯的行號, 既然它已經能與gcc產生的復雜的錯誤信息格式一同工作, 可以想見, 它也對付多數(shù)其它編譯器產生的錯誤信息.
有時為一種特殊格式的文件作出調整也只是設置一些選項, 寫一些宏, 如要跳轉到 manual 幫助文檔, 你可以寫一個宏來獲取當前當前所在的
詞, 清除當前的緩沖區(qū)并且讀入相應的幫助頁, 這對于查看交叉索引是一種簡捷有效的辦法.
使用上面的三項原則你就可以對付任何形式的結構化文本. 只要想一下你要對文件做些什么, 找出編輯命令, 練習使用它. 就象聽起來一樣簡單.
唯一的事就是你必須真正去做它.
第三部分:
7. 養(yǎng)成習慣
學習駕車當然要花費心思, 但這足以成為你繼續(xù)騎自行車的理由嗎? 不, 你意識到你需要投入時間學習一項技巧. 文本編輯與此同理. 你需要學習
新的命令和技巧.
另一方面, 你也不必學習一個編輯器所提供的所有命令. 那樣只會浪費你的時間. 絕大多數(shù)人只需要學習其中的10-20%的命令就足以應付它們的
工作了. 但是對每個人來說, 適合自己的命令集各各不同, 這需要你不時地回顧以往所做的事, 看看是不是可以自動完成一些重復的工作. 如果你只進
行了一次某項特殊的操作, 并且沒指望將來還要進行類似的操作, 就不要試著去琢磨它了. 但是, 你也許能預見到在幾個小時以內你就要重復進行同樣的
操作. 那么去文檔里面搜索出你希望的"瑞士軍刀" 或者要寫一個宏來完成它. 如果任務過于復雜, 比如處理特殊類型的文本, 你可以到新聞組里看看
是不是已經有人解決了與你相似的問題.
決定性的步驟是最后一步, 可能你發(fā)現(xiàn)了一個重復操作的解決方案, 幾個星期后你卻又忘記了. 那樣沒用. 你要不斷地重復練習你的解決方案直到你
的手指可以條件反射地自動完成, 從而達到你所期望的境界. 不要一次嘗試太多的東西 , 一次做一件事并多做幾次會好得多. 對于不經常的操作, 最
好記下你的處理步驟以備將來不時之需. 不管怎樣, 只要目標明確. 你就能找到讓你的編輯變得更加高效的辦法.
最后要提醒你的一點是人們往往還是會對上面提及的建議視而不見: 我還是經?吹饺藗兓ㄙM半天的時間在屏幕上用兩個手指上滾下翻. 真替他們感到費
勁. 用十個指頭操作也并不會讓他們更快一點, 而且這樣做也最容易讓人心生厭煩. 每天使用一個計算機程序一個小時, 也只需要幾個星期的時間練習這
樣的操作.
結束語
本文的由來是受Stephen R. Covey的名作"The 7 habits of highly effective people"啟
發(fā). 我向我知道的每個人推薦它去解決個人的或專業(yè)的問題. 也許有些讀者會說這是來自于Scott Adams 的"Seven years of
highly defective people"一書(同樣噴血推薦). 參見
http://www.vim.org/iccf/
click1.html的 "recommended books and CDs".
關于作者
Bram Moolenaar 是Vim的主要作者. 他寫了Vim的核心功能并且負責甄選其它作者的代碼. 他作為一名技術人員畢業(yè)于Delft技術
大學, 現(xiàn)在他主要從事軟件業(yè). 但他也知道如何使用電烙鐵. 他是荷蘭ICCF的創(chuàng)建者和出納. 這是一個幫助烏干達孤兒的組織. 他作為一個系統(tǒng)建
筑師為自由軟件工作, 但實際上他為Vim花費了大量的心血.
本文來自ChinaUnix博客,如果查看原文請點:
http://blog.chinaunix.net/u/21973/showart_364261.html
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2