常用:
| x | 刪除光標處的字符 |
| dd | 刪除整行 |
| i | 在光標前插入文本 |
| a | 在光標后插入文本 |
| o | 當前行下插入新行 |
| u | 撤銷最后一次修改 |
| :e! | 放棄所有修改,從上次保存開始處再編輯 |
| :wq | 保存退出 |
| :q! | 不保存退出 |
| /pattern
?pattern |
從光標開始處向文件尾搜索pattern
從光標開始處向文件首搜索pattern |
光標控制命令
| h或^h | 向左移一個字符 |
| j或^j或^n | 向下移一行 |
| k或^p | 向上移一行 |
| l或空格 | 向右移一個字符 |
| G | 移到文件的最后一行 |
| nG | 移到文件的第n行 |
| w | 移到下一個字的開頭 |
| W | 移到下一個字的開頭,忽略標點符號 |
| b | 移到前一個字的開頭 |
| B | 移到前一個字的開頭,忽略標點符號 |
| L | 移到屏幕的最后一行 |
| M | 移到屏幕的中間一行 |
| H | 移到屏幕的第一行 |
| e | 移到下一個字的結尾 |
| E | 移到下一個字的結尾,忽略標點符號 |
| ( | 移到句子的開頭 |
| ) | 移到句子的結尾 |
| { | 移到段落的開頭 |
| } | 移到下一個段落的開頭 |
| 0或| | 移到當前行的第一列 |
| n| | 移到當前行的第n列 |
| ^ | 移到當前行的第一個非空字符 |
| $ | 移到當前行的最后一個字符 |
| +或return | 移到下一行的第一個字符 |
| - | 移到前一行的第一個非空字符 |
在vi中添加文本
| a | 在光標后插入文本 |
| A | 在當前行插入文本 |
| i | 在光標前插入文本 |
| I | 在當前行前插入文本 |
| o | 在當前行的下邊插入新行 |
| O | 在當前行的上邊插入新行 |
| :r file | 讀入文件file內容,並插在當前行后 |
| :nr file | 讀入文件file內容,並插在第n行后 |
| escape | 回到命令模式 |
| ^v char | 插入時忽略char的指定意義,這是為了插入特殊字符 |
在vi中刪除文本
| x | 刪除光標處的字符,可以在x前加上需要刪除的字符數目 |
| nx |
從當前光標處往后刪除n個字符 |
| X | 刪除光標前的字符,可以在X前加上需要刪除的字符數目 |
| nX | 從當前光標處往前刪除n個字符 |
| dw | 刪至下一個字的開頭 |
| ndw | 從當前光標處往后刪除n個字 |
| dG | 刪除行,直到文件結束 |
| dd | 刪除整行 |
| ndd | 從當前行開始往后刪除 |
| db | 刪除光標前面的字 |
| ndb | 從當前行開始往前刪除n字 |
| :n,md | 從第m行開始往前刪除n行 |
| d或d$ | 從光標處刪除到行尾 |
| dcursor_command | 刪除至光標命令處,如dG將從當產膽行刪除至文件的末尾 |
| ^h或backspace | 插入時,刪除前面的字符 |
| ^w | 插入時,刪除前面的字 |
修改vi文本(每個命令前面的數字表示該命令重復的次數)
| rchar | 用char替換當前字符 |
| R text escape | 用text替換當前字符直到換下Esc鍵 |
| stext escape | 用text代替當前字符 |
| S或cctext escape | 用text代替整行 |
| cwtext escape | 將當前字改為text |
| Ctext escape | 將當前行余下的改為text |
| cG escape | 修改至文件的末尾 |
| ccursor_cmd text escape | 從當前位置處到光標命令位置處都改為text |
在vi中查找與替換
| /text | 在文件中向前查找text |
| ?text | 在文件中向后查找text |
| n | 在同一方向重復查找 |
| N | 在相反方向重復查找 |
| ftext | 在當前行向前查找text |
| Ftext | 在當前行向后查找text |
| ttext | 在當前行向前查找text,並將光標定位在text的第一個字符 |
| Ttext | 在當前行向后查找text,並將光標定位在text的第一個字符 |
| :set ic | 查找時忽略大小寫 |
| :set noic | 查找時對大小寫敏感 |
| :s/oldtext/newtext | 用newtext替換oldtext |
| :m,ns/oldtext/newtext | 在m行通過n,用newtext替換oldtext |
| & | 重復最后的:s命令 |
| :g/text1/s/text2/text3 | 查找包含text1的行,用text3替換text2 |
| :g/text/command | 在所有包含text的行運行command所表示的命令 |
| :v/text/command | 在所有不包含text的行運行command所表示的命令 |
在vi中復制文本
| yy | 將當前行的內容放入臨時緩沖區 |
| nyy | 將n行的內容放入臨時緩沖區 |
| p | 將臨時緩沖區中的文本放入光標后 |
| P | 將臨時緩沖區中的文本放入光標前 |
| "(a-z)nyy | 復制n行放入名字為圓括號內的可命名緩沖區,省略n表示當前行 |
| "(a-z)ndd | 刪除n行放入名字為圓括號內的可命名緩沖區,省略n表示當前行 |
| "(a-z)p | 將名字為圓括號的可命名緩沖區的內容放入當前行后 |
| "(a-z)P | 將名字為圓括號的可命名緩沖區的內容放入當前行前 |
在vi中撤消與重復
| u | 撤消最后一次修改 |
| U | 撤消當前行的所有修改 |
| . | 重復最后一次修改 |
| , | 以相反的方向重復前面的f、F、t或T查找命令 |
| ; | 重復前面的f、F、t或T查找命令 |
| "np | 取回最后第n次的刪除(緩沖區中存有一定次數的刪除內容,一般為9) |
| n | 重復前面的/或?查找命令 |
| N | 以相反方向重復前面的/或?命令 |
保存文本和退出vi(保存和/或退出操作)
| :w | 保存文件但不退出vi |
| :w file | 將修改保存在file中但不退出vi |
| :wq或ZZ或:x | 保存文件並退出vi |
| :q! | 不保存文件,退出vi |
| :e! | 放棄所有修改,從上次保存文件開始再編輯 |
vi中的選項
| :set all | 打印所有選項 |
| :set nooption | 關閉option選項 |
| :set nu | 每行前打印行號 |
| :set showmode | 顯示是輸入模式還是替換模式 |
| :set noic | 查找時忽略大小寫 |
| :set list | 顯示制表符(^I)和行尾符號 |
| :set ts=8 | 為文本輸入設置tab stops |
| :set window=n | 設置文本窗口顯示n行 |
vi的狀態
| :.= | 打印當前行的行號 |
| := | 打印文件中的行數 |
| ^g | 顯示文件名、當前的行號、文件的總行數和文件位置的百分比 |
| :l | 使用字母"l"來顯示許多的特殊字符,如制表符和換行符 |
在文本中定位段落和放置標記
| { | 在第一列插入{來定義一個段落 |
| [[ | 回到段落的開頭處 |
| ]] | 向前移到下一個段落的開頭處 |
| m(a-z) | 用一個字母來標記當前位置,如用mz表示標記z |
| '(a-z) | 將光標移動到指定的標記,如用'z表示移動到z |
在vi中連接行
| J | 將下一行連接到當前行的末尾 |
| nJ | 連接后面n行 |
光標放置與屏幕調整
| H | 將光標移動到屏幕的頂行 |
| nH | 將光標移動到屏幕頂行下的第n行 |
| M | 將光標移動到屏幕的中間 |
| L | 將光標移動到屏幕的底行 |
| nL | 將光標移動到屏幕底行上的第n行 |
| ^e(ctrl+e) | 將屏幕上滾一行 |
| ^y | 將屏幕下滾一行 |
| ^u | 將屏幕上滾半頁 |
| ^d | 將屏幕下滾半頁 |
| ^b | 將屏幕上滾一頁 |
| ^f | 將屏幕下滾一頁 |
| ^l | 重繪屏幕 |
| z-return | 將當前行置為屏幕的頂行 |
| nz-return | 將當前行下的第n行置為屏幕的頂行 |
| z. | 將當前行置為屏幕的中央 |
| nz. | 將當前行上的第n行置為屏幕的中央 |
| z- | 將當前行置為屏幕的底行 |
| nz- | 將當前行上的第n行置為屏幕的底行 |
vi中的shell轉義命令
| :!command | 執行shell的command命令,如:!ls |
| :!! | 執行前一個shell命令 |
| :r!command | 讀取command命令的輸入並插入,如:r!ls會先執行ls,然后讀入內容 |
| :w!command | 將當前已編輯文件作為command命令的標准輸入並執行command命令,如:w!grep all |
| :cd directory | 將當前工作目錄更改為directory所表示的目錄 |
| :sh | 將啟動一個子shell,使用^d(ctrl+d)返回vi |
| :so file | 在shell程序file中讀入和執行命令 |
vi中的宏與縮寫(避免使用控制鍵和符號,不要使用字符K、V、g、q、v、*、=和功能鍵)
| :map key command_seq | 定義一個鍵來運行command_seq,如:map e ea,無論什么時候都可以e移到一個字的末尾來追加文本 |
| :map | 在狀態行顯示所有已定義的宏 |
| :umap key | 刪除該鍵的宏 |
| :ab string1 string2 | 定義一個縮寫,使得當插入string1時,用string2替換string1。當要插入文本時,鍵入string1然后按Esc鍵,系統就插入了string2 |
| :ab | 顯示所有縮寫 |
| :una string | 取消string的縮寫 |
vi中縮進文本
| ^i(ctrl+i)或tab | 插入文本時,插入移動的寬度,移動寬度是事先定義好的 |
| :set ai | 打開自動縮進 |
| :set sw=n | 將移動寬度設置為n個字符 |
| n<< | 使n行都向左移動一個寬度 |
| n>> | 使n行都向右移動一個寬度,例如3>>就將接下來的三行每行都向右移動一個移動寬度 |
完!
