進入輸入模式
Vi切換到輸入模式的正規(guī)方法
| 指令 | 指令說明 |
|---|---|
| a | 在當前光標之后輸入 |
| A | 在當前行之末輸入 |
| i | 在當前光標之前輸入 |
| I | 在當前行之首輸入 |
| o | 在當前行之下新增一行,并在新增行輸入 |
| O | 在當前行之上新增一行,并在新增行輸入 |
輸入結束后,按Esc鍵推出輸入模式
光標移動
Vi光標移動
| 指令 | 指令說明 |
|---|---|
| h | 向左移動一個字節(jié) |
| i | 向右移動一個字節(jié) |
| j | 向下移動一個字節(jié) |
| k | 向上移動一個字節(jié) |
| b | 左移一個單詞,到詞首 |
| w | 右移一個單詞,到詞首 |
| e | 右移一個單詞,到詞尾 |
| :0 | 移動到文檔起始位置 |
| 0 | 移動當前行行首 |
| ^ | 移動到文檔起始位置 |
| $ | 移動到當前行行尾 |
| + | 移至下一行的行首 |
| - | 移至上一行的行首 |
| H | 移至視窗的第一行 |
| M | 移至視窗的中間一行 |
| L | 移至視窗的最后一行 |
| G | 移至該文件的最后一行 |
| nG | 移至該文檔的第n行 |
| N+ | 下移n行 |
| n+ | 上移n行 |
| { | 光標移動到上一個空行 |
| } | 光標移動到下一個空行 |
| [[ | 光標移動到下一個函數(shù)起始位置(‘{’字符所在位置) |
| ]] | 光標移動到上一個函數(shù)起始位置(‘{’字符所在位置) |
| ( | 光標移動到上一段落起始位置,空行也被認為是段落(多個連續(xù)空行被認為是一個段落) |
| ) | 光標移動到上一段落起始位置,空行也被認為是段落(多個連續(xù)空行被認為是一個段落) |
以上命令從h到e,均可指定重復操作次數(shù),如5h表示光標向前移動5個字節(jié),10j表示向下移動10行
視窗移動
Vi視窗移動
| 指令 | 指令說明 |
|---|---|
| <Ctrl>+f | 視窗下卷一頁 |
| <Ctrl>+b | 視窗上卷一頁 |
| <Ctrl>+d | 視窗下卷半頁 |
| <Ctrl>+u | 視窗上卷半頁 |
| <Ctrl>+e | 視窗下卷一行 |
| <Ctrl>+y | 視窗上卷一行 |
刪除操作
**Vi刪除操作
| 指令 | 指令說明 |
|---|---|
| x | 刪除光標所在字節(jié) |
| X | 刪除光標前一字節(jié) |
| dw | 從光標當前位置開始向后刪除一個單詞 |
| db | 從光標當前位置開始向前刪除一個單詞 |
| d0 | 從行首刪除至當前光標位置 |
| d$ | 從光標當前位置刪除至行尾 |
| dd | 刪除光標所在行 |
| D | 同d$ |
| dG | 刪除從當前光標位置直到文檔末尾的所有內(nèi)容 |
以上x、X、dw、db、dd可以指定字符/行數(shù),如3x表示刪除從當前光標所在位置起的3個字符,3dd表示刪除從當前光標所在行開始的3行。
拷貝和粘貼操作
Vi拷貝粘貼
| 指令 | 指令說明 |
|---|---|
| [n]yy | 拷貝一行或n行 |
| p | 粘貼剛剛拷貝或者刪除(d*命令操作的內(nèi)容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內(nèi)容則在當前光標所在行后面添加新行進行粘貼 |
| P | 粘貼剛剛拷貝或者刪除(nx或者d*命令操作的內(nèi)容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內(nèi)容則在當前光標所在行后面添加新行進行粘貼 |
修改操作
Vi修改操作
| 指令 | 指令說明 |
|---|---|
| s | 修改光標所在字節(jié),修改完成后按Esc鍵結束 |
| S | 修改整行內(nèi)容,修改完成后按Esc鍵結束 |
| r | 替換當前光標所在字節(jié) |
| R | 進入替換狀態(tài),直至按Esc鍵結束 |
| cw | 修改一個單詞(從光標位置至詞尾) |
| cb | 修改一個單詞(從詞首至光標位置) |
| cc | 修改整行內(nèi)容,完成后按Esc鍵結束,同S |
| c0 | 修改行首至光標位置的內(nèi)容 |
| c$ | 修改光標位置至行尾的內(nèi)容 |
| ~ | 光標所在字節(jié)大小寫切換 |
指令重復
Vi指令重復
| 指令 | 指令說明 |
|---|---|
| nx | 刪除n個字節(jié) |
| ndd | 刪除n行 |
| ns | 修改n個字節(jié) |
在指令模式中,可在指令前面加入一個數(shù)字n,則該指令會重復執(zhí)行n次。常用的重復操作
取消前一操作
Vi取消前一個操作
| 指令 | 指令說明 |
|---|---|
| u | 撤消上一指令的結果 |
| U | 撤銷本行上的所有修改 |
查找字符串
Vi查找字符串
| 指令 | 指令說明 |
|---|---|
| /字符串 | 從當前光標向后查找該字符串 |
| ?字符串 | 從當前光標向前查找該字符串 |
| n | 從當前光標向后查找下一個字符串 |
| N | 從當前光標向前查找下一個字符串 |
| # | 向上查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞 |
| * | 向下查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞 |
查看編輯狀況
Vi查看編輯狀況
| 指令 | 指令說明 |
|---|---|
| <Ctrl> + g | 顯示正在編輯的文件名、當前光標所在行數(shù)、文件總行數(shù)、文件是否被修改 |
括號匹配
Vi括號匹配
| 指令 | 指令說明 |
|---|---|
| % | 定位到匹配的“(”、“)”、“{”、“}” |
括號匹配符可以用在各種指令中,如d%表示從但前光標位置刪除到匹配的“(”“)”“{”“}”
的位置,c%表示替換從當前光標到配置的“(”“)”“{”“}”位置,y%表示拷貝從當前光標位
置到其后匹配的“)”或“}”。當光標不在“(”“)”“{”“}”上時,默認找其后最近的“(”,然后找“{”。
執(zhí)行指令
Vi執(zhí)行指令
| 指令 | 指令說明 |
|---|---|
| :10,20d | 刪除第10行至第20行的內(nèi)容 |
| :10d | 刪除第10行的內(nèi)容 |
| :%d | 刪除全部內(nèi)容 |
| :10,20co30 | 將第10行至第20行的內(nèi)容復制到第30行之后 |
| :10,20mo30 | 將第10行至第20行的內(nèi)容移動到第30行之后 |
| :1,$s/old/new | 將第1行至最后一行中的old替換成new |
| :1,$s/^/new | 將第1行至最后一行的內(nèi)容前面插入new |
| :10 | 將光標移至第10行 |
| :10,20y | 拷貝第10行至第20行的內(nèi)容 |
| :g/old/s//new | 在全文檔范圍內(nèi)查找每行第一次出現(xiàn)的old字符串并替換為new字符串 |
| :g/old/s//new/g | 在全文檔范圍內(nèi)查找所有old字符串并替換為new字符串 |
| :g/old/d | 刪除文檔中包含old字符串的行 |
| :r filename | 讀入filename文件內(nèi)容,并粘貼到當前光標下一行 |
| :e | 重新載入當前文檔的內(nèi)容覆蓋當前所有修改,其實就是將所有自上次保存(或者打開)后的所有修改撤銷。 |
| :$ | 光標移動到文檔末尾一行行首 |
| :[w]n[!] [filename] | 切換到下一個文件進行編輯。如果指定了filename則打開指定的filename文件進行編輯,如果filename不存在則默認為創(chuàng)建該新文件。如果沒有指定文件名,則只能在vi已經(jīng)打開多個文件且當前編輯的文件不是最后一個文件時使用該命令。n表示next,w表示在切換到下一個文件前將當前文件的修改進行保存,!表示強制執(zhí)行。 |
| :rew[!] | rew即rewind,重新打開第一個文件進行編輯,但是如果當前文件的修改沒有保存的話將失敗,如果使用了!,則將舍棄對當前文檔的最近修改(自上次存儲或者文件打開以來),強行打開第一個文件進行編輯。 |
| :la[!] | la即last,打開最后一個文件進行編輯,類似rew,只不過一個是打開第一個文件,一個是打開最后一個文件。 |
| :help [key] | 顯示vi的幫助信息,如果指定了命令,則顯示該命令的幫助信息。用:exit或:q推出幫助界面。 |
以上用具體的數(shù)字為例進行介紹,數(shù)字表示行數(shù),光標所在行可用“.”代替,文件最后一行可用“$”代替。
保存與退出
Vi保存與退出
| 指令 | 指令說明 |
|---|---|
| :w | 保存,但不退出 |
| :wq | 保存并退出 |
| :x | 同:wq |
| :q | 退出,如果當前文件沒有保存,禁止退出 |
| :q! | 不保存退出 |
| :w file1 | 將內(nèi)容保存至文件file1中,注意:此時編輯的仍為原文件 |
| :w! file1 | 將內(nèi)容覆蓋保存至文件file1中,如文件file1存在,:w file1將禁止執(zhí)行 |
環(huán)境設置
Vi環(huán)境設置
| 指令 | 指令說明 |
|---|---|
| :set | 顯示已設置的環(huán)境狀況 |
| :set all | 顯示所有的環(huán)境設置選項 |
| :set nu | 顯示行號 |
| :set nonu | 不顯示行號 |
| :set ts=n | 設置Tab鍵的長度為n |
vi環(huán)境設置的缺省值可在$HOME/.exrc文件中設置。
重復指令
Vi重復指令
| 指令 | 指令說明 |
|---|---|
| . | 重復上一條指令 |
切換到shell狀態(tài)
Vi切換到shell狀態(tài)
| 指令 | 指令說明 |
|---|---|
| :sh | 切換到shell狀態(tài),此時可以執(zhí)行所有shell命令,知道執(zhí)行exit返回文檔編輯狀態(tài)。 |