vim file是一個新文件,也可以是原有文件。這樣的命令執行後將打開編輯器,顯示文件file的內容。如圖所示:
如果是一個新文件,底部左邊會顯示"file" [新文件]的字樣,右邊顯示0,0-1表示當前光標所在行數和字符數。如果打開的是一個老文件,底部左邊顯示"file" 3L, 66C字樣,表示文件名,當前光標所處行號,文件總字節數。文件中沒有字符的地方會以字符~開頭。
現在還不能進行編輯,vim編輯文件有幾種模式,當前所處模式是普通模式,可以移動光標、執行復制粘貼等命令;另外還有兩種常用模式:插入模式和底行模式。
開始進入的一般都是普通模式,按如下鍵將進入插入模式:1. a在光標所在位置下一個字符開始輸入2. A在光標所在行尾開始輸入2. i在光標所在位置開始輸入4. I在光標所在行首開始輸入5. o在光標所在行下新增一行,並在新增行行首開始輸入6. O在光標所在行上新增一行,並在新增行行首開始輸入
進入插入模式後,底部會出現-- 插入 --字樣;這時就可以在光標位置進行輸入了。從插入模式退回到普通模式按ESC鍵。
在普通模式按如下鍵將進入底行模式:1. :執行命令2. /正向搜索3. ?反向搜索
從底行模式退回到普通模式需按兩次ESC鍵
底行模式執行:q(quit)表示退出編輯器,如果對文件內容進行過更改,需要執行:wq(write quit)來保存退出;如果不保存退出則需要執行:q!強制退出;強制保存退出為:wq!。
下面列出一些在普通模式下可以執行的命令及它們的作用:文本本修改:
1. dd剪切光標所在位置的整行(保存在臨時緩沖區)2. nddn為數字,表示從當前行開始,從上到下剪切n行3. p將緩沖區中的內容放到當前行之下4. npn是數字,相當於執行n次p命令5. P將緩沖區中的內容放到當前行之上6. y從光標處開始復制6. yy復制當前行(保存在臨時緩沖區)7. nyyn為數字,表示從當前行開始,從上到下復制n行8. r替換光標所在位置的一個字符9. R從光標位置開始替換,並進入文本輸入模式(ESC退出)10. u撤銷上一次操作11. ZZ保存退出12. 移動光標:13. h或左箭頭鍵光標向左移動一格14. l或右箭頭鍵光標向右移動一格15. j或下箭頭鍵光標向下移動一格16. k或上箭頭鍵光標向上移動一格17. 0光標移動到當前行開頭18. ^光標移動到當前行非空白字符(如空格、tab鍵等)的開頭19. $光標移動到當前行結尾20. g_光標移動到當前行非空白字符的結尾21. w光標移動到下一個單詞的開頭22. e光標移動到下一個單詞的結尾23. *匹配光標所在單詞,移動到下一個相同的單詞24. #匹配光標所在單詞,移動到上一個相同的單詞25. f{光標移動到當前行的下一個字符{處,{可以換成其他字符26. F}光標移動到當前行的上一個字符}處27. t,光標移動到當前行的下一個逗號之前一個字符處28. T,光標移動到當前行的上一個逗號之後一個字符處29. %移動到成對括號的另一半括號處,包括(){}[].需要先將光標移動到括號上。30. gg光標移動到文件第一行行首31. G光標移動到文件最後一行行首32. 回車鍵光標移動到下一行行首
這裡只列出一部分,初學者也許會覺得太多,記不住。其實只要記住其中幾個,就完全可以使用了;其他的作用大多是使你的操作更簡便快捷。
vim中的各種命令,大多可以組合使用:比如要刪除光標當前所在位置一直到行尾,可以執行d$;
比如要在當前位置插入50個‘word’,只需執行50iword ESC按完ESC鍵之後這50個單詞就被插入了;
比如要粘貼被復制的內容,但希望粘貼5次,則執行5p;
比如要再次執行上一次命令5次,則執行5.;
熟練使用這些命令將極大提高編寫文件的速度。
在插入模式下(普通模式按a、i、o等),輸入一個單詞的開頭,然後按CTRL-P或CTRL-N就會自動補齊。
底行模式共三個開始字符(:、/、?),其中/和?用來匹配模式搜索:如搜索文件內字符串centos:
/centos
輸入這個字符串之後按回車,vim就會將所有匹配的字符串高亮顯示,按下n鍵,光標就會跳到下一個匹配字符串處,按N鍵,光標就會跳到上一個匹配處。(想想man查詢)
使用?和/的作用相同,不過是方向相反。
:可以執行許多命令,如前面介紹過的保存退出命令:wq。
下面介紹部分底行模式命令:1 :setnu顯示行號2 :setnonu隱藏行號3 :rfile讀取文件file內容並寫入當前編輯的文件中,內容從光標當前位置下一行開始插入。4 :wfile將當前編輯的內容寫入一個新文件file中。5 :s/pattern/string/將匹配pattern的字符串替換成string6 :x作用和:wq相同,保存並退出。7 :!command暫時離開vim並執行shell命令command。8 :help查看幫助9 :.=顯示當前行號10 :=顯示總行數11 :n移動光標到第n行行首這些命令也可以組合如執行shell命令並將結果寫入當前行的下一行:r!ls-l還能組合其他模式下的命令如替換當前行所有匹配模式的字符串:s/pattern/string/g#g表示全局如替換本文件中所有匹配模式的字符串:%s/pattern/string/g#%表示所有行如替換指定行的匹配字符串:n,ms/pattern/string/g
這裡n和m都是數字,代表行號。可以用點號.代表當前行
如刪除當前行到第五行的內容:.,5d當當前行處於第五行以下時,會有反向刪除的提示。
使用/pattern和:s/pattern/string時,pattern是一個正則表達式,用來匹配一個字符串的模式。
正則表達式和之前介紹的通配符(基礎命令介紹二)有一些相似的地方,但要注意區分兩者的不同。
通配符主要是用於對文件名的匹配,正則表達式不僅可以用於匹配文件名,事實上,它可以進行任何字符串的匹配。它要比通配符更通用,大多數編程語言和一些工具中(如vim、grep、awk、sed)都有對正則表達式的直接支持。
下面介紹一部分將要用到的正則表達式的概念和用法:匹配位置:^ 表示行開頭$ 表示行結尾< 表示單詞開頭> 表示單詞結尾匹配字符:. 表示匹配任意單個字符(相當於通配符中的?)[...] 表示匹配括號內任意單個字符[^...] 表示匹配任意一個非列出字符 #參照通配符描述/a 匹配英文字符,等同於[a-zA-Z]或[[:alpha:]]。/A 匹配非英文字符,等同於[^a-zA-Z]。/d 匹配數字,等同於[0-9]或[[:digit:]]。/D 匹配非數字,等同於[^0-9]。/x 匹配十六進制數字,等同於[0-9A-Fa-f]或[[:xdigit:]]。/X 匹配非十六進制數字,等同於[^0-9A-Fa-f]。/w 匹配單詞,等同於[0-9A-Za-z_]。/W 匹配非單詞,等同於[^0-9A-Za-z_]。/t 匹配TAB字符。/s 匹配空白字符,等同於[ /t]或[[:blank:]]。/S 匹配非空白字符,等同於[^ /t]。/u 匹配大寫字母,等同於[A-Z]或[[:upper:]]。/U 匹配非大寫字母。/n 匹配換行/r 匹配回車(...) 匹配並捕獲,用/1 /2 /3 ...來引用被捕獲的字符串。| 表示邏輯或匹配數量:* 表示匹配前一個字符零到任意多次,相當於{0,}。+ 表示匹配前一個字符一到任意多次,相當於{1,}。? 表示匹配前一個字符零到一次,相當於{0,1}。#注意和通配符?的區別{n,m} 表示匹配前一個字符n到m次。
在使用正則表達式時,有時需要在特殊字符之前加上轉義字符"/"來使特殊字符表示它的字面意思而不是它的特殊意義,在特定的工具中使用正則時,也需要這樣做來避免特殊字符被工具本身解釋。
vim在使用如下正則表達式時需要將特殊字符轉義:/<.../>、/{n,m}、/(.../)、/?、/+、/|下面結合正則舉例說明vim中模式匹配及部分命令用法
匹配字符串world並使光標停留在匹配行後第三行行首:/world/+3將第三行到第八行行首添加注釋符號//:3,8s/^//////注意這裡的行首符^和轉義符'/'的用法:%g/^/sxyz/normaldd此命令作用是全局匹配以空白後接xyz開頭的行,並執行普通模式下的命令dd
如匹配6個以上的小寫字母://a/{6,}如交換冒號:兩側的字符串:s//(.*/):/(.*/)//2:/1/#注意這裡是如何引用之前匹配的分組的如將所有tag、tog和tug分別改為hat、hot和hut%s/t/([aou]/)g/h/1t/g如匹配hello或world兩個單詞://<hello/>/|/<world/>這裡只列出部分vim用到的正則表達式,關於正則的更多內容,以後的文章中還會有描述和舉例。
vim編輯器是很強大的,這裡只描述了部分初級使用方法。vim還能使用視圖模式,編輯多文本,設置鍵盤映射,多剪貼板,錄制宏,使用插件等等。完全可以用vim作為IDE來使用。但相對來說,vim的學習曲線比較陡峭,不同的應用場景,需要記憶的命令和方法數量也是完全不同的。建議在學習中,每次只熟悉幾個命令,一段時間後,就能流暢快捷的編輯文本了。
原文來自:http://os.51cto.com/art/201611/521465.htm
本文地址:http://www.linuxprobe.com/linux-vim-commend.html
http://www.bkjia.com/Linuxjc/1191938.html TechArticle