code:
原作: Jill Kliger and Wesley Craig.中譯: 交大資工86 劉醇豐 cfliu@csie.nctu.edu.tw 1995.Jul.6譯注: 這是從交大資工計中的vilearn所抓出來的文件.原文是英文寫的. 這系列的文章有五六篇,都不長但應對vi初學者有所幫助.我自己也算vi初 學者,所以若翻譯有錯誤或有不通順有錯誤的地方都歡迎各位前輩指點. 有愛好的朋友請將這些文章抓下來直接用vi閱讀并跟著文中的指示跟著實 作,相信一定能學的更快.這幾天有空就會陸續將其它的部份都翻譯完.---------------------------------------------------------------------------------------------------------------輕松學 vi 第二課 : 快速有效的穿梭于檔案間-----------------------------------------接下來的這門課將花約15到20分鐘.在這門課里所教的內容將用在第三課中:vi的剪貼功能.有[實作]的部份請你務必跟著實地演練一次.假如你想離開這門課程請按大寫的Z兩次離開.WordS-----有不少的方法可以讓光標從一個word跳到其它的word. w 光標跳到下個word的開頭 e 光標跳到下個word的字尾 b 光標回到上個word的開頭大寫的 W E B也有著相同的功能.大寫和小寫的 w e b 指令的差別在于小寫的w e b 指令把任何非數字或字母的字符當成一個新word的開始,而大寫的 W E B則是用空格符來區隔兩個word.[實作]現在用下面兩行來試試 w b e 和 B W E 這些指令 EX-PER-IMENT on these lines;test moving back &forth. EX-PER-IMENT on these lines;test moving back &forth.ON THE LINE-----------你可以很快的將光標移到所在行的任何位置 $ 移到光標所在行的行尾 ^ 移到該行第一個非空白的字符 0 移到該行的開頭位置 # 移到該行的第 # 個位置 例: 5 12[實作]現在試試 $ 和 ^ 這兩個指令,請注重 ^ 會移到第一個非空白的字符,并 不是那一行的開頭位置 This is a PRACTICE LINE. There is white space at the front. END0 (zero) 會把光標移到該行的最左邊.# ( 和 / 在同一鍵上) 是用來直接移動光標到該行的第 # 個位置先按 # (范圍介于 1-80 之間) 再按 . 舉例來說: 5 20 30尋找字符--------有時你可能須要尋找一行中的某個字符. f char 尋找(FIND) 本行中下一個 char 字符 t char 將光標移到本行中下一個 char 字符之前 F char 尋找本行中前一個char所在的位置 T char 移到本行中前一個 char 字符之后 ; 重復上一個 f, t, F, 或 T 的動作 , 反向重復上一個 f, t, F, 或 T 的動作f 和 F 會讓光標停在找到的字符上,t 和 T 將光標停在找到的字符旁.f 和 t 往后找,F 和 T 往前找.假如要找的字符找不到,vi會發出聲音告訴你.[實作]現下下面有一行文字,試試 f t F T ; , 這些指令 "PRACTICE line?" "Each and Every?" "Find thE char@cter and move to it.ENDMATCHING--------vi有一個很方便的功能,尤其對寫C程序的人來說更是好用.它可以幫你判定() {} [] 有沒有成對,假如找不到對應的括號,vi會發出聲音告訴你,假如有找到就直接跳到對應的括號上. % 尋找有無對應的 () {} 或 [][實作]在下面的練習中,移動你的光標到(,),[,],{,}上面,再按 % [TRY THIS. ((Whether) the pairs match up is the question.) [One] pair is incomplete]. Can you tell {which one? ]} ENDWINDOW POSITIONS----------------在vi里你可以移動光標到畫面的上方,中間,和下方. H 移到光標到畫面的最上方 (HIGHEST) M 移到光標到畫面的中間 (MIDDLE) L 移到光標到畫面的最下方[實作]好,現在試試 H M 和 L 這三個指令.標示位置--------你可以在檔案里做些標記再隨時返回被標記的位置. m char (MARK) 把這個地方標示成 char ' char (quote character) 跳到被標為 char的那一行 '' (按兩次') 回到剛才的位置char 可以是小寫的 a-z中的任一個 . 一個標記在除了下面的這兩種情況外會一直存在 1) 重復使用相同的標示 char . 或 2) 刪掉了被標示的那一行.[實作]>>> 移到這一行,按 ma 把這行標成 a>>> 移到這一行,按 mb 把這行標成 b>>> 移到這一行,按 mz 把這行標成 z>>> 移到這一行,按 mb 把這行標成 b>>> 移到這一行,按 mz 把這行標成 z>>> 現在按 'a 讓vi回到標示為 a 的那一行.>>> 現在按 'b 讓vi回到標示為 b 的那一行.>>> 現在按 'z 讓vi回到標示為 z 的那一行.這些指令可以讓你往返切換于檔案中兩個相距很遠的地方.vi會記住你剛才是從那一行跳躍過來,你可以按 '' 往返的切換[實作]按 'b 回到標示為 b 的那行,再按 '' 回到這行跳到某一行------------ G (GO) 跳到檔案的最后一行. #G (GO to line #). 跳到第 # 行 (例: 3G , 5G , 124G )[實作]按 1G 跳到檔頭,再按 '' 回到這行.再來按 G 跳到檔尾再按 ''回到這行文字段落--------------有時候一段一段的移動光標會比較方便.我們可以用 {,},(,) 來達到這些功能 { (左大括號) 跳到上一段的開頭 } (右大括號) 跳到下一段的的開頭. ( (左小括號) 移到這個句子的開頭 ) (右小括號) 移到下一個句子的開頭[實作]現在試著利用下面兩段文字來學習使用 { 和 }的功能. EXPERIMENT on this first paragraph. The quick brown fox jumped over the seven lazy dogs. The fox must have been very large to jump over seven dogs!
EXPERIMENT on this second paragraph. The quick brown dog jumped over the seven lazy foxes. The dog didn't have to be nearly as large, since foxes aren't too big.[實作]現在用上面的兩段文字來試試 ( 和 )C的程序設計者對接下來的這兩個指令可能會感愛好.C的函式(function)都是用 { 和 } 括起來的,假如你把各函式的 { 都放在一行的第一個位置那么vi便可以讓你用 [[ 和 ]] 輕松穿梭于各函式之間 [[ 跳往上一個函式 ]] 跳往下一個函式若vi在整個檔里都找不到最左邊是行首是 { 的符號時, 按[[ 和 ]] 就會跳到檔頭和檔尾[實作] 現在下面有幾個函式,試著用 ]] 和 [[ 往返切換于各函式間.main(){ helloworld();}helloworld(){ PRintf( "Hello world/n" );}搜尋----- /string 向后尋找 string 這個字符串 ?string 往前尋找 string 這個字符串 n 重復上一個 / 或 ? 的指令,繼續尋找 N 重復上一個 / 或 ? 的指令,反向繼續尋找vi may search past the bottom of the file and then start again at the top.(Or, vi may search past the top and then start again at the bottom.)[實作]現在請你詢找 "the" 這個字符串三次,再反向找三次回到這個位置步驟如下 先按 /the 再按 RETURN. 按三次 n 按 N 直到你再次回到這個位置總結------- w 光標跳到下個Word的開頭 e 光標跳到下個word的字尾 b 光標回到上個word的開頭 $ 移到光標所在行的行尾 ^ 移到該行第一個非空白的字符 0 移到該行的開頭位置 # 移到該行的第 # 個位置 例: 5 12 f char 尋找(FIND) 本行中下一個 char 字符 t char 將光標移到本行中下一個 char 字符之前 F char 尋找本行中前一個char所在的位置 T char 移到本行中前一個 char 字符之后 ; 重復上一個 f, t, F, 或 T 的動作 , 反向重復上一個 f, t, F, 或 T 的動作 % 尋找有無對應的 () {} 或 [] H 移到光標到畫面的最上方 (HIGHEST) M 移到光標到畫面的中間 (MIDDLE) L 移到光標到畫面的最下方 m char (MARK) 把這個地方標示成 char ' char (quote character) 跳到被標為 char的那一行 '' (按兩次') 回到剛才的位置 G GO to the last line in the file #G GO to line #. (e.g., 3G , 5G , 175G ) G (GO) 跳到檔案的最后一行. #G (GO to line #). 跳到第 # 行 (例: 3G , 5G , 124G ) { (左大括號) 跳到上一段的開頭 } (右大括號) 跳到下一段的的開頭. ( (左小括號) 移到這個句子的開頭 ) (右小括號) 移到下一個句子的開頭 [[ 跳往上一個函式 ]] 跳往下一個函式 /string 向后尋找 string 這個字符串 ?string 往前尋找 string 這個字符串 n 重復上一個 / 或 ? 的指令,繼續尋找 N 重復上一個 / 或 ? 的指令,反向繼續尋找現在你應該已經能夠很順暢的在檔案中自由的移動光標了.尤其是若你的數據機(modem)速度很慢時,這些指令更加顯的有用.請你繼續練習這些指令,接下來再進行第三課: vi的剪貼功能 或第四課: vi的一些其它非凡的插入技巧.加油!