vi 編輯器
文本編輯器,子處理器
ASCII,sed,
vi: Visual Interface
vim: VI improved
全屏編輯器,模式化編輯器
vim模式
編輯模式(命令模式)
輸入模式
末行模式
模式轉換:
編輯模式-->輸入模式:
i? :在當前光標所在字符的前面,轉為輸入模式;
a :在當前光標所在字符的后面,轉為輸入模式;
o :在當前光標所在行的下方,新建一行,并轉為輸入模式;
I :在當前光標所在行的行首,轉為輸入模式;
A:在當前光標所在行的行尾,轉為輸入模式;
O:在當前光標所在行的上方,新建一行,并轉為輸入模式;
輸入模式-->編輯模式:
ESC
編輯模式-->末行模式
:
eg: 刪除第10行 ‘:10d’
? ? ? 刪除10-20行 ‘:10,20d’
顯示行號 ‘:set nu’
末行模式-->編輯模式:
ESC,ESC
一、打開文件
vim /path/to/somefile
vim +# filename: 直接打開文件至第#行數
vim +? filename: 直接打開文件至最后一行
vim +/PATTERN: 打開文件,定位至第一次被PATTERN匹配的行首
eg: 匹配/etc/inittab文本中第一個出現System的字符串
? ? ? vi +/System /etc/inittab
默認處于編輯模式
二、關閉文件
1、末行模式下關閉文件
? ? :q 不保存退出
? ? :wq 保存并退出 --> :x
? ? :q! 不保存強行退出
? ? :w? 保存
? ? :w! 強行保存
2、編輯模式下退出
? ? ZZ 保存退出
三、移動光標(編輯模式下)
1)逐字符移動
? ? h:左
? ? l:右
? ? j:下
? ? k:上
? ? #h :向左移動#個字符
2) 以單詞為單位移動
? ? w:移至下一個單詞的詞首
????e:跳至當前或下一個單詞的詞尾
????b:跳至當前或前一個單詞的詞首
????#w:移至下#個單詞的詞首
3) 行內跳轉:
? ? 0:跳至絕對行首
????^:跳至行首的第一個非空白字符;
? ? $:跳至絕對行尾
4) 行間跳轉
? ? #G:直接跳轉至第#行
????G:直接跳轉至最后一行
????gg:直接跳轉至第一行
末行模式下,直接給出行號即可
四、翻屏(編輯模式下)
? ? Ctrl+f:向下翻一屏
? ? Ctrl+b:向上翻一屏
? ? Ctrl+d:向下翻半屏
? ? Ctrl+u:向上翻半屏
五、刪除單個字符(編輯模式下)
? ? x :刪除光標所在處的單個字符
? ? #x:刪除光標所在處及向后的共#個字符
六、刪除命令:d
? ? d命令跟跳轉命令組合使用:
? ? dw:刪除光標坐在單詞
????d^:刪除光標坐在單詞至行首的字符串
????#dw,#de,#db
????dd:刪除當前光標所在行
????#dd:刪除包括當前光標所在行在內的#行
末行模式下:
????StarADD,EndADDd
? ? ? ? eg:刪除10-20行
? ? ? ? ? ? :10,20d
????. 表示當前行
? ? ? ? ? eg:刪除當前行及下5行
? ? ? ? ? ?? :.,+5d
? ? ? ? ? ? ?? 刪除當前行至第5行
? ? ? ? ? ? ? :.,5d
????$ 表示最后一行
????+#表示向下#行
????$-3表示倒數第3行
七、粘貼命令:p
? ? p(小寫):如果刪除或復制為整行內容,則粘貼至光標所在行的下方;如果刪除或復制為非整行內容,則粘貼至光標所在行的后方;
????P(大寫):如果刪除或復制為整行內容,則粘貼至光標所在行的上方;如果刪除或復制為非整行內容,則粘貼至光標所在行的前方;
八、復制命令:y (yank)
? ? 用法同d命令
九、修改:先刪除指定內容,再轉換會自動模式
? ? c: change用法同d命令
十、替換:r (replace)
? ? r: 在將光標所在字符原位替換
? ? R:進入替換模式,可連續將光標所在字符原位替換,按ESC鍵退出替換模式。
十一:撤銷編輯操作:u (undo)
? ? u:撤銷前一次的編輯操作
? ? 連續u命令可撤銷此前的n次編輯操作
? ?? #u:直接撤銷最近#次操作
? ? ? 注:最多撤銷50次,因為內存緩沖區只保存最近50次的編輯內容
? ?? 撤銷最近一次撤銷撤銷:Ctrl+r
十二、重組前一次編輯操作
? ?? .
十三、可視化模式
? ?? v: 按字符選取
? ?? V:按矩形選取
十四、查找
? ?? /PATTERN
? ?? ?/PATTERN
? ?? n? 下一個
? ?? N? 上一個
十五、查找并替換
????在末行模式下使用s命令:
????ADDR1,ADDR2s/PATTERN/string/gi
????eg: 將當前行至倒數第2行中出現的全部所有he替換成HE
? ? ? ? .,$-2s/he/HE/g?