概述
Vim是從vi發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs并列成為類Unix系統用戶最喜歡的文本編輯器。Vim強大的編輯能力中很大部分是來自于其普通模式命令。vim的設計理念是命令的組合。例如普通模式命令"dd"刪除當前行,"dj"代表刪除到下一行,原理是第一個"d"含義是刪除,"j"鍵代表移動到下一行,組合后"dj"刪除當前行和下一行。用戶學習了各種各樣的文本間移動/跳轉的命令和其他的普通模式的編輯命令,并且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高效的進行文本編輯。
一.vim安裝
在新版的linux中,大部分都內置了vim編輯器。而一些比較老的版本中依然是vi,亦或者是使用過程中,失手把vim卸載了。遇到這些情況,如果想要使用功能強大的vim,就需要我們重新對其進行安裝。 如果你的系統已經連接外網,且yum源沒做修改,只需要執行一下命令進行安裝
yum install -y vim
如果沒有網絡的情況下,就需要到用rpm包的方式自行安裝。如下面是我在CentOS7上把vim卸載后,手動安裝的過程
~]# yum remove -y vim #卸載vim tmp]# which vim #在另一臺vim正常的CentOS7上查看vim命令位置 /usr/bin/vim tmp]# rpm -qf /usr/bin/vim #查看vim是由哪個安裝包安裝而來 vim-enhanced-7.4.160-1.el7.x86_64 Packages]# rpm -ivh vim-enhanced-7.4.160-1.el7.x86_64.rpmwarning: vim-enhanced-7.4.160-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ################################# [100%] package vim-enhanced-2:7.4.160-1.el7.x86_64 is already installed [root@centos7 Packages]##以上是我由本地rpm包中安裝,實際中可能需要從其它相同版本中拷貝,然后安裝。由于其沒有依賴包,rpm包的方式還是蠻方便的哈。。
二.vim的簡單使用
1.打開文件
vim [OPTION]... FILE... +#:打開文件后直接將光標處于第#行 +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首 vim + file 直接打開file,光標在最后一行 vim -b file 二進制方式打開文件 vim -d file1 file2... 比較多個文件 示例:~]# vim -d headscp.txt second.sh third.sh #此時會垂直分三屏分別顯示三個文件并高亮顯示差異
vim -m file 只讀打開文件ex file 或 vim -e 直接進入ex模式vim 后面跟文件名,如果該文件存在,文件被打開并顯示內容 如果該文件不存在,當編輯后第一次存盤時創建它
2.vim的模式
在vim編輯文本時,擊鍵行為是依賴于vim的“模式”vim有三種主要模式: 命令模式(默認):移動光標,剪切/粘貼文本 插入(編輯)模式:修改文本 擴展命令模式:保存,退出等 對于上面的三種模式中的操作,稍后會進行詳細說明 ESC鍵 退出當前模式 ESC鍵 ESC鍵 總是返回到命令模式
3.模式間的轉換:
命令模式-->插入模式 i:insert,在光標所在處輸入 I:在當前光標所在行的行首輸入 a:append,在光標所在處后面輸入 A:在光標所在行的行尾輸入 o:在當前光標所在行的下方打開一個新行 O:在當前光標所在行的上方打開一個新行 插入模式-->命令模式 ESC鍵 命令模式-->擴展模式 : 擴展模式-->命令模式 ESC 鎖定和解鎖: CTRL+s 鎖定 Ctrl+q 解鎖
4.關閉文件
擴展模式: :q 退出 :q! 強制退出,丟棄做出的修改 :wq 保存退出 :x 保存退出 命令模式: ZZ:保存退出 ZQ:不保存直接退出
三. vim進階
1.擴展模式
按“:”進入Ex模式 創建一個命令提示符:處于底部的屏幕左側 命令: w寫(存)磁盤文件 wq寫入并退出 x寫入并退出 q退出 q!不存盤退出,即使更改都將丟失 r filename 讀文件內容到當前文件中 w filename 將當前文件內容寫入另一個文件 !command 暫停對文本的操作,進行命令的操作,此過程不會改變文件內容,是一種不必中斷編輯直接進行命令操作的好方式 r!command 把一個命令的執行結果讀入到當前處理的文件中
2. 命令模式
光標跳轉
字符間跳轉: h:左 l:右 j:下 k:上 #COMMAND:跳轉由#指定的個數的字符 單詞間跳轉: w:下一個單詞的詞首 e:當前或下一個單詞的詞尾 b:當前或前一個單詞的詞尾 #COMMAND:由#指定一次跳轉的單詞數 當前頁跳轉: H:頁首 M:頁中間行 L:頁底 行首行尾跳轉: ^:跳轉至行首的第一個非空字符 0:跳轉至行首 $:跳轉至行尾 行間移動: #G:#跳轉至由#指定的行 G:最后一行 1G,gg:第一行 句間移動: ):下一句 (:上一句 段落間移動: }:下一段 {:上一段
命令模式翻屏操作
Ctrl+f:向文件尾部翻一屏 Ctrl+b:向文件首部翻一屏 Ctrl+d:向文件尾部翻半屏 Ctrl+u:向文件首部翻半屏
字符編輯
x:刪除光標處的字符#x:刪除光標處起始的#個字符xp:交換光標所在處的字符及其后面的字符位置 ~:轉換大小寫
替換命令(r,replace)
r:替換光標所在處的字符R:切換成REPLACE模式,在此模式下對字符替換實現多字符替換
刪除命令
d:刪除命令,可結合光標跳轉字符,實現范圍刪除d$:刪除到行尾d^:刪除到非空行首 d0:刪除到行首(絕對行首) dw:向后刪除一個單詞de:刪除至本單詞詞尾或下個單詞詞尾db向前刪除單詞d ( 刪一句;d {刪一段d G刪到行尾;d gg 刪到行首 #COMMAND:上面一些也可以結合數字實現多行多個單詞的刪除 dd:刪除光標所在的行 #dd:多行刪除D:從當前光標位置一直刪除到行尾,留空格,等同于d$
復制命令
y:復制,行為相似于d命令y$:復制至行尾 y0:復制至行首y^:復制至第一個非空字符 ye:復制至當前詞尾或下個詞尾 yw:復制一個單詞 yb:向前復制一個單詞#COMMANDyy:復制行 #yy:復制多行y:復制整行
粘貼命令
P:緩沖區存的如果是整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面P:緩沖區存在的如果是整行,則粘貼當前光標所在的行的上方;否則,則粘貼至當前光標所在處的前面
改變命令
c:修改后切換成插入模式 命令模式-->插入模式 c$:刪除至行尾 c^:刪除至行首第一個非空字符 c0:刪除至行首 cb:向前刪除一個單詞 ce:向后刪除至單詞尾部或下一個單詞尾部 cw:刪除至下一單詞行首 #COMMAND:同時刪除多個 cc:刪除當前行并輸入新內容 #cc:刪除多行 C:刪除當前光標到行尾,并切換成插入模式
四. vim提高
1.命令模式:
100iwang [ESC] 粘貼“wang” 100次
<start position> <command><end position>
COMMAND: y 復制、d 刪除、gU 變大寫、gu變小寫 例如 0y$ 命令意味著: 0--> 先到行頭 y--> 從這里開始拷貝 $-->拷貝到本行最后一個字符 ye:從當前位置拷貝到本單詞的最后一個字符
2.擴展模式
地址定界
:start_pos,end_pos#:具體第#行,例如2表示第二行#,#:從左側#表示行起始,到右側#表示行結尾#,+#:從左側#表示的行起始,加上右側#表示的行數:2,+3 表示2到5行.:當前行 $:最后一行 .,$-1:當前行到倒數第二行 %:全文,相當于1,$ /pat1/,/pat2/ 從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束 #,/pat/:從#行開始到匹配的行結束 /pat/,$:從匹配到的行到文件結尾 使用方式:后面跟一個編輯命令 d:刪除 y:復制 w file:將范圍內的行另存至指定文件中 r file :在指定位置插入指定文件中的所有內容
查找
/PATTERN:從當前光標所在處向文件尾部查找 ?/PATTERN:從當前光標所在處向文件尾部查找n:與命令同方向N:與命令反方向
查找并替換
s:在擴展模式下完成查找替換操作 格式:s/要查找的內容/替換為的內容/修飾符 要查找的內容:可以使用模式 替換為的內容:不能使用模式,但可以使用\1,\2,...等后向引用符號;還可以使用“&”引用前面查找時查找到的整個內容 修飾符: i:忽略大小寫 g:全局替換;默認情況下,每一行只替換第一次出現 gc:全局替換,每次替換前詢問 查找替換中的分隔符/可替換為其它字符,例如 s@/etc@/var@g s#/boot#/#i
撤銷更改
u撤銷最近的更改 #u撤銷之前的多次更改U撤銷光標落在這行后所有此行的更改 按Ctrl - r重做最后的“撤銷”更改 .重復前一個操作n.重復前一個操作n次
vim寄存器
vim中有26個命名寄存器和1個無命名寄存器,長存放不同的剪切板內容,可以不同會話間共享。 用a,b,...,z表示,放在數字和命令之間: 如:3"tyy表示復制2行到t寄存器中 "tp表示將t寄存器內容粘貼未指定,將使用無命名寄存器 有10個數字寄存器0,1,2...,9表示,0存放最近復制內容,1存放最近刪除內容。當新的文本變更和刪除時,1轉存到2,2轉存到3,依此類推。數字寄存器不能在不同會話間共享。
編輯二進制文件:
以二進制方式打開文件 vim -b binaryfile擴展命令模式下,利用xxd命令轉換為可讀的十六進制 :%!xxd 編輯二進制文件 擴展命令模式下,利用xxd命令轉換回二進制 :%!xxd -r 保存退出
可視化模式
允許選擇文本塊 v面向字符 V面向行 ctrl-v 面向塊 可視化鍵可用于移動鍵組合使用 w,),},箭頭等 突出顯示的蚊子可以被刪除,復制,變更,過濾,搜索/替換等
多文件模式
vim FILE1 FILE2 FILE3 :next 下一個 :prev 前一個 :first 第一個 :last 最后一個 :wall 保存所有 :qall 退出所有 :wqall 保存并退出所有
使用多個窗口
vim -o|O FILE1 FILE2... -o :水平分隔 -O :垂直分隔 在窗口間切換:Ctrl+w,Arrow 單文件窗口分隔: Ctrl+w,s:split,水平分割 Ctrl+w,v:vertical,垂直分割 Ctrl+w,q:取消相鄰窗口 Ctrl+w,o:取消全部窗口 :wqall 退出
定制vim的工作特性
配置文件:永久生效 全局:/etc/vimrc 個人:~/.vimrc 擴展模式:當前vim進程有效 (1)行號: 顯示:set number ,簡寫為set nu 取消顯示:set nonumber,簡寫為set nonu (2)括號成對匹配 匹配:set showmatch,簡寫set sm 取消:set nosm (3)設置tab默認縮進為4個字符 set smartindent set tabstop=4 set shiftwidth=4 set expandtab set softtabstop=4(4)自動縮進 啟用:set ai 禁用:set noai (5)高亮搜索 啟用:set hlsearch 禁用:set nohlsearch (6)語法高亮 啟用:syntax on 禁用:syntax off(7)忽略字符的大小寫 啟用:set ic 禁用:set noic (8)文件格式 啟用:fileformat=unix 不忽略:fileformat=dos (9)設置文本寬度: :set textwidth=65(vim only) :set wrapmargin=15獲取set相關幫助 :help option-list:set or :set all
vi/vim內置幫助及自定補全
vi/vim內置幫助 :help :help topic Use:q to exit helpvimtutor是vim自帶的幫助及練習手冊,可以經常使用提高編輯速度 補全:vim使用過程中,已知補全方式為前面已經有過該單詞出現,下次使用輸入前面單詞,然后按Ctrl+p可以列出可選項供我們選擇,偶爾使用可以提高文本編輯速度。
總結
上文中僅僅對vim的部分功能做了總結,作為一款強大的編輯器,當然還有諸多功能來提高我們的文本編輯速度。為了盡快熟悉vim的使用,要善用vimtutor,多練習多使用。
原創文章,作者:提著醬油瓶打醋,如若轉載,請注明出處:http://www.www58058.com/33608