home products tech support contact us

 Linux 技術支援    ⇒   基礎篇    進階篇    補腦篇    指令索引    中⇒ENG
版權所有, 引用請註明出處

 VI 魔鬼的編輯器

1.0 認識 vi
       vi 基本操作
       vi 的操作模式
1.1 一般模式
       方向鍵
       快速移動游標
       書籤
       捲軸移動
       取代一個字元
       刪除
       連接
       排縮
       搜尋
       複製/貼上
       愎原
       重複上一個動作
       存檔後離開 vi
1.2 插入模式
1.3 命令模式
       簡介 ex 行編輯器
           行編輯
           刪除、複製和搬移
           存檔、離開
           搜尋
           取代
           執行 Shell 指令
           刪除書籤
1.4 多檔編輯
       載入檔案
       切換編輯檔案
1.5 區塊編輯
1.6 分割視窗
1.7 環境設定
1.8 輸入控制字元和任意字元

1.0 認識 vi

從沒有任何軟體會像 UNIX/Linux 的 vi (發音為 vee eye)文字編輯器那麼極端,討厭他的人說 vi 有「極其惡毒的介面」、「殺死新手的毒藥」、「魔鬼的編輯器」。這麼一個被大家罵到臭頭的東東擁護者和粉絲還不少,直是奇葩。

UNUX/Linux 的使用者使用〝極其惡毒的介面〞的 vi 幾乎是其他較直覺和友善編輯器 (如 Emacs 或 pico、jed、nano)的好幾倍。同時 vi 也是駭客 (hacker) 最喜愛用的編輯器,江湖盛傳光看用何種編輯器就知道此人的〝級數〞。

且雖 Unix/Linux 有許多友善的編輯器,但卻不是每一 Linux 發行版或 UNIX 都有收錄,唯一被公認 Linux/UNIX〝御用〞的編輯器且都會收錄就是 vi。且許多的指令如 visudovipwvigredquota 都預設用 vi 來開啟。

所以不管 user 喜不喜歡 vi 但至少要會 vi 的基本操作(開檔/存檔/移動游標/簡易的修改等操作),才不會在需要時在別的 Linux/UNIX 系統上一時找不到自己熟悉的編輯器,但一定有 vi。

要知道 vi 為什對新手來講那麼〝惡毒〞,可要追溯一下 vi 的歷史。 vi 最早開始於 1976 ,由矽谷傳奇人物 Bill Joy 開發.後隨 BSD 於 1978 釋出,因之前的電腦要編輯文件一次只能編輯一行,此種程式叫〝行編輯器〞(Line Editor) 如 le edex。 因在當時是用類似打字機的〝電傳打字機〞(Teleprinter)和電腦互動。故輸入、編輯、和顯示不但不同步且要下指令,用起來很卡。而 vi 改良了行編輯器 ex 加入了 Visual mode (視覺模式)劃時代利用剛發明的〝終端機〞(Computer terminal)來同步輸入和顯示且用全螢幕來編輯而〝驚為天人〞。但 vi 傳承了ex 要下指令才能編輯的〝惡毒〞界面。

vi 要背指令才會使用和編輯,真是「魔鬼的編輯器」,但詭異的是有一堆相容 vi 的衍生產品也爭者搶〝魔位〞,比較有名的有 vim、 elvis、nvim、vile 等。

vi 是〝Visual Interface〞(視覺界面)的縮寫,相對於行編輯器,vi 的螢幕編輯器(screen editor)以當時的眼光來看已很〝高科技〞,因當時不但沒有圖形操作界面,且也因硬體的種種限制也沒下拉功能表(pull down menu),故只能〝返璞歸真〞下指令的方式來編輯。

返璞歸真的優點是所佔用的軟硬體資源很少,且利用指令的方式一但熟悉編輯起來比用滑鼠或下拉功能表快。個人認為只要熟悉還蠻好用的,只是學習曲線稍微陡一點,不然也不會成為 Linux/UNIX 的〝御用〞編輯器。且可〝萬法歸宗〞,任何作業系統如 DOS/Windows/Mac OS/Unix/Linux 都有相對應版本的 vi 可用[註 1.0],就不用煩惱在不同的作業系統要學習不同的編輯器。

大部份的 Linux 發行版(如 Fedora、GentOS、Redhat) 都用 vim 取代 vi(vi 可能為 vim 的指令別名),vim 為〝VI iMproved〞的縮寫,(vi 改良版),增加了許多功能;有些的Linux 發行版可能用 elvis 或 nvis 來取代 vi ,操作大同小異。純種的 vi 目前已很少人用,故後續的說明以 vim 為基準,vi 指的就是 vim,不再區別。

^ back on top ^

vi 的基本操作
第一次使用 vi (vim) 應會感覺和現今熟悉的任何文字編輯器很不一樣,操作很不直覺和另類很有 Unix 的風格,因都是指令。但一旦熟悉了會發現比大多數的文字編輯器都便利。在介紹之前,我們先製造個練習檔〝vi_practice〞,製造練習檔操作如下:
$ cat -n /etc/man_db.conf | col -x > vi_practice
(不同的發行版 man 設定檔名稱會有不同,例如〝/etc/man.config〞,可用 man man 得知 )。

上例中 cat -n 是為了列出行號方便觀察游標的移動或其他的操作,而檔案〝/etc/man.db.conf〞為 manpage 的設定檔,經管線〝|〞到過濾程式col 把 tab 轉為空白字元再重定向存檔為〝vi_practice〞。來當練習檔。

接著在文字界面下輸入 vi vi_practice(或 vim vi_practice)就進入 vi 來編輯此練習檔(而如果此檔不存在則會建立此檔,但內容是空的)。

vi 很特別一進入 vi 時,會進入〝一般模式〞(Normal mode)只能移動游標、搜尋、刪除、複製等有限的編輯動作。而如要輸入文字要按 iR 等鍵進入〝插入模式〞(Insert mode)才可輸入文字。在插入模式如要存檔、讀檔、離開 vi 等動作要再按 ESC 先回到〝一般模式〞後按 : 進入所謂的〝命令模式〞(Command-linel mode),在〝命令模式〞可執行存檔、讀檔、離開 vi 等動作或按 ESC 再回到〝一般模式〞。

也就是說 vi 以〝一般模式〞為中心,可進入〝插入模式〞或〝命令模式〞在這兩種模式要回到〝一般模式〞都是按 ESC ,其操作如下圖。

vi editor mode


進入 vi 編輯剛製造的練習檔其畫面如下:
$ vi vi_practice ↵ Enter
     1  #
     2  # Generated automatically from man.conf.in by the
     3  # configure script.
     4  #
     5  # man.conf from man-1.6e
     6  #
     7  # For more information about this file, see the man pages man(1)
     8  # and man.conf(5).
     9  #
    10  # This file is read by man to configure the default manpath (also used
    11  # when MANPATH contains an empty substring), to find out where the cat
    12  # pages corresponding to given man pages should be stored,
    13  # and to map each PATH element to a manpath element.
    14  # It may also record the pathname of the man binary. [This is unused.]
    15  # The format is:
    16  #
    17  # MANBIN                pathname
    18  # MANPATH               manpath_element [corresponding_catdir]
    19  # MANPATH_MAP           path_element    manpath_element
    20  #
    21  # If no catdir is given, it is assumed to be equal to the mandir
    22  # (so that this dir has both man1 etc. and cat1 etc. subdirs).
    23  # This is the traditional Unix setup.
    24  # Certain versions of the FSSTND recommend putting formatted versions
"vi_practice" 30L, 1745C                                      24,5          Top

其中 vi 最下列(故意以紅字標示)的地方稱〝狀態列〞,其顯示依操作的不同會顯示不同的訊息。由於一進入 vi 是處於〝一般模式〞,只能按方向鍵或 Page Up , Page Dn 等移動游標或 Delete 刪除文字,但不能插入文字。

要插入文字要按 i(insert ), R (replace)等鍵(大小寫是有區別的),此時狀態列會顯示〝-- INSERT --〞或〝-- REPLACE --〞等訊息就進入〝插入模式〞或〝取代模式〞,此時即可輸入文字修改資料(自行操作體驗一下)。

如要離開 vi,或存檔 要按 ESC 先回到〝一般模式〞(〝-- INSERT --〞或〝-- REPLACE --〞訊息會消失)再按 : 進入所謂的〝命令模式〞,此時在狀態列會顯示〝:〞後面緊接指令,如輸入〝:q!〞為不存檔離開,〝:x〞為存檔後離開或輸入〝:w FILE_NAME〞為另存新檔(FILE_NAME 為想儲存的檔名)後再入〝:q〞為離開 vi 。

有時可能只是想暫時離開 vi 執行 Linux shell 指令但並不想放棄編輯,可在命令模式下輸入〝:!COMMAND〞(COMMAND 為想要執行的 Linux 指令,如〝:!ls〞)Linux 指令處理完按 ENTER 又回到 vi 繼續編輯。

老實說,如不常編輯文字檔(如寫軟體,或用文字編輯器寫網頁等)會這些基本的操作就夠了(不用看下去了),操作 Linux 和會不會 vi 是兩回事,免得學 Linux 的興趣都被「極其惡毒介面」的 vi 磨光了,「殺死新手的毒藥」非浪得虛名。

但如常編輯文字檔就建議花個時間了解一下 vi 的進階的操作,接受「魔鬼的編輯器」的〝魔考〞,魔鬼和天使之間只有一線之隔,熟練了就是天使,不熟就是魔鬼!

^ back on top ^

vi 的操作模式
vi 的操作可很複雜,可自行定義 macro/script(巨集),可配合正規表示法 ,有自己的設定檔和指令。故本篇不可能完整的介紹,這只說明我認為常用的部份,如覺不足可參考市面上相關的書籍,如 O'Reilly Media 出版的〝Learning the vi and Vim Editors〞是我認為寫的不錯的書籍。[註 1.1]。

我敢打賭〝惡毒〞的 vi 不可能光看手冊或本章節就會使用,唯一的方法就依樣畫葫蘆照做一次和多練習.「百聞不如一見,百見不如自己做一遍!」學 vi 一定要親自操作,保證值回票價。

傳統的 vi 只有〝一般模式〞、〝插入模式〞和〝命令模式〞,而 vim 增加了〝區塊選擇模式〞(Visual Block)和〝多視窗模式〞(Multi-Winodw)等有用的功能其各模式主要的功能如下: 一般在編輯文字時都是各模式交叉使用。

^ back on top ^


1.1 一般模式

一進入 vi 就進入〝一般模式〞,按 i / o / aR 等健後狀態列會顯示〝-- INSERT --〞或〝-- REPLACE --〞等表示進入插入或取代模式。或按到 : 進入〝命令模式〞(狀態列會顯示〝:〞)記得按 ESC 回到〝一般模式〞。vi 的一般模式不能插入新的文字,但可移動游標、刪除、大小寫互換、搜尋等操作,可執行的動作如下。

方向鍵<h> <j> <k ><l>
在 vi 移動游標很特殊,其方向鍵是 h j k l (小寫的 L),為什麼那麼〝惡毒〞?原因為 Bill Joy 使用〝ADM-3A〞終端機開發出 vi,而其鍵盤並非目前所熟悉的 IBM PC 鍵盤,〝ADM-3A〞終端機的鍵盤是沒專屬的方向鍵,其左右鍵是和 h l 共用,而上下鍵和 k j 共用。其鍵盤圖如下:

ADM3A keyboard

但現在的 vi 已〝友善〞多了,除了 h j k l鍵外,IBM-PC 鍵盤專屬的方向鍵也可接受。但傳統的操作法也有好處,因一些工作站(Worksation)的鍵盤不一定有方向鍵,且 h j k l 等鍵離鍵盤的中心比較近,打起字來快很多。

另外 vi 的操作組合很有彈性,大都可接受<數字>+<按鍵> 如輸入 5 h5 為游標往左移 5 格,輸入 3 j3 為游標往下移 3 格。其他移動游標的方式如下:

快速移動游標 大部份的快速移動游標都可配合<數字>+<按鍵>的表示法,如輸入 5 w 為游標往後移 5 個字,類似的組合的例子有 4 +8 space2 e7 G3 L9 | 等很有彈性,是其他的編輯器望塵莫及的。

^ back on top ^

書籤
如果編輯的檔案很大,光有快速移動游標也有不足之處, vi 的書籤(marks)功能不管游標移到那裡都可快速回到想到達的地方,大幅增加編輯的便利性。 舉例來說,如在練習檔的第三行找個位置輸入m i (標記 mark 為〝i〞),然後在第十行輸入m j (標記 mark 為〝j〞),後不管游標移到那裡只要輸入 ` i` j 游標就會回到原標記的地方。
    1  #
    2  # Generated automatically from man.conf.in by the
    3  # configure m iscript.
    4  #
    5  # man.conf from man-1.6e
    6  #
    7  # For more information about this file, see the man pages man(1)
    8  # and man.conf(5).
    9  #
    10  # This file is read by man m j to configure the default manpath (also used
    11  # when MANPATH contains an empty substring), to find out where the cat
    12  # pages corresponding to given man pages should be stored,
以下略

書籤如要刪除要進入命令模式再用刪除書籤命令

捲軸移動 取代一個字元 取代也適用<數字>+<按鍵>,如輸入 3 r S 會一次用 3 個大寫的〝S〞取代其他的字元,而 4 ~ 會一次大小寫互換 4 個字元 。

^ back on top ^

刪除
刪除用按鍵 d 再配合 d w b $ 0 G 等鍵,〝d〞for〝delete〞(刪除);而如只刪除一個字元用按鍵 x ;〝x〞是象形就是擦掉很好記。 vi 真的很有彈性,刪除也可配合<數字>+<按鍵>的方式,如 3 x 為刪除 3 個字元, 5 d d 為刪除 5 行。

連接 不免俗 J 也可配合<數字>+<按鍵>,如 3 J 為連按三個J

排縮 搜尋 部分 Linux 發行版預設情況下 vim 會把搜尋到的字串反白顯示,有時反而防礙編輯,此時可在命令模式下輸入〝:nohlsearch〞(no hi-line search)來消除反白。

^ back on top ^

複製/貼上
vi 中的複製是用按鍵 y ;〝y〞for〝yank〞(拔) ,而貼上用按鍵 p,〝p〞for〝put〞(放)。而所複製的資料 vi 會把它存進 RAM(vi 對此術語叫〝register〞),而貼上時是把 register 的資料叫出來。但不止用按鍵 y 才可貼上,事實上刪除的資料也是放進 register,也可配合用按鍵 p來貼上。 複製配合<數字>+<按鍵>的例子如 3 y wy 3 w 為複製 3 個字, 5 y y 為複製 5 行。

愎原 重複上一個動作 存檔後離開 vi

^ back on top ^


1.2 插入模式

相較於一般模式,插入模式相對簡易多了,其主要的功能就是插入或取代之前的文字。 進入插入模式後 vi 會在最底下顯示〝-- INSERT --〞或〝-- REPLACE --〞等訊息,按ESC可回到一般模式,其有關的操作如下: 任何偛入模式所作的編輯,皆可配合一般模式的按鍵 u 來復原,或 . 來重複動作。(記得要按 ESC 才可回到一般模式),故 user 在練習時可任意的測試各功能,反正 vim 支援幾乎無限次的復原。

^ back on top ^


1.3 命令模式
vi 的命令模式主要用在讀/存檔,搜尋/取代、複製/刪除/搬移等動作。有些動作和一般模式有部分重疊,那為什麼要有命令模式呢?因 vi 是行編輯器 ex 加了 Visual Mode 功能而成頁編輯器,故遺傳了 ex 的命令操作,後面簡單的介紹一下 ex 的操作。

簡介 ex 行編輯器
ex
是很古老的編輯器,是以〝行〞(line)為編輯單位,純行編輯器如 le edex 等目前幾乎沒人用了,唯一還有人氣還在使用的可能是在 vi 中使用其 ex 的命令模式。事實上許多的 Linux 發行版, ex 是 vi 的連結檔,兩者是同一程式,vi 就是 ex 加了 Visual Mode 功能。

我們來復古稍微體驗一下 ex 的用法吧!
$ ex vi_practice↵ Enter ←用 ex 編輯練習檔,其畫面如下
Entering Ex mode. Type "visual" to go to Normal mode.
:_

如上,ex 很原始,一進去看不到要編輯的文章,只會顯示〝:〞表示等待 user 的輸入指令 + Enter (後續的說明,Enter 省略,但自行練習時不要忘了)。進入後可能會提示輸入〝visual〞或〝vi〞回到 Visual Mode (視覺界面) 回到 vi。其主要的功能如下:

^ back on top ^



 1.4 多檔編輯

有時一次可能會編輯多個檔案,vi 擁有強大的多檔案編輯能力哦,且不同檔案間的資料都可互相的複製/貼上

載入檔案
vi 有二種方式可同時開啟多個檔案,一為進入 vi 時順便載入,另一為用命令模式的指令載入。其檔案的載入都是載入〝buffer〞(記憶體)以便 vi 可快速的切換,將多個檔案載入 vi 的用法各如下:

例:進入 vi 時就順便載入多個檔案。
$ vi file1 file2 file3 ←載入 file1 file2 & file3 (如某個檔案不存在,則是建立一新的檔案)

例:先進入 vi ,再用指令〝:e FILE〞載入檔案
:e file2 ←載入 file2

有時會忘了那些檔案已被載入 vi 的 buffer ,可下指令〝:ls〞或〝:files〞即會列出所有被載入的檔案。
例:
:ls ←列出已載入的檔案,如列出的檔案中有〝%a〞表示目前正在編輯的檔案,〝#〞為上一次編輯的檔案
 1 %a    "file1"                            line 1
 2 #     "file2"                            line 0
 3       "file3"                            line 0

切換編輯檔案
如要切換要編輯的檔案,用指令〝:e FILE〞載入即可切換要編輯的檔案但還可用如下更方便的方式: 如目前的檔案有變更過但還沒存檔是不讓你切換到其他檔案,此時可用〝!〞 如〝bp!〞強迫切換。

有時檔案之間切來切去,可能會不知目前編輯的是那一個檔案,或是某個檔案已編輯完成,要退出 buffer,可用如下的指令:

^ back on top ^


1.5 區塊編輯

大部份的編輯器的操作都是以行為單位,但 vi(m) 卻有一個大部分的編輯器都沒有的〝區塊編輯〞(Visual Block)能力,(記憶中 IBM 的 PE2 也有此功能)。所謂的〝區塊編輯〞,就是可把要複製或刪除的文字以方形框起來處理。

一般模式下按 Ctrl+v ,就進入區塊編輯模式,此時螢幕左下會出現〝VISUAL BLOCK〞,按 ESC 又會回到一般模式。在區塊編輯模式下移動游標即可反白的框起文字,如下:
HAMLET:
To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
                    ↓按 <Ctrl+v>進入區塊編輯模式,移動游標即可反白的框起文字
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end
The heart-ache and the thousand natural shocks
That flesh is heir to, 'tis a consummation
Devoutly to be wish'd. To die, to sleep;
To sleep: perchance to dream: ay, there's the rub;
For in that sleep of death what dreams may come
When we have shuffled off this mortal coil,
Must give us pause: there's the respect


-- VISUAL BLOCK --                         82,39          36%

區塊編輯模式下框起文字後可按 d 將框起的文字刪除,或按 y 複製,按 p 在新游標處貼上所框起的文字。

除了按 Ctrl+v 進入區塊編輯模式外還可如下操作:

^ back on top ^


1.6 分割視窗

有時可能需在不同檔案間對照,甚至同一檔案間上下文比對,vi 的分割視窗功能可很方便的來達成。在命令模式下輸入〝:split〞或〝:sp〞即可分割視窗,如果〝:sp〞後有接檔名,則新分割視窗出現的為該檔否則為同一檔案。

如下為先用 vi 先載入一檔案後再輸入〝:sp FILE〞載入另一檔案並用分割視窗顯示。
   80 # NOCACHE keeps man from creating cache pages ("cat pages")
   81 # (generally one enables/disable cat page creation by creating/deleting
   82 # the directory they would live in - man never does mkdir)
   83 #
   84 #NOCACHE
   85 #
   86 # Useful paths - note that COL should not be defined when
   87 # NROFF is defined as "groff -Tascii" or "groff -Tlatin1";
   88 # not only is it superfluous, but it actually damages the output.
   89 # For use with utf-8, NROFF should be "nroff -mandoc" without -T option.
vi_practice                                                 79,5           55%
HAMLET:
To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,                    
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end
The heart-ache and the thousand natural shocks
That flesh is heir to, 'tis a consummation
Devoutly to be wish'd. To die, to sleep;
To sleep: perchance to dream: ay, there's the rub;
For in that sleep of death what dreams may come
hamlet.txt                                                  82,39          36%

預設情況下,vi 以水平的方式來分割視窗且可分割大於兩個以上的視窗,如要垂直的分割視窗,指令為〝:vertical split〞或〝:vsplit〞或〝:vsp〞。
也可用選項 vi -o FILE1 FILE2 FILEnvi -O FILE1 FILE2 FILEn 使一進入 vi 就分割好視窗,其中選項小寫的〝-o〞為水平分割而大寫的〝-O〞為垂直的分割視窗。

分割完視窗後在一般模式可執行的操作如下: 分割完視窗後有關的命令模式指令有:

^ back on top ^

1.7 環境設定
vim 可依個人的偏好設定其環境,vim 整體的環境設定記錄在〝/etc/vimrc〞,個別帳號的環境設定可能要自行建立檔案為〝~/.vimrc 〞。如果是暫時的,可在命令模式下輸入〝:set PARAMETER〞。例如想顯示行號可輸出〝:set nu〞。

常用的環境設定如下:
Set Default Description
:set ai
:set noai
noai 自動縮排(indentation)。
取消自動縮排。
:set all   顯示目前所有的環境設定值。
:set aw
:set noaw
noaw 當編輯其他檔案時自動儲存目前的檔案。
當編輯其他檔案時不自動儲存目前的檔案。
:set bf
:set nobf
nobf 不接受輸入的控制字元
接受控制字元。
:set dir=tmp dir = /tmp 設定暫存檔的目錄。
:set eb
:set noeb
noeb 錯誤訊息發出 beep 聲。
錯誤訊息不發出 beep 聲。
:set hlsearch
:set nohlsearch
hlsearch 反白顯示搜尋時符合的文字。
不反白顯示搜尋時符合的文字。
:set ht= ht = 8 設定水平定位(TAB)的空隔。
:set ic
set noic
noic 搜尋時不管大小寫。
搜尋時大小寫有區別。
:set list
:set nolist
nolist 水平定位顯示〝^I〞換行顯示〝$〞,CR顯示〝^M〞。
不顯示。
:set nu
:set nonu
nonu 顯示行號。
不顯示行號。
:set ro
:set noro
noro 把編輯中的檔案改成〝唯讀〞(read only)。
取消唯讀。
:set sh=shell_path sh = /bin/sh 設定 shell 路徑(錯誤的 shell 路徑會導致 :!COMMAND失效)。
:set fileencoding= utf-8 設定 vim 的編碼格式。
:set fileformat= unix 有效的 file format 有〝unix〞,〝dos〞和〝mac〞,此會影響到換行的方式。
:set syntax=   設定 vim 為何種語言編輯器 ,例如 html,c,cpp,java 等(所支援的程式語言記錄在 〝/usr/share/vim/vimXX/syntax〞)。
:syntax off   取消〝:set syntax=XXX〞的設定(XXX=html,c,cpp 等)。

[註 1.7]

例:
<strong> Products </strong>
<table cellpadding="3" border="1"> <tbody>







:set syntax=html↵ Enter ←設定 vim 為 html 編輯器

上例把 vim 設為〝html〞編輯器,html 相關的保留字會顯示不同顏色,方便編輯。


^ back on top ^


1.8 輸入控制字元和任意字元

有時基於某種原因,需要輸入 ASCII 控制碼(ASCII control characters),vi(m) 也可很方便輸入 ASCII 控制碼,例如壓 Ctrl+G 就可輸入控制碼〝BEL〞,但因 Ctrl+KEY 的方式和 vi 的許多熱鍵一樣,為了區別要輸入控制字元只有在插入或取代模式壓 Ctrl+V 再接著壓 Ctrl+KEY。

例:(輸入控制碼〝BEL〞)
^GCTRL V CTRL G  ←按完<Ctrl>+V馬上再按 <Ctrl>+G 即可輸入控制字元〝BEL〞(以〝^G〞顯示)

更完整的 vi 輸入控制字元參考下表:

vim 輸入控制字元
ASCII 十進制 ASCII 十六進制 符號 vi 顯示  按鍵
000 00 NULL ^@ <Ctrl>+@
001 01 SOH ^A <Ctrl>+A
002 02 STX ^B <Ctrl>+B
003 03 ETX ^C <Ctrl>+C
004 04 EOT ^D <Ctrl>+D
005 05 ENQ ^E <Ctrl>+E
006 06 ACK ^F <Ctrl>+F
007 07 BEL ^G <Ctrl>+G
008 08 BS ^H <Ctrl>+H
009 09 HT TAB <Ctrl>+I
010 0A LF <LF> <Ctrl>+J
011 0B VT <VT> <Ctrl>+K
012 0C FF <FF> <Ctrl>+L
013 0D CR <CR> <Ctrl>+M
014 0E SO ^N <Ctrl>+N
015 0F SI ^O <Ctrl>+O
016 10 DLE ^P <Ctrl>+P
017 11 DC1 ^Q <Ctrl>+Q
018 12 DC2 ^R <Ctrl>+R
019 13 DC3 ^S <Ctrl>+S
020 14 DC4 ^T <Ctrl>+T
021 15 NAK ^U <Ctrl>+U
022 16 SYN ^V <Ctrl>+V
023 17 ETB ^W <Ctrl>+W
024 18 CAN ^X <Ctrl>+X
025 19 EM ^Y <Ctrl>+Y
026 1A SUB ^Z <ctrl>+Z
027 1B ESC ^[ <Ctrl>+<ESC>
028 1C FS ^\ <Ctrl>+\
029 1D GS ^] <Ctrl>+]
030 1E RS ^^ <Ctrl>+6 (鍵盤〝T〞和〝Y〞中間上面的數字 〝6〞)
031 1F US ^_ <Ctrl>+_(〝_〞為 under-line)
127 7F DEL ~ <Ctrl>+?

vi 也可直接敲 ASCII 碼,如要輸入〝¥〞,〝¶〞,〝Ã〞等這些怪符號。

只要Ctrl+V 之後再敲 ASCII(或 EASCII)碼即可輸入 ASCII 碼,且可接受十進制/八進制/十六進制的 ASCII 碼,甚至萬國碼(Unicode)都可直接輸入,用法如下:
[註 1.8]

例:(在插入模式輸入 EASCII 碼〝±〞)
±CTRL V x b 1  ←按完<Ctrl>+V馬上再按 <x><b><1> 即可輸入〝±〞


^ back on top ^





[註1.0]各種平台的 vi 可從 vi 的官下載 http://www.vim.org/download.php

[註1.1] ISBN: 9780596529833,中文版可參考 http://www.oreilly.com.tw/product2_unix.php?id=a243

[註1.7] 參考來源 http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html
http://www.lagmonster.org/docs/vi2.html#settings

[註1.8] 參考來源 http://vim.wikia.com/wiki/Entering_special_characters