心智圖資源庫 VIM編輯器用法
詳細介紹了vim編輯器的用法以及快捷鍵,乾貨滿滿,有興趣的小夥伴可以參考使用!
編輯於2023-11-27 15:02:34VIM用法
Normal-mode
漫遊
h 向左
j 向下
k 向上
l 向右
w 跳到下一個單字詞首
W 和w類似,以空白符號間隔跳轉
e 跳到下一個單字的詞尾
E 和e類似,以空白符號間隔跳轉
b 跳到上一個單字的詞首
B 和b類似,以空白符號間隔跳轉
100h表示向左移動100個字符,100j向下移動100行
0 跳到行首
^ 跳到行首第一個非空字符
$ 跳到行尾
gg 跳到文件的第一行的行首
G 快速到文件的最後一行的行尾
% 匹配括號移動,包括(,{,[
*|# 匹配遊標目前所在的單字,移動遊標到下一個單字處,*是下一個,#是上一個
ctrl f 看下一頁內容
ctrl b 看上一頁內容
100G 跳到第一百行的行首
`. 跳到文字最後一次修改的地方
'. 跳到文字最後修改的那一行
`` 在最新的兩個修改位置跳轉
. 標記的是文字最後修改的位置
g; 在文檔整個changelist裡面來回跳轉
g, 和g;類似,方向相反
changelist記錄了文件修改的地方
ctrl o 跳到上一個位置
ctrl i 跳到下一個位置
搭配使用,可以在代碼間跳轉
複製
yy 複製遊標所在整行
100yy 複製遊標坐在行及以下共100行
yw 複製遊標開始的第一個單字
y$ 複製遊標到行尾
yG 複製遊標所在行到文字的結束
yH 複製文字開始到遊標所在行的文字
fa 移動遊標到本行下一個a的字元處
Fa 反前移動遊標到字符a處
nfa 移動遊標到下第n個字元a處
nFa 向前移動遊標到第n個字元a處
ta 移動遊標到a字符的前一個字符
nta 移動遊標到第n個a字符前一個字符
Ta 向前移動遊標到a字符出現的後一個字符
nTa 向前移動到第n個a字符出現後的一個字符
yfB 複製遊標到第一個大寫B中間的內容
y2fB 複製遊標到第二個大寫B中間的內容
剪切
x 向後剪切一個字符,如果是行尾則向前剪切
3x 剪切三個
xp 非行尾交換兩個字符,如果是bs編程sb
刪除
dd 刪除遊標所在行
200dd 刪除遊標所在行及以下共100行
dw 刪除一個單字
dnw 刪除n單字
df" 刪除到出現第一個雙引號的位置
dnf" 刪除到出現第n個雙引號的位置
d$ 刪除遊標到本行的結尾
d^ 刪除遊標到本行的開頭
dH 刪除文字開始到遊標所在行的文本
dG 刪除遊標所在行到文字的結束
貼上
p 貼上複製或剪下的內容
3p 將複製或剪下的內容貼上三次
P 遊標前開始貼上
3P 遊標前開始貼上3次
縮排
<< 左縮排
>> 右縮排
可以在區塊選擇下實現區塊縮排
視窗命令
ctrl w s 水平分割視窗
ctrl w w 切換視窗
ctrl w q 關閉目前分屏,如果是最後一個分割屏則退出VIM
ctrl w c 關閉目前分割畫面
ctrl w v 垂直分割視窗
ctrl j|k 可以用來切換上下視窗
ctrl h|l 可以用來切換s水平視窗
ctrl w H|L 可以用於左右移動當前分割畫面
ctrl w J|K 可以上下移動目前分割畫面
文件保存
ZZ 大寫的字母ZZ,儲存目前文件
ZQ 大寫的字母ZQ, 放棄對文件的修改並退出
撤銷操作和復原
u 撤銷剛才的操作
ctrl r 復原撤銷操作
刪除字元和替換
x 刪除遊標目前所在的字符
r 替換掉遊標目前所在的字符
R 替換掉從遊標開始以後的所有字符,除非<ESC>退出
大小寫轉換
~ 將遊標下的字母改變大小寫
3~ 將遊標位置開始的3個字母改變其大小寫
g~~ 改變目前行字母的大小寫
gUU 將目前行的字母改成大寫
guu 將目前行的字母改成小寫
3gUU 將從遊標所在行下面共三行字母改成大寫
gUw 將遊標下的單字改成大寫
guw 將遊標下的單字改成小寫
折疊功能
zf5G 折疊目前遊標行到第5行, 可以透過行號折疊,也可以透過文字選擇折疊
zo 開啟遊標所在位置的折疊
zO 開啟遊標所在位置的折疊,以及嵌套的所有折疊
zc 關閉遊標所在位置的折疊
zC 關閉遊標所在位置的折疊,以及嵌套的所有折疊
zd 刪除遊標所在位置的折疊
zD 刪除遊標所在位置的折疊,以及嵌套的所有折疊
za 當遊標在關閉折疊上時,打開折疊,反之則關閉折疊
zA 和za類似,打開和關閉包括嵌套的所有折疊
zv 開啟目前遊標所在位置的折疊,只打開足夠的折疊使遊標所在的行不被折疊
zr 嵌套的折疊一層一層的打開
zR 打開所有折疊
zm 嵌套的折疊一層一層的關閉
zM 關閉所有折疊
會操作VIM中一個叫foldlevel的變量,zM和zR會設定foldlevel為最高級別,關閉所有折疊會設定foldlevel為0
zE 刪除所有的折疊
zF 在目前遊標所在行建立折疊。這樣可以先建立一對折疊符號,然後再在裡面寫內容
2,10fo 折疊第二行到第十行
[z 移動遊標到目前開啟的折疊開始位置
]z 移動遊標到目前開啟的折疊結束位置
zj 移動遊標到下一個折疊開始位置
zk 移動遊標到上一個折疊結束位置
巨集錄製以及播放
錄製宏,在普通模式按下q鍵(宏錄製是以q鍵啟動的),再按下字母w(字母隨意),表示該宏註冊為w, 然後完成操作後再次按下q表示完成錄製操作。
巨集播放, 在正常模式下,按下@w執行巨集錄製的所有操作。 @@是上次巨集的重複操作。 n@w, 就會執行n次w宏。
程式碼區塊註釋
按鍵ESC進入Normal模式,Ctrl V進入Visual Block選擇模式,選取需要註解的行,然後按鍵Shift i或s進入插入模式,在區塊選擇第一行行首鍵入註解符號#,然後按鍵ESC,稍等一會兒就可以完成程式碼區塊的註釋,此方法可以用來在每一行指定位置插入相同的字符
取消註釋,按鍵ESC進入Normal模式,按鍵CTRL V進入Visual Block模式,選擇程式碼區塊行首的註釋,然後按d完成取消註釋
g ctrl g 位元組統計,最後的ctrl g是組合鍵
ggvG= 格式化程式碼
」0p 多次貼上上次複製,「暫存器
Command-mode
:%s/$/sth/ 行尾追加sth
:%s/^M//g 替換掉dos換行符,^M使用Ctrl v Ctrl m即可輸入
:g/^/s*$/d 刪除空白行以及只有空格的行
:n1,n2 s/str1/str2/gic 替換行號n1到n2之間的字串str1為str2, g關鍵字表示一行出現多個,則都替換,如果沒有g,則只替換第一個, i關鍵字表示大小寫不敏感,即忽略大小寫,大寫的字母I表示大小寫敏感,這也是預設的。 c關鍵字表示替換前確認。每個關鍵字均可單獨使用
:%s/#.*//g 刪除#之後的字符
格式是[addr]s/來源字串/目的字串/[option] "s"表示替換操作,是"substitute"縮寫 [addr]包含: “n,m”:表示從第n行到m行 “%”:表示整份文件,等同於"1,$" “.,$":表示從目前行到文件結尾 [options]包含: ”g“:globe 表示全域替換 ”c“:confirm 表示替換前交互確認 ”p":表示逐行顯示(可以CTRL L恢復畫面) "i":ignore,不區分大小寫 省略得時候表示對第一個匹配得字串替換
/hansen 查找字符串hansen, n查找下一個匹配, N查找上一個匹配,2n查找下面第二個匹配
:help set 查看set指令的說明訊息
:set 顯示與系統預設值不同的設定參數,就是自己修改的那些設定
:syntax on|off 開啟和關閉程式的語法高亮
:set bg=dark|light 設定不同的背景色
文件操作
:w 將編輯的內容寫入文件中
:w! 將檔案強制在唯讀狀態時寫入,實際寫入還得看文檔權限
:q 離開vim
:qa! 退出所有文件,對所有文件不做修改保存
:x 退出文件並儲存文件的修改
:e fn 開啟另外一份文件
:n 跳到下一個文件
:N 跳到上一個文件
:bn 跳到下一個文件
:bp 跳到上一個文件
:ls 列出開啟的所有文件
:b2 顯示第二個文件
:q! 將至退出修改過的文件,丟掉所有修改
:wq 儲存後退出
:w fn 將檔案另存為檔案名稱fn
:r fn 將fn檔案讀入並追加到目前編輯檔案遊標後
:n1, n2 w fn 將n1到n2的內容儲存成fn文件
:n1,n2 d 將n1到n2行的所有內容刪除,d是刪除關鍵字
:! command 顯示離開編輯器並執行command指令
:r! command 執行command指令,將執行結果追加到遊標後
:sp fn1 上下分割畫面開啟另外一個文件
:vsp fn1 左右分割畫面開啟另外一個文件
:set nu 開啟顯示行號
:set hlsearch 搜尋到的關鍵字高亮
:set autoindent 開啟自動縮排
:set cursorline 開啟水平線
:set backup 是否自動儲存檔案,開啟後,每次開啟文件編輯的時候,原始檔案會命名為fn~
:set ruler 開啟後關閉右下角的狀態列說明
:set ic 在關鍵字搜尋的時候區分大小寫
:set showmode 開啟和關閉模式切換後的狀態,例如進入insert mode的時候,左下角會顯示--INSERT--
:set wrap 設定折行,即一行文字超過了螢幕,則在下一行顯示,這也是預設的
:set spell 開啟文字拼字偵測
:set list 顯示文字不可見字符,如換行符
可以在參數前加no實現反向設定,如:set nonu,關閉顯示行號
:set backspace=(012) 進入編輯模式,可以利用backspace來按鍵來刪除任意字符,但是某些distribution則不容許這樣。此時可以透過設定backspace來實現這個功能,=2,就是刪除任何字符,=0|1時,僅可以刪除輸入的字符,而無法刪除原來文字存在的字符
:set fdm=marker 開啟折疊標記,自動在折疊的開始與結束添加三個連續的花括號作為標記,可以在文本關閉後,依舊記錄折疊信息,需要每次打開都得設置這個環境,也可以把這個加入到~/.vimrc中,每次打開vim編輯器自動載入。可以在mark後的折疊"#註釋{{{1"添加註釋和級別號
:set fenc 查詢文件編碼
:set enc=utf8 轉換為指定的編碼
:set fileformat=unix 用來切換換行符,支援dos,unix,mac. fileformat可以簡寫為ff
:set sidescroll=0 當遊標到達螢幕邊緣的時候,自動擴展顯示1/2螢幕文本,設定為1, 可以實現更平滑的逐個字元擴展顯示,此設定需要設定nowrap
:set scrolloff=3 設定滾動行數
:set linebreak 設定VIM在適當的位置折行,即^|!*- ;:./?這些符號位置折行
:set breakat-=_ 設定將_底線從折行移除
:set showbreak=-> 在折行的位置顯示指示訊息
:set nolinebreak 恢復自訂折行
設定折行,在折行內可以透過gj或g<Down>來移動,向上移動為gk或g<Up>
:set ts=4 設定TAB為四個空格長度
:set expandtab 取代TAB為空格,設定後之後的tab被替換為ts數量的空格
%retab! 重新載入TAB,這樣原來的TAB也會替換為ts數量的空格
替換TAB為空格,!使用於處理非空白字元之後的TAB,即所有的TAB,若不加! ,則只處理行首的TAB
:set ts=4
:set noexpandtab
:%retab!
替換空格為TAB
tabe fn 使用VIM外掛minibuffer新建標籤頁功能,在一個新的標籤頁編輯檔案fn,
gt 切換到下一個標籤頁
gT 切換到上一個標籤頁
:tabr 切換到第一個標籤頁
:tabl 切換到最後一個標籤頁
:tabm [N] 把目前tab移到第N個tab之後
:map ^M I#<ESC> 設定快速鍵Ctrl m在遊標處所在行的行首插入#(#代表註解),然後在退出編輯狀態。 map是關鍵字,後面的是key和value。 key對應的是^M,這個key是快速鍵Ctrl v M輸入的,代表快捷鍵Ctrl M。 Value對應的是I#<ESC>, 表示依序執行這些快速鍵。 I表示切換遊標至行首並進入編輯狀態,#表示輸入#,<ESC>表示退出編輯狀態。
:ab email hualong1009@foxmail.com ab是關鍵字,該指令執行後,然後切換到編輯模式,輸入email後,會把email自動替換為郵件地址hualong1009@foxmail.com。適用於頻繁輸入同樣的長字串場景
:sort r /regex/ regex是正規表示式,在vim編輯器中對文字進行排序
:toHTML 將目前的頁面轉換為HTML
:reg 查看所有的暫存器狀態,記憶體是Vim用來儲存一些文字或操作細節的記憶體空間。每個空間都有一個標識符,以便隨後可以存取它
Insert-mode
ctrl [或ctrl c 組合鍵實作ESC按鍵功能,即退出編輯狀態
ctrl d 組合鍵左縮排
ctrl t 組合鍵右縮排
關鍵字和路徑補全
ctrl x -> ctrl n 透過目前正在編輯的檔案內容作為關鍵庫補全
ctrl n 也可以快速補全,沒有提示
ctrl x -> ctrl f 以目前目錄內的檔案作為關鍵字補全路徑文件
ctrl x -> ctrl o 以檔名作為語法補充,以wim內建的關鍵字補全
ctrl x i 行補齊
ctrl w 刪除遊標所在位置向前的單字
ctrl u 刪除遊標所在位置到行首
Visual-mode
使用方向鍵或h,j,k,l進行漫遊,選取對應的內容,也可以使用gg和G直接到檔案首或尾
ctrl v 區塊模式,區塊操作,和UE的區塊操作一樣
o 跳到遊標到選取區塊的另一個端點
U 將選取區塊中的內容轉換為大寫
O 跳轉遊標到區塊的另一個端點
aw 選中一個字
ab 選取{}括號中的所有內容,包含括號本身
aB 選取{}括號中的所有內容
ib 選取括號內的內容,不包含括號
iB 選取括號中的所有內容
va 當遊標在"",'',(),{},[]當中時候,va表示選取""內的所有內容包含雙引號
vi 當遊標在"",'',(),{},[]當中時候,va表示選取""內的所有內容不包含雙引號
> 塊右移
< 區塊左移
y 複製區塊
d 刪除區塊
~ 切換區塊中內容的大小寫
在該模式下選擇區域後直接輸入:, VIM會自動補全為:'<,'> 這個是可視模式下選區的替換操作,表示操作範圍,類似與製定n1, n2
vim編輯文本
vim file 編輯一個文件
vim fn1 fn2 ... 同時編輯多個文件,預設只顯示第一個文件,也就是file1
vim -on fn1 fn2 ... 上下分割畫面同時編輯多個文件
vim -On fn1 fn2 ... 左右分割畫面開啟多個文件
vim -b ...用二進位開啟文檔
vim num 開啟文件並定位到num行
vimdiff a.txt b.txt 比對文字
vimdiff文字比對
zc 折疊行
zo 打開折疊
]c 跳到下一個不同處
[c 跳到上一個不同處
Ctrl w w 左右或上下切換窗口
dp 把遊標所在的行複製到另一個檔案對應的行中
do 把比對檔案對應的行複製到遊標所在位置的行