vi教程

vi教程

1.6.1?vi 的工作模式
Vi 在初始啓動後首先進入編輯模式,這時用戶可以利用一些預先定義的按鍵來移動光標、刪除文字、複製或粘貼文字等。這些按鍵均是普通的字符,例如 l 是向右移動光標,相當於向右箭頭鍵,k 是向下移動光標,相當於向下箭頭鍵。在編輯模式下,用戶還可以利用一些特殊按鍵選定文字,然後再進行刪除、或複製等操作。

當用戶在編輯模式下鍵入 i, a, o 等命令之後,可進入插入模式;鍵入 : 可進入命名模式。在插入模式下,用戶隨後輸入的,除 Esc 之外的任何字符均將被看成是插入到編輯緩衝區中的字符。按 Esc 之後,從插入模式切換到編輯模式。

在命令模式,Vi 將把光標挪到屏幕的最下方,並在第一個字符的位置顯示一個 :(冒號)。這時,用戶就可以鍵入一些命令。這些命令可用來保存文件、讀取文件內容、執行 Shell 命令、設置 Vi 參數、以正則表達式的方式查找字符串或替換字符串等。

1.6.2?編輯模式
1. 移動光標
要對正文內容進行修改,首先必須把光標移動到指定位置。移動光標的最簡單的方式是按鍵盤的上、下、左、
右箭頭鍵。除了這種最原始的方法之外,用戶還可以利用 vi 提供的衆多字符組合鍵,在正文中移動光標,迅
速到達指定的行或列,實現定位。例如:
k、j、h、l???功能分別等同於上、下、左、右箭頭鍵
Ctrl+b?????在文件中向上移動一頁(相當於 PageUp 鍵)
Ctrl+f?????在文件中向下移動一頁(相當於 PageDown 鍵)
H??????? 將光標移到屏幕的最上行(Highest)
nH???????將光標移到屏幕的第 n 行
2H???????將光標移到屏幕的第 2 行
M??????? 將光標移到屏幕的中間(Middle)
L??????? 將光標移到屏幕的最下行(Lowest)
nL???????將光標移到屏幕的倒數第 n 行
3L???????將光標移到屏幕的倒數第 3 行
w??????? 在指定行內右移光標,到下一個字的開頭
e??????? 在指定行內右移光標,到一個字的末尾
b??????? 在指定行內左移光標,到前一個字的開頭
0??????? 數字0,左移光標,到本行的開頭
$??????? 右移光標,到本行的末尾
^??????? 移動光標,到本行的第一個非空字符

2. 替換和刪除
將光標定位於文件內指定位置後,可以用其他字符來替換光標所指向的字符,或從當前光標位置刪除一個或多
個字符。例如:
rc???????用 c 替換光標所指向的當前字符
nrc?????? 用 c 替換光標所指向的前 n 個字符
5rc?????? 用 c 替換光標所指向的前 5 個字符
x??????? 刪除光標所指向的當前字符
nx???????刪除光標所指向的前 n 個字符
3x???????刪除光標所指向的前 3 個字符
dw???????刪除光標右側的字
ndw?????? 刪除光標右側的 n 個字
3dw?????? 刪除光標右側的 3 個字
db???????刪除光標左側的字
ndb?????? 刪除光標左側的 n 個字
5db?????? 刪除光標左側的 5 個字
dd???????刪除光標所在行,並去除空隙
ndd?????? 刪除 n 行內容,並去除空隙
3dd?????? 刪除 3 行內容,並去除空隙

3. 粘貼和複製
從正文中刪除的內容(如字符、字或行)並沒有真正丟失,而是被剪切並複製到了一個內存緩衝區中。用戶可
將其粘貼到正文中的指定位置。完成這一操作的命令是:
p??????? 小寫字母 p,將緩衝區的內容粘貼到光標的後面
P??????? 大寫字母 P,將緩衝區的內容粘貼到光標的前面
如果緩衝區的內容是字符或字,直接粘貼在光標的前面或後面;如果緩衝區的內容爲整行正文,則粘貼在當前
光標所在行的上一行或下一行。
注意上述兩個命令中字母的大小寫。vi 編輯器經常以一對大、小寫字母(如 p 和 P)來提供一對相似的功能
。通常,小寫命令在光標的後面進行操作,大寫命令在光標的前面進行操作。
有時需要複製一段正文到新位置,同時保留原有位置的內容。這種情況下,首先應當把指定內容複製(而不是
剪切)到內存緩衝區。完成這一操作的命令是:
yy???????複製當前行到內存緩衝區
nyy?????? 複製 n 行內容到內存緩衝區
5yy?????? 複製 5 行內容到內存緩衝區

4. 搜索字符串
和許多先進的編輯器一樣,vi 提供了強大的字符串搜索功能。要查找文件中指定字或短語出現的位置,可以
用 vi 直接進行搜索,而不必以手工方式進行。搜索方法是:鍵入字符 / ,後面跟以要搜索的字符串,然後
按回車鍵。編輯程序執行正向搜索(即朝文件末尾方向),並在找到指定字符串後,將光標停到該字符串的
開頭;鍵入 n 命令可以繼續執行搜索,找出這一字符串下次出現的位置。用字符 ? 取代 / ,可以實現反向
搜索(朝文件開頭方向)。例如:
/str1????? 正向搜索字符串 str1
n??????? 繼續搜索,找出 str1 字符串下次出現的位置
?str2????? 反向搜索字符串 str2
無論搜索方向如何,當到達文件末尾或開頭時,搜索工作會循環到文件的另一端並繼續執行。

5. 撤銷和重複
在編輯文檔的過程中,爲消除某個錯誤的編輯命令造成的後果,可以用撤消命令。另外,如果用戶希望在新
的光標位置重複前面執行過的編輯命令,可用重複命令。
u??????? 撤消前一條命令的結果
.??????? 重複最後一條修改正文的命令

6. 文本選中
vi 可進入到一種成爲 Visual 的模式,在該模式下,用戶可以用光標移動命令可視地選擇文本,然後再執行其他編輯操作,例如刪除、複製等。 v 字符選中命令 V 行選中命令


#DEMO#

1.6.3?插入模式
1. 進入插入模式
在編輯模式下正確定位光標之後,可用以下命令切換到插入模式:
i??????? 在光標左側輸入正文
a??????? 在光標右側輸入正文
o??????? 在光標所在行的下一行增添新行
O??????? 在光標所在行的上一行增添新行
I??????? 在光標所在行的開頭輸入正文
A??????? 在光標所在行的末尾輸入正文
上面介紹了幾種切換到插入模式的簡單方法。另外還有一些命令,它們允許在進入插入模式之前首先刪去一段
正文,從而實現正文的替換。這些命令包括:
s??????? 用輸入的正文替換光標所指向的字符
ns???????用輸入的正文替換光標右側 n 個字符
cw???????用輸入的正文替換光標右側的字
ncw?????? 用輸入的正文替換光標右側的 n 個字
cb???????用輸入的正文替換光標左側的字
ncb?????? 用輸入的正文替換光標左側的 n 個字
cd???????用輸入的正文替換光標的所在行
ncd?????? 用輸入的正文替換光標下面的 n 行
c$???????用輸入的正文替換從光標開始到本行末尾的所有字符
c0???????用輸入的正文替換從本行開頭到光標的所有字符

2. 退出插入模式
退出插入模式的方法是,按 ESC 鍵或組合鍵Ctrl+[ 。

#DEMO#

1.6.4?命令模式
在 vi 的命令模式下,可以使用複雜的命令。在編輯模式下鍵入“:”,光標就跳到屏幕最後一行,並在那裏顯示冒號,此時已進入命令模式。命令模式又稱“末行模式”,用戶輸入的內容均顯示在屏幕的最後一行,按回車鍵,vi 執行命令。

1. 退出命令
在編輯模式下可以用 ZZ 命令退出 vi 編輯程序,該命令保存對正文所作的修改,覆蓋原始文件。如果只需要
退出編輯程序,而不打算保存編輯的內容,可用下面的命令:
: q?????? 在未作修改的情況下退出
: q!??????放棄所有修改,退出編輯程序

2. 行號與文件
編輯中的每一行正文都有自己的行號,用下列命令可以移動光標到指定行:
: n?????? 將光標移到第 n 行
命令模式下,可以規定命令操作的行號範圍。數值用來指定絕對行號;字符“.”表示光標所在行的行號;字符
符“$”表示正文最後一行的行號;簡單的表達式,例如“.+5”表示當前行往下的第 5 行。例如:
:345????????將光標移到第 345 行
:345w file???將第 345 行寫入 file 文件
:3,5w file???將第 3 行至第 5 行寫入 file 文件
:1,.w file???將第 1 行至當前行寫入 file 文件
:.,$w file???將當前行至最後一行寫入 file 文件
:.,.+5w file????從當前行開始將 6 行內容寫入 file 文件
:1,$w file???將所有內容寫入 file 文件,相當於 :w file 命令
在命令模式下,允許從文件中讀取正文,或將正文寫入文件。例如:
:w???????將編輯的內容寫入原始文件,用來保存編輯的中間結果
:wq?????? 將編輯的內容寫入原始文件並退出編輯程序(相當於 ZZ 命令)
:w file???? 將編輯的內容寫入 file 文件,保持原有文件的內容不變
:a,bw file???將第 a 行至第 b 行的內容寫入 file 文件
:r file???? 讀取 file 文件的內容,插入當前光標所在行的後面
:e file???? 編輯新文件 file 代替原有內容
:f file???? 將當前文件重命名爲 file
:f???????打印當前文件名稱和狀態,如文件的行數、光標所在的行號等

3. 字符串搜索
給出一個字符串,可以通過搜索該字符串到達指定行。如果希望進行正向搜索,將待搜索的字符串置於兩個“
/”之間;如果希望反向搜索,則將字符串放在兩個“?”之間。例如:
:/str/???????????正向搜索,將光標移到下一個包含字符串 str 的行
:?str????????????反向搜索,將光標移到上一個包含字符串 str 的行
:/str/w file????????正向搜索,並將第一個包含字符串 str 的行寫入 file 文件
:/str1/,/str2/w file????正向搜索,並將包含字符串 str1 的行至包含字符串 str2 的行寫
????????????? 入 file 文件

4. 正文替換
利用 :s 命令可以實現字符串的替換。具體的用法包括:
:s/str1/str2/??? 用字符串 str2 替換行中首次出現的字符串 str1
:s/str1/str2/g???用字符串 str2 替換行中所有出現的字符串 str1
:.,$ s/str1/str2/g?用字符串 str2 替換正文當前行到末尾所有出現的字符串 str1
:1,$ s/str1/str2/g?用字符串 str2 替換正文中所有出現的字符串 str1
:g/str1/s//str2/g? 功能同上
從上述替換命令可以看到:g 放在命令末尾,表示對搜索字符串的每次出現進行替換;不加 g,表示只對搜索
字符串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作。

5. 刪除正文
在命令模式下,同樣可以刪除正文中的內容。例如:
:d?????????刪除光標所在行
:3d???????? 刪除 3 行
:.,$d??????? 刪除當前行至正文的末尾
:/str1/,/str2/d?? 刪除從字符串 str1 到 str2 的所有行

6. 恢復文件
vi 在編輯某個文件時,會另外生成一個臨時文件,這個文件的名稱通常以 . 開頭,並以 .swp 結尾。vi 在
正常退出時,該文件被刪除,若意外退出,而沒有保存文件的最新修改內容,則可以使用恢復命令:
:recover????? 恢復文件
也可以在啓動 vi 時利用 -r 選項。

#DEMO#

#DEMO#

1.6.5?選項設置
爲控制不同的編輯功能,vi 提供了很多內部選項。利用 :set 命令可以設置選項。基本語法爲:
:set option???? 設置選項 option
常見的功能選項包括:
autoindent?????設置該選項,則正文自動縮進
ignorecase?????設置該選項,則忽略規則表達式中大小寫字母的區別
number???????設置該選項,則顯示正文行號
ruler??????? 設置該選項,則在屏幕底部顯示光標所在行、列的位置
tabstop?????? 設置按 Tab 鍵跳過的空格數。例如 :set tabstop=n,n 默認值爲 8
mk?????????將選項保存在當前目錄的 .exrc 文件中

#DEMO#

1.6.6?shell 切換
在編輯正文時,利用 vi 命令模式下提供的 shell 切換命令,無須退出 vi 即可執行 Linux 命令,十分
方便。語法格式爲:
:! command?????執行完 shell 命令 command 後回到 vi
另外,在編輯模式下,鍵入 K ,可命令 vi 查找光標所在單詞的手冊頁,相當於運行 man命令。
#DEMO#

1.6.7?vim 和 gvim 的高級特色
Vim 代表 Vi IMproved,如同其名稱所暗示的那樣,Vim 作爲標準 UNIX 系統 vi 編輯器的提高版而存在。 Vim 除提供和 vi 編輯器一樣強大的功能外,還提供有多級恢復、命令行歷史以及命令及文件名補全等功能。

gvim 是 vi 的 X Window 版本,該版本支持鼠標選中,一些高級光標移動功能,並且帶有菜單和工具按鈕。

#DEMO#


另一篇優秀的教程
=======================================
vi 命令常見問題解答

作者:譯者Elale


[vi-faq中文版]

0.0 - 引言 -- 我怎樣用這個FAQ

這個文檔分爲了幾個部分.首先,第0節和第1節介紹了什麼是vi;第2節則收錄了很多新
學者的問題,一些對vi沒有很多經驗的人也經常問這些問題.這裏麪包括諸如“命令模式和插入
模式之間的區別”,以及“我怎樣拷貝和粘貼”之類的問題.第3節是面向vi的中級用戶的,它從
問題“我如何查找和替換”開始,逐步深入,直到對vi裏面的宏(Macro)的用法討論爲止.第3
節還包括了一個vi的快速參考,有一個規範的vi命令列表.再下面,是一個有關“:set”命令的

我們已經在一個運行SunOS和UCB版本vi的機器上驗證了快速參考.除了SunOS帶的vi外,
每個命令都可以在系統V和UCB版本vi運行,但是我個人並沒有驗證這一點.

除非我們在文檔中指明,缺省我們假定你處在命令模式下.

我們還嘗試保留儘可能多的術語,因爲在原始的vi文檔中使用了這些術語,儘管我可能
忘了它的本來含義.

0.1 - 索引

第一個文件:

0.0 - 引言 -- 我怎樣用這個FAQ?
0.1 - 索引
0.2 - 我可以散發這個FAQ嗎?
0.3 - 你能爲這個FAQ做什麼?

1.0 - 什麼是vi?
1.1 - 關於vi有什麼重大的交易嗎? 爲什麼大家都用它? 更進一步說,爲什麼我要用它?
1.2 - 噢! 這聽起來不錯! 有沒有理由不用vi?
1.3 - vi能在多少不同的操作系統下面運行?
1.4 - 好吧, 你說服了我. 我決定開始使用vi. 我該從哪兒開始?
1.5 - vi有其他一些可用的變種嗎?

2.0 - vi入門
2.1 - 有什麼遊戲幫助我們學習vi嗎?
2.2 - 命令模式和插入模式有什麼區別?
2.3 - 等等,我的鍵盤沒有<Esc>鍵,我該怎麼辦?
2.4 - 那些~s是什麼東西?
2.5 - 我無法習慣用 hjkl, 你有什麼建議嗎?
2.6 - 我如何才能不存盤就退出?
2.7 - 我怎樣插入一個文件?
2.8 - 我怎樣查找文本?
2.9 - 我怎樣搜索一個控制序列?
2.10 - 我怎樣重新格式化文本?
2.11 - 我怎樣複製文本?
2.12 - 啊! 我剛纔敲了一個dG,然後我的論文就沒有了! 我該怎麼辦?
(或者,我剛纔犯了個錯誤,我該怎麼辦?)
2.13 - 我正在寫我的論文,被告知我必須將每一節都放在不同的文件裏,我該怎麼辦?
2.14 - 所有的:命令都是怎樣處理的?

3.0 - 怎樣查找和替換?
3.1 - 我怎樣在vi中運行一個程序?
3.2 - 啊! 我正在寫我的論文, 系統崩潰了! 怎麼辦?
3.3 - 有沒有使vi對程序員更友好的竅門?
3.4 - 宏 -- 我怎樣寫宏?
3.5 - 我怎樣將一個功能鍵定義成一個宏?
3.6 - 有沒有辦法縮寫文本?
3.7 - 我怎樣在當前文檔中做拼寫檢查?
3.8 - 我手頭有一個硬拷貝的終端, 我還能用vi嗎?
3.9 - 好了,是不是處在開放模式下的原因呀?! 但是我現在沒有用硬拷貝終端,它還是在
開放模式呀?

第二個文件:

4.0 - vi檔案的在線幫助在哪兒?
5.0 - 好玩的vi訣竅,無聊的宏
5.1 - 好玩的vi訣竅
5.2 - 好玩的宏
6.0 - 依字母順序的vi快速參考
6.1 - 命令模式的輸入選項(:命令)
6.2 - 設置選項(set)
7.0 - 建立 .exrc文件
7.1 - .exrc文件的樣本
8.0 - vi的漏洞
9.0 - 術語表
10.0 - 關於vi的參考書目

0.2 - 我可以散發這個FAQ嗎?

可以!只要你沒有對它做任何修改,或者用它來賺錢.

0.3 - 你能爲這個FAQ做什麼?
首先, 把你發現的錯誤告訴我. 如果你有什麼建議我們也很歡迎. 你認爲還不清楚的地方
告訴我們,我們同樣歡迎.
還有, 使用vi! (Spread the word) 我很抱歉我無法將所有對這個FAQ有貢獻的人都列出
來, 因爲許許多多的人都給過我建議和幫助,如果我將他們都列出來的話,那麼恐怕這張貢獻
者的清單將和這個文檔本身一樣長了.

1.0 - 什麼是vi?
vi是個可視化的編輯器(vi就意味着可視化--VIsual). 那麼,什麼是可視化的編輯器呢?
(相對於非可視化的編輯器來說)?可視化的編輯器就是可以讓你在編輯文本的時候看到它們.
今天,這聽起來似乎非常普通,反之,非可視化的編輯器似乎很奇怪. 非可視化的編輯器的例子
可以舉出不少:如ed, sed和edlin(直到相當近的一段時間內,它是DOS自帶的最後一個編輯器)
等.
vi是威廉.僑伊寫的,作爲BSD UNIX的一部分. 後來AT&T也開始用vi, 於是標準UNIX也開始
用vi了.

1.1 - 關於vi有什麼重大的交易嗎? 爲什麼大家都用它? 更進一步說,爲什麼我要用它?
vi是UNIX下面的缺省編輯器, 因此幾乎近來所有的UNIX都捆綁了vi(近來是指1984年左右).
這意味着無論何時你跨平臺使用某種UNIX,你都知道在你指尖下面有一個強力的編輯器.爲什麼
不是別的呢? vi是個強大的編輯器.同樣,一旦你瞭解了vi,你就能很快的編輯你的文件,因爲它
非常能節省你的敲鍵次數. 由於它在插入和命令兩種情況下使用不同的模式,它比大多數的不
基於這種模式的編輯器要快. 而且,vi非常小(我機器上面的版本只有200K).還有,vi幾乎能做
任何事,只要你知道如何使它做你想做的事.

1.2 - 噢! 這聽起來不錯! 有沒有理由不用vi?
有. 有一個非常好的理由: vi稍微有些難學, 如果你開始學的話,vi又慢又讓人痛苦,
當然,一旦你學會了, vi就快多了. 但是學習的過程很慢. 有人曾經問我, 如果vi是個比較
易學的編輯器, 它是否直觀(intuitive)呢? 我一般這樣回答:"是的,我們有些人是這樣認爲.
但是大多數人認爲我們瘋了."

1.3 - vi能在多少不同的操作系統下面運行?
UNIX. 就是它. 儘管如此,還是有很多vi的變種運行在不同的操作系統上. 我就在以下一些
操作系統上用過vi: UNIX, DOS, OS/2, MAC SYSTEM 7.(後面有一個有關細節的列表)

1.4 - 好吧, 你說服了我. 我決定開始使用vi. 我該從哪兒開始?
好吧, 狡猾的傢伙. 關於vi有很多很好的書:大多數講UNIX的書至少有一章給了vi,而且
有不少是專門講vi的書.我沒有什麼偏愛. 所以你最好是問問你們那兒的vi高手們他們是從
哪兒學來的. 還有,到處試. 用vi打開一個不重要的文檔(你的論文不象是個學vi的好實驗品),
然後再到處試. 我無法想象有人學習vi卻不花相當多的時間去到處試試. 記住:如果你有些
地方不明白了, 只要敲兩次<Esc>鍵,你就又回到命令模式下了.
我要提到的一點是,我想在這裏提比較合適,就是如果要成爲系統管理員或者其他對UNIX配置
做什麼修改的話,最好是學學ed或者ex,因爲有些版本的UNIX沒有把vi放在根分區裏面,這樣你
就可能無計可施了. ed是個不錯的選擇.

1.5 - vi有其他一些可用的變種嗎?
只能列出一部分:STvi (STevie), elvis, vile, vim, 和nvi, xvi.
elvis適用於:Amiga, DOS, OS/2, Unix, VMS, Atari.
STevie適用於: Atari ST, DOS, Unix, Mac System 7.
Mac System 7可以在很多info-mac的鏡象站點獲取,在/info-mac/text下.
(例如ftp.hawaii.edu)
nvi是將和BSD 4.4捆綁在一起的vi.
vim適用於: Amiga, DOS, Mac System 7, Unix.
Amiga, DOS,和源碼可以在以下站點換取:ftp.fu-berlin.de /misc/editors/vim
Mac System 7可以在很多info-mac的鏡象站點獲取,在/info-mac/text下.
(例如ftp.hawaii.edu)
vile適用於: DOS, OS/2, Unix, VMS.
xvi適用於: DOS, Unix.
vi的變種之間很有很多差異.很多都改進了vi,大多數都可以使用在這個文檔
種列出的命令,但是有一些不同的地方.更進一步的細節,你可以參考這些變種
附帶的相應的文檔.

2.0 - vi入門
對vi的初學者來說,有些基本的提示.第一,任何時候,手頭都要有一份命令摘要.
我們將在後面給出一個快速參考/命令摘要. 第二, 找一本vi方面的比較好的書.
這個文檔不是學vi的最佳途徑(最起碼現在還不是),我不敢保證這個文檔能教會一個
對vi一無所知的人, 而很多書已經做到了這一點. 但是,我們這裏還是給出了不少
提示. 對選擇書籍來說,有一個標準的原則:買之前一定要仔細閱讀. 要了解這本書
對你是否有意義.確信它能在你練習vi的時候有用. 和其他的書做個比較 -- 不管怎樣,
vi可能讓你感到非常莫名其妙, 而且你要確信這麼一點:是書讓你糊塗,而不是
你低估了學vi的難度.
還有, 找一些諸如"學vi"(vilearn),"vi嚮導"(vitutor)之類的軟件來幫助你掌握
vi的基本知識.

2.1 - 有什麼遊戲幫助我們學習vi嗎?
這似乎很無聊, 但是事實上UNIX系統裏面有不少遊戲可以幫助你學習使用vi.這些幫助
主要是一些基本知識. 雖然我還不知道有哪個遊戲可以幫你學習vi的所有命令, 但我
確實知道有一些可以幫助你學習使用 hjkl來移動光標. NetHack,一個類Rogue的遊戲,
就對這非常有幫助. 而且它是一個很大的遊戲,能玩很長一段時間. 我沒有貶低其他遊戲
的意思,這些遊戲是: rogue, moria, omega, worm, snake.

2.2 - 命令模式和插入模式有什麼區別?
vi將命令模式和插入模式區分開來,這經常被認爲是vi的一個大問題,但往往這也被認爲是
vi的優勢所在. 理解其中的區別是掌握vi的關鍵.vi啓動時,開始處於命令模式;在這種模式
下,我們可以在文件中到處移動,改變文本的某個特定區域, 剪切, 複製和粘貼文本,還有更
多. 插入模式是指用戶可以真正插入文本.換句話說,命令模式是用來在文件中移動,而插入
模式是用來在文件中鍵入文本.
有些命令,例如: a, i, c, C, O, o和其他一些可以從命令模式切換到插入模式.
<Esc>鍵或者^C(CRTL+C)可以脫離插入模式而返回到命令模式.
你要適應這種差別. 它使得vi區別於其他的編輯器. 它也使你能在你的手不離開標準
鍵盤做很多事情.

2.3 - 等等,我的鍵盤沒有<Esc>鍵,我該怎麼辦?
試試敲 ^[(CTRL+[). 如果你的鍵盤有一個<Meta>鍵,再試試它.如果還不行,再試試^3.

2.4 - 那些~s是什麼東西?
它們僅僅是用來讓你知道你的文檔末尾在哪兒.實際上它們並不在你的文檔裏面,所以
你用不着擔心它們.

2.5 - 我無法習慣用 hjkl, 你有什麼建議嗎?
首先,如果你的終端設置正確而且你連接的也沒有問題的話,你可以使用箭頭鍵.但是,
如果你認爲你要經常使用vi,那麼最好是習慣使用 hjkl,因爲它們敲起來更快. 而且,
有時候連接出問題了,使得ESC序列都可能丟失了.(這樣你可能就無法使用箭頭鍵了--譯註)

2.6 - 我如何才能不存盤就退出?
:q!可以做到這一點. 如果vi看起來凍住了,確信你沒有錯敲了個 ^S. 敲^Q可以解開^S.

2.7 - 我怎樣插入一個文件?
:r <文件名>
例如,要插入文件/etc/motd, 可以敲 :r /etc/motd.
這將把文件插入到光標處.如果你在r前面指定了一個數字,那麼這條命令將把文件插入
到那個位置.

2.8 - 我怎樣查找文本?
/<文本>將向前查找, ?<文本>將向後查找. ??或者//將重複上次查找. 在UNIX下,這已經
是個可愛的標準用法了. 而且, 在vi中, n將查找文本下一次的出現位置. N重複上次查找,
不過逆轉了查找的方向. 在查找中可以使用規範式.

2.9 - 我怎樣搜索一個控制序列?
/^V^<序列>
^V會告訴vi照字面理解下一個字符,不要把它看作是一條命令.

2.10 - 我怎樣重新格式化文本?
如果你的計算機有一個名叫fmt的程序, 你要做的僅僅是在命令模式下面敲!}fmt(記住,
不要在前面加icon_smile.gif. 這可以重新格式化你的文件,從光標所在的位置一直到當前段落的結尾.
如果你的機器裏面沒有fmt這個程序, 你就得去找個類似的軟件了(我記得在公共域裏面有
不少這樣的程序,但是我對此瞭解不多)

2.11 - 我怎樣複製文本?
這有點複雜.把這節拿出來,多看幾遍;還有,一定要多做實驗.
"<字母>yy可以把一行文本拷貝到寄存器中(這裏的寄存器是vi的術語,指可以存放剪切和
拷貝下來的東西的地方), <字母>裏面的字母必須是a到z之間的一個. "<字母>dd可以把一行
剪切下來放到寄存器裏面. 你可以在yy或者dd前面用數字指明要拷貝或者剪切的行數.如果
<字母>中的字母是大寫的話,意味着把文本插入到寄存器中已有的文本之前.
"<字母>p把文本插入到光標之後,"<字母>P把文本插入到光標之前.如果寄存器中含有某
一行的開頭或結尾,這一行將會被放到另一合適的行上. Y是yy的快捷方式. 還有, y$, yH,
yM,等等,都是可以用的.d命令也是一樣的.如果要快速的剪切和粘貼, 你就無須指定寄存器
了.如果這樣的話,你就不能往寄存器裏面添加文本了.而且只要有一個刪除命令的話,寄存器
中的東西就沒有了(包括x命令).
舉例來說,如果要移動上一段的話,你可以把光標移到段落的開頭,敲"a13dd,再把光標移到
你想要放文本的地方,敲"ap,就可以把那段文本放到光標所在的行後面.
現在,大概你想要剪切和粘貼文本到不是行末尾的區域去.我們來看如何做到這一點:我們
可以使用 m<字母> 命令來標記一個區域,這個字母可以和剪切/粘貼寄存器的字母相同,因爲
它們是保存在內存中的不同位置. 然後,敲"<寄存器>`<字母>[yy或者dd], 這裏的寄存器就是
要保存文本的那個寄存器,<字母>是用來標記的,yy和dd是你的操作.

2.12 - 啊! 我剛纔敲了一個dG,然後我的論文就沒有了! 我該怎麼辦?
(或者,我剛纔犯了個錯誤,我該怎麼辦?)
u可以撤消你剛纔的操作.U可以撤消你對當前行的修改(當然,一行對於一篇論文來說當然
很不夠了). :e!可以不保存修改而重新把你的文件調進來. 還有,你刪除的文本都保存在從
0到9編號的寄存器裏.所以,"<n>p就可以把上第n次的刪除文本粘貼出來.你可以按如下的
方法迅速地查看所有刪除的文本. 先試一個,不對的話,敲u,再試下一個.(爲加速這個過程,
這時vi中的.命令和通常的用法不一樣了.它不是重複上次操作,而是試下一個寄存器,這樣
你要做的無非就是: "1p u . u .,直到你撤消了你想撤消的刪除操作)

2.13 - 我正在寫我的論文,被告知我必須將每一節都放在不同的文件裏,我該怎麼辦?
:[m],[n]w <文件名>可以將從第m行到第n行之間的文本保存到<文件名>所指定的文件中.
這種行序號方法幾乎在所有的:命令下都可以使用. 如果你用命令:[m],[n] w >><文件名>,
這些文本將添加到文件的後面.

2.14 - 所有的:命令都是怎樣處理的?
:後面的命令都是從ex編輯器裏面過來的. 這就給vi加入了很多靈活性,也使vi功能更強
大. 例如, 有很多的方法可以用來查找和替換,它們有很多的類似地方(事實上,它們在某種
意義上說都是一樣的)


3.0 - 怎樣查找和替換?
有很多方法. 最簡單的是:
:s/old/new/g, 但是,這僅對當前行起作用..., 所以,我們用
:%s/old/new/g, 更一般的,我們還可以用
:[範圍]s/old/new/[cg],這裏,[範圍]是任意的行範圍,包括行號,$(文件末尾),.(當前行),
%(當前文件),或者兩個行號之間加個破折號(或者可以這樣: .,+5,這表示下面5行).[cgi]是
c,g,i中間的一個或者什麼也沒有.c告訴vi每次替換的時候要給提示,g是說對所有一行中出現
的地方都做替換.i則是指在查找時不區分大小寫.如果最後一個斜槓(/)後面沒有東西的話,那
麼vi只替換在行中第一次匹配的地方.
我比較喜歡這樣做:
:g/foobar/s/bar/baz/g, 這個命令首先搜尋foobar,然後把它變成foobaz. 它沒有改變
jailbars, 而其他的一些命令可能會改變jailbars. 這是我的方法,但是可能比較難記.
當然,你還可以在查找的的時候使用正規式,以及在替換文本的時候使用其他一些命令.如果
你在正規式裏用(和)來剝離一個序列的話,你會發現你可以做很多好玩的事情.

例如:
:g/(foo)(bar)/s/2/1baz/g 將foobar替換成foobaz
還有一些特殊的序列:
& 所有查找時匹配到的東西
[1-9] 1到9號用(和)括起來的東西
u 下一個字符將被變成大寫.
U 以後的字符都變成大寫,直到遇到e或E
l 下一個字符將被變成小寫.
L 以後的字符都變成大寫,直到遇到e或E
[Ee] 更改大小寫的選擇區域的終點

3.1 - 我怎樣在vi中運行一個程序?
:!命令 可以在vi中運行程序. :sh會啓動一個交互式的外殼(SHELL).在這個外殼
裏面, 如果你願意,你還可以再次運行vi. 當你在編輯Makefiles和配置文件來編譯
某個程序的時候,這可能比較有用. 這比:e優越之處在於它無須保存文件,而且如果
你退出外殼的時候,vi還回到原來的地方.(當然,我還是建議你先保存一下文件)

3.2 - 啊! 我正在寫我的論文, 系統崩潰了! 怎麼辦?
不要怕! 你會收到一封電子郵件,裏面就是你的論文.敲入vi -r <文件名>
(這個文件名就是系統崩潰時你正在編輯的文件)你就可以恢復出你的論文來.只敲
vi -r將把所有可能恢復的文件都列出來.

3.3 - 有沒有使vi對程序員更友好的竅門?
:set ai可以讓vi自動對齊.
:set sw=#,#是移動的寬度(shiftwidth),或者說TAB鍵的寬度(tabwidth);你可以
用<<或者>>命令來左移或右移某一行. 還有, 你可以使用 <%或>%來將{,(或[等符號
括起來的文本都左移或右移;這時候,你必須把光標放在這些符號({,(或[)上面.
:set sm會在你敲},]或)顯示出對應匹配的{,[或(來.
:set lisp會對lisp編程有些幫助. ()被移到s表達式(s-expressions)外面,如果
原子(atoms)沒有停止則{}將被移走.

3.4 - 宏 -- 我怎樣寫宏?
:map <lhs> <rhs>, 其中<lhs>最多10個字符,<rhs>最多100個字符. 以後,如果
你敲了<lhs>,vi就會用<rhs>來取代它.所有的宏都是在命令模式下開始的,但是可以
在你想在的模式下終止. 記住,在你想用的控制字符前面加上^V.
:unmap <lhs>將刪除這個宏. :map!<lhs> <rhs> 使得<lhs>將<rhs>插入到文檔
中去.

3.5 - 我怎樣將一個功能鍵定義成一個宏?
如果<lhs>是#n,n是0-9之間的一個數,那麼這個宏就映射成某一個功能鍵了.(你
可以試一下F1-F10之間的鍵--譯者)

3.6 - 有沒有辦法縮寫文本?
當然了. 這可是vi呀,它能做任何事情!
:ab email [email protected] 可以在你敲完email後,把那個沒有縮寫
的文本插入到文件中. :una email取消縮寫.

3.7 - 我怎樣在當前文檔中做拼寫檢查?
這兒有一個宏可以做到這一點. 這些應該放在你的.exrc文件中(後面我們將對.exrc
進一步討論). 它是一個相當簡單的宏. 它僅僅是調用ispell來處理當前文件.當然,你
的系統裏面一定得有ispell這個程序. 使用它的時候,只需要敲個V鍵就行了(因爲vi並
沒有用V,所以V是一個比較合適的鍵)

map V :w^M:!ispell % ^M:e!^M^M

第二個^M使你在拼寫檢查完之後無須敲回車就可以到vi中.
(譯註, 在我的系統裏,沒有ispell,只有spell,我用它替換了ispell,工作的不錯;還有,
^M不是兩個字符,而是一個字符,通過^V^M敲進去的;另外,我個人認爲第二個^M還是不要
的好,因爲直接回到vi後你就無法看到拼寫檢查的結果了)

3.8 - 我手頭有一個硬拷貝的終端, 我還能用vi嗎?
好了,好了. 我並認爲有人會真的問這個問題.這個問題太偏了,我們大可不必理
它.(而且,它回答了一個非常普通的問題)
vi啓動的時候處於一種特殊的模式下面,叫做"開放模式"; 在這種狀態下,事情或多或少
的有些不同. 刪除的字符在你面前顯示成一些',vi會認爲你的終端窗口只有一行. ^r
可以把當前行重新輸出. z則把當前行周圍的窗口重畫一遍.

3.9 - 好了,是不是處在開放模式下的原因呀?! 但是我現在沒有用硬拷貝終端,它還是在開放
模式呀?
這兒的問題就是vi沒有認出你用的終端的類型. 於是它假定你有的是個最爛的終端,
所以它決定依然處在開放模式下.這似乎沒什麼用處.因爲沒有多少人喜歡開放模式,但是開放
模式還是需要知道你的終端的一些最起碼的信息的.
現在,我們來看如何解決這個問題.我們有可能把它分成幾種特殊的情形,但是,一般情況下,
這並沒有用處. 如果你直到你的終端的類型, 你可以在UNIX提示符下面設置終端類型(在CSH
及其變種下面,使用命令setenv TERM <終端類型>;在SH及其變種下面,使用命令TERM=<終端類型>;
export TERM)
最好你能把上面的命令寫在.profile文件或者.cshrc文件裏面,這樣你一登錄它就自動地給
你設置好了.(當然,你應該知道如何使用ed,或者你能在UNIX提示符下面設置好終端類型以便能
使用vi, 這樣你纔有可能去編輯這些文件)
如果你確實不知道你地終端類型,試一試vt100.現在大多數地終端或者終端仿真器都能仿真
vt100. 如果這還不能生效的話,你只好去找個高手來幫你了.

4.0 - vi檔案的在線幫助在哪兒?
有一個vi的FAQ,其中列出了vi檔案的所有在線文件. 同時它還列出了這些文檔
的鏡象站點. 最主要的一個地址是alf.uib.no,但是這些文檔在很多很多地地方
都保存着. vi-archive faq把它們都給列出來了.你在下載這些文件之前一定要
覈對一下這個FAQ.因爲很有可能有一個站點比去挪威的站點更近更快些.
一個鏡象站點是cs.uwp.edu/pub/vi, 另一個是monu6.cc.monash.edu.au/pub/Vi,
這些站點上有很多有關vi的文件,還有一些vi的變種版本;當然,UCB版本的vi是
肯定有的, 還有許多的宏.

5.0 - 好玩的vi訣竅,好玩的宏
這一節主要講述一些無聊的訣竅和一些無聊的宏.事實上,任何vi的訣竅和宏我們
都歡迎,只要它們不是過分冗長. 如果有人向我建議而我也認爲確實值得加的話,
我會考慮加進去的.

5.1 - 好玩的vi訣竅
xp 刪除光標下的字符,再把粘貼到後面去.換句話說,它交換了當前兩個字符
的位置.
ddp 和xp類似,不過是交換兩行的位置.
uu 撤消和重複上次所做的修改.(這可以使你不改變什麼東西就可以到你上次所
做的修改處)

5.2 - 好玩的宏
和垂直上方的字符交換位置
map * kxjphxkP

折行
map g $80|F r
(譯註,我對這條宏表示疑問!)

改變大多數單詞的大小寫
map v ywmno:s/./~/g
(譯註,這條好象也不大對!)

在當前的單詞周圍加上`和'
map *` i`'
在當前的單詞周圍加上'和'
map *' i''
在當前的單詞周圍加上"和"
map *" i""
(這幾條也太無聊了吧--譯註)
在當前的單詞周圍加上``和``
map! `` `'
(咦,好象又有問題?--譯註)

從光標處把當前行分開,在下一行開頭加上一個>號(例如,引用USENET).如果加上了單詞的折行
功能那麼最後一個單詞可能被折在第一行.
map g may0O`ay$:s/./ /g
(不對吧--譯註)

插入一個字符
map g i$^[r

6.0 - 依字母順序的vi快速參考
... 是指有些東西需要在命令之前或之後指明.這通常是說光標的移動鍵
(h,j,k,l,w,b等等)或者是指行號.
# (這裏#代表一個數字) 執行n次後面的命令...
: 進入ex模式
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一節
[[ 上一節
0 行的開頭
$ 行的末尾
^ 行的第一個非空白字符
+ 下一行的開頭
- 上一行的開頭
(空格) 下一個字符
(回車) 下一行
/ 向前搜索
? 向後搜索
% 查找當前小(中,大)括號的匹配字符
, 逆向重複上一個f,F,t或T操作
; 重複上一個f,F,t或T操作
. 重複上一個操作
` 轉到標記處
' 轉到標記所在行的開頭
`` 查找前回到上一個做標記的地方
'' 查找前回到上一個做標記所在行的開頭
~ 切換字符的大小寫
" 保存到寄存器中
!! 重複上一次SHELL命令
! 把後面的文本送給命令, 取代輸出(例如, !}fmt把當前的段落
送給命令fmt處理,然後用fmt返回的東西替換輸出.)
>> 右移當前段落一個移動寬度(shiftwidth)
<< 左移當前段落一個移動寬度(shiftwidth)
>% 從當前到匹配小(中,大)括號之間的文本右移
<% 從當前到匹配小(中,大)括號之間的文本左移
(似乎漏了一個符號|, 移動到某一列----譯註)
a 在當前位置之後添加
A 在當前行的末尾添加
^a 沒有使用
b 上一個單詞的開頭
B 上一個單詞的開頭,忽略標點符號
^b 上移一屏
c 覆蓋...
C 覆蓋到行末尾
^c 終止插入模式,在命令模式沒有用
d 刪除...
D 刪除到行末尾
^d 下移半屏,如果在插入模式下則移到上一個移動寬度(ShiftTab)處
e 單詞的末尾
E 單詞的末尾,忽略標點符號
^e 屏幕下卷一行
f 查找...
F 向後查找...
^f 下移一屏
g 未用
G ...跳至[缺省是到文件末尾]
^g 顯示狀態欄
h 左移
H 屏幕上的第一行
^h 在插入模式下是退格,命令模式下是左移
i 在當前的位置前面插入
I 在本行的第一個非空白字符前面插入
^i 插入模式下是製表鍵,命令模式下未用
j 下移
J 把下一行合併到本行
^j 命令模式下是下移,插入模式下是建一個新行
k 上移
K 未用
^k 未用
l 右移
L 屏幕中的最後一行
^l 重繪屏幕
m 把當前位置標記到寄存器中
M 屏幕的中間行
^m 回車
n 重複上次查找
N 逆向重複上次查找
^n 命令模式下是下移
o 在當前行的下面建一個新行
O 在當前行的上面建一個新行
^o 未用
p 在當前行的下面粘貼
(譯註--應爲在當前位置的後面粘貼)
P 在當前行的上面粘貼
(譯註--應爲在當前位置的前面粘貼)
^p 命令模式下是上移
q 未用
Q 退出並且啓動ex
^q 未用
r 覆蓋當前的字符
R 在插入模式下一直覆蓋字符
^r 在命令模式下面重繪屏幕
s 替換
S 替換整行
t 到...
T 向後到...
^t 移到下一個移動寬度(shifttab)處
u 撤消上一次操作
U 撤消對本行的所有修改
^u 上移半屏
v 未用
V 未用
^v 未用
w 下一個單詞的開頭
W 下一個單詞的開頭,忽略標點符號
^w 命令模式下未用,在插入模式下是到上一個單詞的開頭處
x 刪除當前字符
X 刪除前一個字符
^x 未用
y 複製...
Y 複製整行
^y 屏幕上卷一行
z 重新配置當前行周圍的屏幕
ZZ 保存之後退出
^z 未用
(譯註--在命令模式下,^z執行了UNIX暫停操作)

6.1 - 命令模式的輸入選項(:命令)
(注: 這不是一個規範的列表,, 我只是列出了一些最重要的命令)
:r <文件> 把<文件>讀入到當前文檔
:r !<命令> 把<命令>的輸出插入到當前文本中
:nr <文件> 把<文件>插入到第n行
:!<命令> 運行<命令>,然後返回
:sh 轉到SHELL
:so <文件> 讀取<文件>,再執行文件裏面的命令
(譯註--文件中的命令應該都是一些ex命令)
icon_mad.gif 保存之後退出
:wq 保存之後退出
:l1,l2w <文件>把第l1和第l2行之間的文本寫到<文件>中去,如果沒有指定<文件>,
vi就假定是當前文件,如果沒有指定l1,l2,就假定是整個文件(就成了:w)
:w >> <文件> 添加到<文件>末尾. 也可以使用行號
:w! 覆蓋當前文件
:q 退出
:q! 不存盤就退出
:e <文件> 不離開vi編輯<文件>
:e! 重新編輯當前文件,忽略所有的修改
:n 編輯下一個文件
:e +n <文件> 從第n行開始編輯<文件>,如果超過了末尾,就從末尾開始編輯
:e# 編輯替換文件(如果使用了命令:e<文件>,替換文件就指的是原始文件)
:args 顯示所有要編輯的文件
:rew 重新回到第一個編輯的文檔
:map m n 創建一個宏(使 m 做 n)
:map! m n 創建一個插入模式的宏(使 m 做 n)
:unmap m 刪除宏m
:unmap! m 刪除插入模式的宏m
:ab <1> <2> 縮寫,敲<1>的時候用<2>取代
:unab <1> 取消縮寫<1>
:set <選項> 設置<選項>...

6.2 - 設置選項(set)
可以使用括號中的縮寫形式. 語法:
:set <選項> <參數> (如果需要參數的話)
也可以在一行中指定多個選項
:set <選項>? 顯示出當前這個選項的參數值
:set all 則顯示所有的選項值
對那些無須參數的選項來說,使用:set no<選項>就可以把它給關了


選項: 缺省值: 含義:
autoindent (ai) noai 使新行自動縮進,和上(下)行的位置對齊
autoprint (ap) ap 每條命令之後都顯示出修改之處
autowrite (aw) noaw 在:n,:!命令之前都自動保存文件
beautify (bf) nobf 在輸入的時候忽略所有的控制字符
(除了製表鍵(tab),換行(newline),進紙(formfeed))
directory= (dir=) /tmp 存放緩衝區的目錄名
edcompatible noedcompatible 在替換的時候使用類ed的用法
errorbells (eb) errorbells 出錯的時候響鈴
exrc (ex) noexrc 允許在主目錄(home)外面之外放.exrc文件
hardtabs= (ht=) 8 設置硬製表的邊界
ignore case (ic) noic 正規式裏忽略大小寫
lisp nolisp 打開lisp模式
list nolist 顯示所有的製表鍵和行的結尾
magic magic 可以使用更多的正規表達式
mesg mesg 允許向終端發送消息
number (nu) nonumber 顯示行號
open open 允許開放和可視化
optimize (opt) optimize 優化吞吐量,打印時不發回車
paragraphs= (para=) IPLPPPQPPLIbp 設置{ & }的分界符
prompt prompt 命令模式下的輸入給出:的提示符
readonly (ro) noro 除非用!號否則不準保存文件
redraw noredraw 當編輯的時候重繪屏幕
remap remap 允許宏指向其他的宏
report= 5 如果影響的行數>這個數的話就報告
scroll 1/2 window 下卷屏幕時滾動屏幕的數目,
同樣這也是z命令輸出的行數(z 輸出2倍滾屏的大小)
sections= SHNHH HU 定義節的末尾(當使用命令[[ 和 ]] 時)
shell= (sh=) /bin/sh 缺省的SHELL,如果設置了環境變量SHELL的話,就使用變量
shiftwidth= (sw=) 8 當使用移動(shift)命令時移動的字符數
showmatch (sm) nosm 顯示{, }, (, ), [, 或者 ] 的匹配情況
showmode noshowmode 顯示你處在什麼模式下面
slowopen (slow) 插入之後不要立刻更新顯示
tabstop= (ts=) 8 設置製表停止位(tabstop)的長度
taglength= (tl=) 0 重要標記的字符個數(0表示所有的字符)
tags= tag, /usr/lib/tags 定義包含標記的文件路徑
term= 設置終端類型
terse noterse 顯示簡短的錯誤信息
timeout (to) timeout 一秒鐘後鍵盤映射超時
ttytype= 設置終端類型
warn warn 顯示"No write since last change"信息
window= (w=) 可視模式下窗口的行數
wrapmargin= (wm=) 0 右邊距,大於0的話最右邊的單詞將折行,留出n個空白位置
wrapscan (ws) ws 查找到文件尾後再重頭開始
writeany (wa) nowa 可以保存到任意一個文件去

(譯註--這些選項在各種vi版本中都基本上大同小異,以SunOS帶的vi爲例,它沒有這裏列出來的open選項,
scroll的參數值也不同,還多出來一些選項,如flash,modelines,novice,tagstack等等)

7.0 - 建立 .exrc文件
所有命令輸入模式下的命令(即 :命令)都可以在.exrc文件中使用,在.exrc中的命令在啓動vi的時候自動
加載.尤其是源命令(so),縮寫(ab)和宏定義都可以用.在.exrc中不允許有空行.以"開頭的一行vi將把它當成
註釋.

7.1 - .exrc文件的樣本
以下的.exrc文件是一個實際的例子, 我自己的. 因此,它就沒有有些人想象的那樣設置很多的選項.即便
如此,它還是給出一些基本的概念,而且它也相當易懂.

首先,記住你無須在命令前面加:號,因爲它是缺省就添加了的.

"譯註--以下是.exrc文件中的內容,爲真實起見,而且事實上也相當淺顯,我沒有翻譯其中的註釋
" set wordwrap 9 characters from the right
set wm=9
" show matching parenthesis. When },), or ] is hit, show the opening
" {,(, or [ that matches it.
set sm
" set the shell to be /usr/local/bin/tcsh
set sh=/usr/local/bin/tcsh
" a few abbreviations
" this makes -l automatically become -Larry, and zidlle to be my
" name and email address.
ab zidlle E. Larry Lidz - [email protected]
ab -l -Larry
" uppercase V will run ispell -x (-x tells it not to save backups) on current
" file
map V :w
" K will center the line... (this doesn't work on SunOS -- ??)
map K :s/^[ ]*//
" v will reformat the current paragraph
map v {0!}fmt
" q runs a program to lock my terminal
map q :!lock2
" Splits a line in two at current cursor location, puts a > at the
"beginning of the line - useful for Usenet/email
map g may0O`ay$:s/./ /g

8.0 - vi的bug
我很想說vi中沒有bug,但很不幸,它不是這樣的. 這些bug都是初始版本vi中的,
它其他的一些變種就不一定有.
例如 _宏有時就運行的有問題.

9.0 - 術語表
如果有人提議說某個術語他不明白,我們將更新這個術語表.如果你有什麼建議,
請一定要告訴我.

命令模式 command mode

命令模式是說我們在此模式下面可以向vi發命令(包括光標移動,編輯命令等等)

ed
UNIX裏面一個非可視化的編輯器

<Esc>
escape鍵. 鍵盤上標記爲escape(ESC)的一個鍵.有時候^[可以起到相同的作用.
如果沒有escape鍵,你可以試試Meta鍵
ex
UNIX下的一個編輯器.所有vi中的:命令都是送給它處理的

插入模式 insert mode
插入模式是指我們可以在此模式下面鍵入文本.

宏 macro
宏是一些鍵的組合起來的快捷方式.例如,某個宏允許我們只敲一個鍵就可以執行
好幾個不同的命令.

開放模式 open mode
開始模式是說vi啓動的時候不能確定你的終端類型,或者它肯定你的是一個硬的或
電子管的終端

正規表達式 regular expressions (RegEx)
正規表達式,通常縮寫爲"RegEx",是一些關鍵字的集合,它允許用戶在查找的時候有更大的
控制力度. RegEx是在UNIX下面用的,但是在很多程序中也用到了它.

sed
流-行式的編輯器.它沒有界面,所有命令都是通過命令行的形式給出的.

vi
就是這個FAQ討論的編輯器


按鍵功能圖示:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章