本文適合vim編輯器愛好者閱讀。
本文包括vim大部分實用操作,加深理解和記憶的方法。
緒論
首先使用vim需要摒棄一個不好的習慣就是需要輸入大寫字母非要切換非要用CapsLk
,其實shift+字母
就是大寫。因爲vim中有很多的快捷鍵是大寫字母,如果使用前者的方式需要按三次鍵盤,而後者的方式只需要一次。
vim的使用致力於雙手可以放在鍵盤上,不需要擡起來拿鼠標。
一、移動篇
上下左右:hjkl
。
移動到單詞開頭:b
。移動到上一個空格之後B
。B比b好用。
移動到單詞結尾:e
。移動到下一個空格之前E
。E比e好用。
移動到下一個單詞開頭w
。移動到下一個空格後面W
。W比w好用。
行首(第一個可見字符):^
,行尾:$
,行的第一列0
。
翻頁:ctrl+f
,ctrl+b
。
移動到n行::n
。
全文首:gg
,全文尾G
。
二、查找篇
全篇向下查找字符串string:/string
。在配合n
向下,N
向上查找。#
等價於/光標所在單詞
。
全篇向上查找字符串string:?string
。在配合n
向上,N
向下查找。*
等價於/光標所在單詞
。
跳轉到本行下一個字符char:f char
。
跳轉到本行上一個字符char:F char
。
跳轉到本行下一個字符char之前:t char
。
跳轉到本行上一個字符char之前:T char
。
三、插入篇
光標前插入:i
。
跳轉到行首插入:I
,等價與^ i
。
光標後插入:a
。
跳轉到行尾插入:A
,等價於$ a
。
下一行插入:o
,等價於A return
。
上一行插入:O
,等價於I return 上(esc k i)
。
列插入:ctrl+v 上下移動光標 I 要輸入的內容 esc
。
四、刪除篇
刪除光標處字母:x
。刪除光標前的字母:X
。
刪除一個單詞包括它後面的空格:daw
。刪除一個單詞不包括它後面的空格:diw
。
刪除括號()或[]或{}
中且包含括號的內容:da(或[或{
。
刪除括號()或[]或{}
中不包含括號的內容:di(或[或{
。
刪除引號'或"
中且包含引號的內容:da'或"
。
刪除引號'或"
中不包含引號的內容:di'或"
,
刪除整行:dd
。刪除n行:ndd
。
刪除本行光標後的內容:D
。刪除本行光標前的內容d 0
或d ^
。
刪除到下一個空格包括空格:d W
。(沒有特殊字符時小寫也可以)
刪除到下一個空格不包括空格:d E
。(沒有特殊字符時小寫也可以)
刪除到上一個空格不包括空格:d B
。(沒有特殊字符時小寫也可以)
列刪除:ctrl+v 移動光標選中待刪除部分 d
。
五、替換篇
替換其實就是刪除並插入。
刪除當前字母並進入插入模式:s
,等價於x i
。
刪除當前行並進入插入模式:S
,等價於dd O
。
刪除篇d
所有的操作用c
來替代,相當於刪除後直接進入插入模式,c
相當於dxx a
。
全文替換::%s/old string/new string/
。
n到m行替換::n,ms/old string/new string/
。
六、複製粘貼篇
複製一行:yy
或Y
。複製n行:nyy
。
刪除篇d
所有操作用y
來代替,代表複製相應的內容。比如yaw
就是複製單詞、yi"就是複製兩個”之間的內容。
在光標之後粘貼:p
。在光標之前粘貼:P
。
其實p粘貼的內容是從vim無名寄存器中取出來的,刪除操作和複製操作都會將內容存入無名寄存器,所以剛刪除的內容是可以用p
粘貼出來的,d
和p
像是剪切和粘貼,y
和p
像是複製和粘貼。
字母大小寫切換:~
。
七、塊模式篇
塊模式是用來選中需要操作的部分,具體執行什麼操作還要看後面跟隨的具體命令。
快速選中:用v
替換刪除篇的d
,用來快速選中相對應的部分。
常見操作:yaw
複製一個單詞,再移動光標到另一處單詞,vawp
用複製的單詞替換當前單詞,vaw
代表快速選中單詞,p再進行粘貼。將單詞全部轉化成大寫viwU
,小寫是viwu
。
普通塊模式:ctrl+v
,進入塊模式移動光標可以選中需要操作的部分。
常見操作:列插入列刪除。
行模式:V
,通過上下移動選中多行。
常見操作:多行刪除V 移動光標 d
和複製V 移動光標 y
,用ndd
或者nyy
需要數多少行,用V
可以所見即所得。
八、寫代碼篇
向前撤銷:u
,向後撤銷:ctrl+R
。
自動補全:ctrl+p
和ctrl+n
。
自動對齊n行:n==
。
向左縮進:<<
。向右縮進:>>
。
跳轉到上一個{:[{
。
跳轉到下一個}:]}
。
找到與之匹配的括號:%
。
跳轉函數定義:ctrl+]
。跳回:ctrl+t
。
跳轉光標上一次的位置:ctrl+o
。下一次:ctrl+i
。
自動補全ctrl+p
和ctrl+n
。
九、文件篇
保存::w
。
保存退出::wq
。
不保存退出::q
。
左右分割打開其他文件::vsp filename
。
上下分割打開其他文件::sp filename
。
兩個文件差異比較:vimdiff filename1 filename2。
十、設置篇
顯示行號::set nu
,不顯示行號:set nonu
。
設置tab的寬度爲n::set ts=n
。
設置縮進寬度爲n::set sw=n
。
用空格替換tab::set expandtab
,反之::set noexpandtab
。
在行開始時使用製表符::set smarttab
。
查找忽略大小寫::set ignorecase 。
從外面粘貼代碼縮進會出現問題::set paste
。複製完成後在::set nopaste
。這一點粘貼python尤爲重要。
可以在~/.vimrc
文件來提前配置vim。
十一、理解篇
一些操作,如:d/y/c
,像是一個及物動詞(謂語)一樣,後面可以跟它的賓語,如:w/(/'
,這些賓語可以有他們的定語,如:i/a
。這些都可以自由的組合。
一些操作,如:p/o
,像是一個不及物動詞一樣,i/a
也可以是不及物動詞。
賓語(待操作的對象)也可以通過塊模式選取。比如:列刪除操作、vi(d
刪除()之間的內容。
十二、升級篇
vim還有很多強大的功能,筆者目前用的不多。比如:做標記m
和標記跳轉`,有名的寄存器操作"寄存器名
,錄入命令集合q名字xxxq
,取出命令集合@名字
。
如果寫c/c++可以將vim插件安裝到clion中使用,寫代碼不要太爽。
linux中還可以安裝ctags和escope插件,完善函數跳轉。
最終附上我常用的vim配置文件 vim配置文件