vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文本編輯器,這裏只是簡單地介紹一下它的用法和一小部分指令。由於 對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也是Linux中最基本的文本編 輯器,學會它後,您將在Linux的世界裏暢行無阻。
vi的基本概念
基本上vi可以分爲三種狀態,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:
1) 命令行模式command mode)
控制屏幕光標的移動,字符、字或行的刪除,移動複製某區段及進入Insert mode下,或者到 last line mode。
2) 插入模式(Insert mode)
只有在Insert mode下,纔可以做文字輸入,按「ESC」鍵可回到命令行模式。
3) 底行模式(last line mode)
將文件保存或退出vi,也可以設置編輯環境,如尋找字符串、列出行號……等。
不過一般我們在使用時把vi簡化成兩個模式,就是將底行模式(last line mode)也算入命令行模式command mode)。
vi命令大全
高亮部分代表個人常用命令
vi命令列表 |
| | | 移動光標 | h | 將光標左移一格。 | l | 將光標右移一格。 | k或Ctrl+p | 光標上移一行 | j或Ctrl+n | 光標下移一行 | w | 將光標移到下一個小字的前面。 | W | 將光標移到下一個大字的前面。 | b | 將光標移到前一個小字的前面。 | B | 將光標移到前一個大字的前面。 | e | 將光標移到下一個小字的後面。 | E | 將光標移到前一個大字的後面。 | fc | 把光標移到同一行的下一個c字符處。 | Fc | 把光標移到同一行的前一個c字符處。 | tc | 把光標移到同一行的下一個字符c的前一格。 | Tc | 把光標移到同一行的前一個字符c的後一格。 | number| | 把光標移到遞number列上。 | +或Enter | 把光標移至下一行第一個非空白字符。 | - | 把光標移至上一行第一個非空白字符。 | ) | 光標移至句尾 | ( | 光標移至句首 | } | 光標移至段落開頭 | { | 光標移至段落結尾 | nG | 光標移至第n行首 | n+ | 光標下移n行 | n- | 光標上移n行 | n$ | 光標移至第n行尾 | H | 把光標移到屏幕最頂端一行。 | M | 光標移至屏幕中間行 | L | 光標移至屏幕最後行 | 0 | (注意是數字零)光標移至當前行首 | $ | 光標移至當前行尾 | space | 光標右移一個字符 | Backspace | 光標左移一個字符 | 屏幕翻滾 | Ctrl + f | 向後滾一頁。 | Ctrl + d | 向後滾半頁。 | Ctrl + b | 向前滾一頁。 | Ctrl + u | 向前滾半頁。 | Ctrl + e | 屏幕向下滾一行。 | Ctrl + y | 屏幕項上滾一行。 | nz | 將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。 | 插入文本 | i | 在光標前 | I | 在當前行首 | a | 光標後 | A | 在當前行尾 | o | 在當前行之下新開一行 | O | 在當前行之上新開一行 | r | 替換當前字符 | R | 替換當前字符及其後的字符,直至按ESC鍵 | s | 從當前光標位置處開始,以輸入的文本替代指定數目的字符 | S | 刪除指定數目的行,並以所輸入文本代替之 | ncw或nCW | 修改指定數目的字 | nCC | 修改指定數目的行 | 修改 | ndw或ndW | 刪除光標處開始及其後的n-1個字 | d0(注意是數字0) | 刪至行首 | d$ | 刪至行尾 | ndd | 刪除當前行及其後n-1行 | x或X | 刪除一個字符,x刪除光標後的,而X刪除光標前的 | Ctrl+u | 刪除輸入方式下所輸入的文本 | cc或S | 修改一整行。 | C | 改變一行光標位置以後的部分。 | cw | 改變光標所在單詞。 | dd | 刪除當前行。 | D | 刪除光標所在行光標後面的內容。 | dw | 刪除光標所在的單詞。 | J | 把下一行內容加到本行行尾。 | rc | 把光符所在字符替換成c . | R | 覆蓋本行內容。 | u | 恢復上一次的修改。 | ~ | 改變光標所在出字符的大小寫。 | . | 重複上一個操作。 | << | 把當前行移到左邊。 | >> | 把當前行移到右邊。 | 搜索/替換 | /pattern | 從光標開始處向文件尾搜索pattern | ?pattern | 從光標開始處向文件首搜索pattern | n | 在同一方向重複上一次搜索命令 | N | 在反方向上重複上一次搜索命令 | s/p1/p2/g | 將當前行中所有p1均用p2替代 | n1,n2s/p1/p2/g | 將第n1至n2行中所有p1均用p2替代 | g/p1/s//p2/g | 將文件中所有p1均用p2替換(g 放在命令末尾,表示對搜索字符串的每次出現進行替換;不加 g,表示只對搜索字符串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作) | /pattern/+number | 將光標停在包含pattern的行後面第number行上。 | /pattern/-number | 將光標停在包含pattern的行前面第number行上。 | % | 移到匹配的“()”或“{}”上。 | 改變屏幕顯示 | z- | 把當前行作爲屏幕的最後一行,並重新顯示屏幕。 | z. | 把當前行作爲屏幕的中間一行,並重新顯示屏幕。 | Ctrl+l | 重新顯示屏幕當前內容。 | /pattern/z- | 尋找pattern的下一個位置,並把所在行設爲屏幕的最後一行。 | 拷貝文本 | p | 將緩衝區內容取到光標所在行的下面一行。 | P | 將緩衝區內容取到光標所在行的上面一行。 | “bd | 將文本刪除至有名緩衝區b . | “bp | 張貼有名緩衝區b中內容。 | yy | 把當前行放入緩衝區。 | Y | 把當前行放入緩衝區。 | Yw | 把光標所在的單詞放入緩衝區 | 選項設置(尾行模式, 例如: :set number) | all | 列出所有選項設置情況 | term | 設置終端類型 | ignorance | 在搜索中忽略大小寫 | list | 顯示製表位(Ctrl+I)和行尾標誌($) | number | 顯示行號 | report | 顯示由面向行的命令修改過的數目 | terse | 顯示簡短的警告信息 | warn | 在轉到別的文件時若沒保存當前文件則顯示NO write信息 | nomagic | 允許在搜索模式中,使用前面不帶“/”的特殊字符 | nowrapscan | 禁止vi在搜索到達文件兩端時,又從另一端開始 | mesg | 允許vi顯示其他用戶用write寫到自己終端上的信息 | | n1,n2 co n3 | 將n1行到n2行之間的內容拷貝到第n3行下 | | n1,n2 m n3 | 將n1行到n2行之間的內容移至到第n3行下 | | n1,n2 d | 將n1行到n2行之間的內容刪除 | | x | 保存當前文件並退出 | | w | 回寫修改後的文件。 | | w filename | 當filename不存在時,把修改後的文件存爲文件filename ,當文件filename存在時,報錯。 | | !w filename | 如果文件filename存在時,把修改後的文件保存爲文件filename . | 多文件切換 | n | 開始編輯vi激活的文件列表中的下一個文件。 | n filenames | 指定將被編輯的新的文件列表。 | 文件間切換 | e filename | 使用filename激活vi (在vi中裝入另一個文件filename)。 | e! | 重新裝入當前文件,若當前文件有改動,則丟棄以前的改動。 | e+filename | 使用filename激活vi ,並從文件尾部開始編輯。 | e+number filename | 使用filename激活vi ,並在第number行開始編輯。 | e# | 開始編輯另外一個文件。 | 加入其他文件 | r filename | 讀取filename文件,並將其內容加到當前文件後。 | r ! Command | 執行command文件,並將其輸出加到當前文件後。 | n1,n2 w!command | 將文件中n1行至n2行的內容作爲command的輸入並執行之,若不指定n1,n2,則表示將整個文件內容作爲command的輸入 | 其他命令 | ctrl+g | 取得正在編輯文件的有關信息。 | :sh | 啓動sh ,從sh中返回可用exit或ctrl+d . | :! Command | 執行命令command . | !! | 重新執行上次的:! Command子命令。 | q | 退出vi | q! | 不保存文件並退出vi | ZZ或:wq | 保存對文件的修改並退出vi . | 寄存器操作 | "?nyy | 將當前行及其下n行的內容保存到寄存器?中,其中?爲一個字母,n爲一個數字 | "?nyw | 將當前行及其下n個字保存到寄存器?中,其中?爲一個字母,n爲一個數字 | "?nyl | 將當前行及其下n個字符保存到寄存器?中,其中?爲一個字母,n爲一個數字 | "?p | 取出寄存器?中的內容並將其放到光標位置處。這裏?可以是一個字母,也可以是一個數字 | ndd | 將當前行及其下共n行文本刪除,並將所刪內容放到1號刪除寄存器中。 | | | | | vi filename | 打開或新建文件,並將光標置於第一行首 | | vi +n filename | 打開文件,並將光標置於第n行首 | | vi + filename | 打開文件,並將光標置於最後一行首 | | vi +/pattern filename | 打開文件,並將光標置於第一個與pattern匹配的串處 | | vi -r filename | 在上次正用vi編輯時發生系統崩潰,恢復filename | | vi filename....filename | 打開多個文件,依次進行編輯 | | vi -c sub-command | 在對指定的文件編輯前,先執行指定的命令 sub-command . | | vi -R | 將指定的文件以只讀的方式放入編輯器中,這樣不會保存對文件的任何修 改。 | | vi -y number | 將編輯窗口的大小設爲number行。 | 可在.exrc文件中定義特殊的vi命令。在vi中使用這些命令時,必須在該命令前加上一個冒號( :) 。 | | |
|