vim(Vi IMproved)是vi文本編輯器的一個擴展的程序,Vim能夠在命令行接口上使用,也能夠在圖形用戶接口上做爲一個獨立的應用程序使用。Vim是由Bram Moolenaar根據Stevie editor在Amiga計算機上的一個接口的源程序編寫,在1991年首次公開發行。
Vim是一個跨多種平臺的文本編輯器,在2015年,Stack Overflow調查得出Vim成爲排名第三的主流的文本編輯器;在2016年,Stack Overflow調查得出Vim成爲排名第四的開發環境;正則表達式
一、Vim的基本模式vim
Vim是一個模式化的編輯器,其有三種模式:編輯模式,也稱命令模式;輸入模式(能夠進行文本的編輯);末行模式(內置的命令行接口)app
三種模式的轉換編輯器
編輯模式爲默認模式 編輯模式-->輸入模式 i: insert,在光標所在處輸入; a: append,在光標所在處後方輸入; o: 在光標所在處下方打開一個新行; I: 在光標所在行的行首輸入; A: 在光標所在行的行尾輸入; O: 在光標所在處的上方打開一個新行; 輸入模式-->編輯模式 ESC鍵; 編輯模式-->末行模式 :; 末行模式-->編輯模式 ESC鍵;
二、打開文件spa
# vim [optins] [file...] +#: 打開文件後,直接讓光標定位到第#行行首位置; +PATTERN: 打開文件,直接讓光標定位到第一次匹配到PATTERN的行的行首;
三、關閉文件命令行
ZZ: 保存並退出; 如下操做在末行模式下 :q 退出; :q! 強制退出,不保存此前的編輯操做; :wq 保存並退出; :x 保存並退出; :w /PATH/TO/SOMEWHERE 將文件另存至其餘的文件中
四、光標(cursor)跳轉code
(1) 字符間跳轉教程
^ k <h l> j v #DIRECTION: 向指定方向跳轉#個字符
(2) 單詞間跳轉接口
w: 光標跳轉至下一個單詞的詞首; b: 當前或前一個單詞的詞首; e: 當前或後一個單詞的詞尾; #COMMAND: 向COMMAND跳轉#個單詞
(3) 行首行尾跳轉開發
^: 跳轉至行首的第一個非空白字符; 0: 跳轉至行首; $: 跳轉至行尾;
(4) 行間跳轉
#G: 跳轉至由#指定的行; 1G, gg: 跳轉至第一行; G: 跳轉至末行;
(5) 句間跳轉
): 跳轉至下一句; (: 跳轉至上一句; #COMMAND: 向COMMAND跳轉#句
(6) 段間跳轉
}: 跳轉至下一段; {: 跳轉至上一段; #COMMAND: 向COMMAND跳轉#個段;
五、翻屏
Ctrl+f: 向文件尾部翻一屏 Ctrl+b: 向文件首部翻一屏 Ctrl+d: 向文件尾部翻半屏 Ctrl+u: 向文件首部翻半屏 Enter: 按行向後翻
六、vim的編輯命令
(1) 字符編輯
x: 刪除光標所在處的字符; #x: 刪除光標所在處起始的#個字符; xp: 交換光標所在處的字符與其後面的字符的位置;
(2) 替換命令(replace)
r: 替換光標所在處的字符; rCHAR: 替換光標所在處的字符爲CHAR;
(3) 刪除命令
d: 刪除命令,可結合光標跳轉字符,實現範圍刪除; d$: 刪除當前光標所在的字符到行尾的內容; d^: 刪除當前光標以前的字符到行首非空白的內容; d0: 刪除當前光標以前的字符到行首的內容; dd: 刪除光標所在處的行; #dd: 刪除光標所在行起始的共#行;
(4) 粘貼命令(p,put,paste)
p: 緩衝區中的內容若是爲整行,則粘貼在當前光標所在行的下方;不然,粘貼至當前光標所在處的後方; P: 緩衝區中的內容若是爲整行,則粘貼在當前光標所在行的上方;不然,粘貼至當前光標所在處的前方;
(5) 複製命令(yank, y)
y: 複製,工做行爲類似於d命令;
(6) 改變命令(change, c)
編輯模式 --> 輸入模式,實現刪除操做; 和d命令行爲類似,只是,在執行c相關的命令後會轉換至輸入模式;
七、其餘編輯操做:
(1) 可視化模式:
v: 按字符選定; V: 按行選定; 結合編輯命令使用: d, c, y
(2) 撤銷操做(undo):
u: 撤銷此前的操做; #u: 撤銷此前#個操做; 撤銷此前的撤銷操做: Ctrl+r
(3) 重複執行前一個編輯操做:
.
vim自帶教程,vimtutor
八、vim的末行模式
內建的命令行接口
(1) 地址定界
:start_pos[,end_pos] #: 特定的第#行,例如5即第五行; .: 光標所在的當前行; $: 最後一行; #,#: 指定行範圍,左側爲起始行,右側爲結束行; #,+#: 指定行範圍,左側爲起始行絕對編號,右側爲相對左側行號的偏移量;例如:3,+7 %: 全文,至關於(1,$) /pattern/: 從光標所在處起始向文件尾部第一次被模式所匹配的行; /pattern/,$: 從第一次被模式匹配到的行到行尾; /pat1/,/pat2/: 從光標所在處起始,第一次由pat1匹配到的行開始,至第一次由pat2匹配到的行結束之間的全部行; 可同編輯命令一同使用,實現編輯操做:d, y, c, w /PATH/TO/SOMEFILE: 將範圍內的文本保存至指定的文件中;r /PATH/FROM/SOMEFILE: 將指定的文件中 的文本讀取並插入至指定位置;
(2) 查找:
/PATTERN: 從當前光標所在處向文件尾部查找可以被當前模式匹配到的全部字符串; ?PATTERN: 從當前光標所在處向文件首部查找可以被當前模式匹配到的全部字符串; n: 下一個,與命令方向相同; N: 上一個,與命令方向相反;
(3) 查找並替換
s: 末行模式的命令;使用格式 s/要查找的內容/替換爲的內容/修飾符 要查找的內容: 可以使用正則表達式; 替換爲的內容: 不能使用正則表達式,但能夠引用; 若是「要查找的內容」部分在模式中使用分組符號: 在「替換爲的內容」中使用後向引用; 直接引用查找模式匹配到的所有文本,使用&符號; 修飾符: i: 查找時忽略大小寫; g: 全局替換,意味着一行中若是匹配到屢次,則均替換;默認替換每一行第一次匹配到的內容; 示例: %s@\<t\([[:alpha:]]\+\)\>@T\1@g %s@\<t\([[:alpha:]]\+\)\>@&er@g
九、vim的多文件功能
(1) 多文件:
vim FILE1 FILE2 … 切換文件:末行模式輸入 next下一個文件; prev 上一個文件; first 第一個文件 last 最後一個 退出全部文件: wqall: 保存全部文件並退出; wall: 保存全部文件; qall: 退出全部文件
(2) 多窗口:
-o: 水平分割窗口; -O: 垂直分割窗口; 在窗口間切換:Ctrl+w, ARROW: 切換下一個文件 注意:單個文件也能夠分割爲多個窗口進行查看: Ctrl+w, s: 水平分割窗口; Ctrl+w, v: 垂直分割窗口;
十、定製vim的工做特性:
注意:在末行模式下的設定,僅對當前vim有效;
永久有效:
(1) 行號:
顯示:set number,簡寫:set num 取消:set nonum
(2) 括號匹配高亮
匹配:set showmatch, set sm 取消:set nosm
(3) 自動縮進
啓用:set autoindent set ai 禁用:set noai
(4) 高亮搜索
啓用:set hlsearch 禁用:set nohlsearch
(5) 語法高亮
啓用:syntax on 禁用:syntax off
(6) 忽略字符大小寫
啓用:set ic 禁用:set noic
一、複製/etc/grub2.cfg文件至/tmp目錄中,用查找替換命令刪除/tmp/grub2.cfg文件中以空白字符開頭的行的行首的空白字符;
:%s@^[[:space:]]\+@@g
二、複製/etc/rc.d/init.d/functions文件至/tmp目錄中,用查找替換命令爲/tmp/functions文件的每一個以空白字符開頭的行的行首加上#;
:%s@^[[:space:]]\+[^[:space:]]@#&@g
三、爲/tmp/grub2.cfg文件的前三行的行首加#號;
:1,3s@^.*@#&@
四、將/etc/yum.repos/CentOS-Base.repo文件中全部的enabled=0替換爲enabled=1,全部gpgcheck替換爲gpgcheck=1;
:%s@\(enabled\|gpgcheck\)=1@\1=1@g