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的一些其它特殊的插入技巧.加油!