一 vi的操作模式
vi提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)。在輸入模式下,用戶可輸入文本資料。在指令模式下,可進行刪除、修改等各種編輯動作。
在輸入模式下,按Esc鍵切換到指令模式下。
在指令模式下,按輸入指令(i、a、o等)進入輸入模式。
二 進入vi
$?vi??filename
直接鍵入“vi + 所要編輯的文件名”,即可對指定的文件進行編輯。
如果指定的文件為新文件,則提示:“New file”,否則顯示該文件的當前內容。
$?view?filename
以只讀方式打開文件filename
三 指令模式
3.1 進入輸入模式
?a?????在當前游標之后輸入
?A?????在當前行之末輸入
??i?????在當前游標之前輸入
??I?????在當前行之首輸入
?o?????在當前行之下新增一行,并在新增行輸入
?O?????在當前行之上新增一行,并在新增行輸入
輸入結束后,按Esc鍵退出輸入模式。
3.2 游標移動
?h?向左移動一個字元
?l?向右移動一個字元
?j?向下移動一個字元
?k?向上移動一個字元
?b?左移一個單詞,至詞首
?w?右移一個單詞,至詞尾
?0
?移到當前行行首
?$?移到當前行行尾
?+?移至下一行的行首
?-?移至上一行的行首
?H?移至視窗的第一行
?M?移至視窗的中間一行
?L?移至視窗的最后一行
?G?移至該文件的最后一行
?nG?移至該文檔的第n行
?n+?下移n行
?n-?上移n行
3.3 視窗移動
??<Ctrl>?+?f?視窗下卷一頁
??<Ctrl>?+?b?視窗上卷一頁
? ?<Ctrl>?+?d?視窗下卷半頁
?<Ctrl>?+?u?視窗上卷半頁
???<Ctrl>?+?e?視窗下卷一行
???<Ctrl>?+?y?視窗上卷一行
3.4 刪除操作
?x?刪除游標所在字元
?X?刪除游標前一字元
?dw?從游標當前位置開始向后刪除一個單詞
?db?從游標當前位置開始向前刪除一個單詞
?d0?從行首刪除至當前游標位置
?d$?從游標當前位置刪除至行尾
?dd?刪除游標所在行
?D?同d$
3.5 修改操作
?s?修改游標所在字元,修改完成后按Esc鍵結束
?S?修改整行內容,修改完成后按Esc鍵結束
?r?替換當前游標所在字元
?R?進入替換狀態,直至按Esc鍵結束
?cw?修改一個單詞(從游標位置至詞尾)
?cb?修改一個單詞(從詞首至游標位置)
?cc?修改整行內容,完成后按Esc鍵結束,同S
?c0?修改行首至游標位置的內容
?c$?修改游標位置至行尾的內容
?~?游標所在字元大小寫切換
3.6 指令重復
在指令模式中,可在指令前面加入一個數字n,則該指令會重復執行n次。常用的重復操作有:
?nx?刪除n個字元
?ndd?刪除n行
?ns?修改n個字元
3.7 取消前一動作(Undo)
?u?撤消上一指令的結果
3.8 查找字符串
?/字符串?從當前游標向后查找該字符串
??字符串?從當前游標向前查找該字符串
?n?從當前游標向后查找下一個字符串
?N?從當前游標向前查找下一個字符串
3.9 查看編輯狀況
?<Ctrl>?+?g?顯示正在編輯的文件名、當前游標所在行數、文件總行數、文件是否被修改
四 保存與退出
?:w?保存,但不退出
?:wq?保存并退出
?:x?同:wq
?:q?退出,如果當前文件沒有保存,禁止退出
?:q!?不保存退出
?:w?file1?將內容保存至文件file1中,注意:此時編輯的仍為原文件
?:w!?file1?將內容覆蓋保存至文件file1中,如文件file1存在,:w?file1將禁止執行
?
五 環境設置
?:set?顯示已設置的環境狀況
?:set?all?顯示所有的環境設置選項
?:set?nu?顯示行號
?:set?nonu?不顯示行號
?:set?ts
=
n?設置Tab鍵的長度為n
六 執行指令
以下用具體的數字為例進行介紹,數字表示行數,游標所在行可用“.”代替,文件最后一行可用“$”代替。
?:
10
,
20d?刪除第10行至第20行的內容
?:10d?刪除第10行的內容
?:%d?刪除全部內容
?:
10
,
20co30?將第10行至第20行的內容復制到第30行之后
?:
10
,
20mo30?將第10行至第20行的內容移動到第30行之后
?:
1
,
$s/old/new?將第1行至最后一行中的old替換成new
?:
1
,
$s/^/new?將第1行至最后一行的內容前面插入new
?:
10
?將游標移至第10行
七 重復指令
?.?重復上一條指令
八 切換到shell狀態
?:sh?切換到shell狀態,exit返回
?