Vim 高級技巧
常用技巧
命令執行(注意大小寫不同)
使用說明
使用技巧
i
以插入字元方式進入編輯模式
與 a 同為進入編輯模式,兩者差別只有游標的起始位置不同
a
以附加字元方式進入編輯模式
o
插入一個空白行並編輯
h j k l
操控游標的移動,h--向左, j--向下, k--向上, l--向右
當遇到部份作業系統不支援方向鍵使用時,可用此方式代替
:1 : 22
游標移到第一行 游標移到第22行
程式除錯找特定行號時會用到
gg
游標移至檔首
G
游標移至檔尾
編輯大檔案時要移到檔尾不用一頁一頁捲
0 / $
游標移至行首/行尾
w / W
游標移至下一個單字/空格
游標右移
b / B
游標移至上一個單字/空格
游標左移
x
刪除目前字元
J (Shift + j)
移除目前行尾的斷行
上下兩行做合併
{
游標移至上一個段落
}
游標移至下一個段落
:wq
存檔後離開
:w new.txt
另存新檔成 new.txt
:w !sudo tee %
以 sudo 模式存檔
如果存檔時遇到權限不足,且有 sudo 的權限時的方法
:q!
不存檔離開
如不小心編錯內容,只要沒存檔前就可以用此法離開,保存原始內容
:set nu!
行號顯示切換
:set hlsearch
Highlight 搜尋的關鍵字
有些系統預設已經啟用
:set cuc!
直欄游標切換
編輯 json, yaml 格式
: syntax on
啟用 Hihjlight 顯示
d dd
刪除標記的內容 刪除目前這一行
10dd
刪除目前以下10行(含本列)
y yy
複製標記的內容 複製目前這一行
3yy
複製目前以下3行(含本列)
p
貼上
/keyword
搜尋文字
/\KeyWord
搜尋文字(不分大小寫)
/S[Uu]SE
搜尋特定字元不分大小寫
*
快速搜尋目前游標的單字
:%s/old/new/g
:%s/old/new/gc
全文內容包含有old字元的都會取代成new字元
gc: 啟用提示
:s#/usr/local/bin#/usr/sbin#g
以 # 作為分隔符號
:10,30 s/old/new/g
第10-30行置換 old 為 new
:%s/old1\|OLD2/new/gc
全文置換 old1與OLD2 為 new
:/
/,/<\/table>/g/^$/d
包含 的內容刪除
:%s/\t/ /g
置換 Tab 成4個空白
寫程式時有用
/\s\+$
搜尋行尾的空格字元並 Highlight
這可以配合 :set hlsearch 使用, not support AIX
:%s/\s\+$//
移除所有行尾的空格字元
not support AIX
~
大小寫互換
:%s/[ctrl+V and ctrl+M]//g
消除斷行符號 ^M
dG
清除游標以下所有內容
dgg
刪除游標以上所有內容
:1,$d
清空所有內容
:1,22d
清除 1-22 行
:23,$d
清除 23 行以下所有內容
:! ls -l
執行外部 SHELL 指令
:!! 上一個指令
:vsplit my.file
左右分割視窗且左邊載入 my.file
ctrl + w + w 切換視窗
:split my.file
上下分割視窗
ctrl + w + w 切換視窗
:sort
:sort!
:sort u
:sort i
:sort n
排序
反向排序
排序並移除重複行
忽略大小寫的排序
以數字排序
u Ctrl + r
Undo Redo
:g/^$/d
:4,100g/^$/d
:g/pattern/d
:!g/pattern/d
全文移除空白行
第4-100行移除空白行
移除符合 pattern 的行
移除不符合 pattern 的行
[range]g/pattern/cmd
其他技巧:
跳到上次編輯的行號: '.
開啟指令視窗: :terminal
:below terminal , :bel term
:vertical terminal , :vert term
切換視窗: Ctrl + w + w
編輯模式: Ctrl + w + N (切換回指令列: hi )
搜尋檔案並開啟: :find your-script.sh (可用 tab 自動補全與 * 符號)
:find *.sh
Visual mode
切換至字元模式: V
切換至行模式: Shift + V
整行文字: Shift + V
文字起始點至結束點: V
切換至區塊模式: Ctrl + V
區塊左邊插入文字: I
區塊右邊插入文字: A
選擇區塊內至行尾的文字: $
選擇與操作
游標: 上/下鍵
下一個單字: w
下一個單字頭是點: f .
下一個段落: }
取消選擇: Esc
複製選擇區文字: y
貼上文字: p
刪除選擇區的文字: d *(Delete)*
移動選擇區的文字: d > Move to target line > p
取代選擇區的文字: r *(Replace)*
變更選擇區的文字: c *(Change)*
復原最近刪除文字: u *(Undo)*
快速選擇目前引號("或')內的文字: i + " 或 '
快速移動游標技巧
搜尋 MyKeyWord: /MyKeyWord
往下移動至相同文字的位置: *
標示關鍵字: :set hlsearch
輸入即顯示關鍵字: :set incsearch
段落 {},[]() 的結束符號: %
返回目前位置的段落起始符號 { : [{
移動游標的的顯示位置(行號不變): zt (Top), zz (Middle), zb (Bottom)
移動游標至畫面上其他行: H (Top), M (Middle), L (Last Line)
整頁移動: Ctrl+b (上一頁), Ctrl+f (下一頁)
整行移動: Ctrl+y (向上), Ctrl+e (向下)
取代文字技巧
逐一取代:搜尋文字 /old -> cw -> 輸入取代文字 new -> 離開編輯模式 Esc -> 下一個搜尋 n -> 重複上次變更 .
選擇多行取代:
行模式:shift + v
選擇多行
取代關鍵字: :s/old/new/g ( 反斜線也可以用井字取代 )
複製整行
# 複製指定的行號,然後移到要貼上的行,輸入 p 貼上
:<行號>yank
# 複製指定的行號,貼上至目前行的下方. 使用 copy 或 t
:<行號>copy.
:<行號>t.
# 複製目前行下方第 10 行文字,並貼上至目前行
:+10t.
# 複製目前行上方第 10 行文字,並貼上至目前行
:-10t.
# 複製連續多行文字(33 ~ 44)至目前位置
:33,44t.
在文字區段的每行行首插入多個空白字元
Ctrl + v
移到第一行的開頭處
往下移最後行
Shift + I
輸入要插入的空白
Esc 跳離後完成
在文字區段的每行行尾插入`;`
移到第一行的中間處
Ctrl + v
往下移至最後行
Shift + $
Shift + A
輸入要插入的文字 ;
Esc 跳離後完成
快速註解
Shift + v
選取多行
:norm i# (加上註解符號)
:norm x (移除註解符號)
另存新檔
Shift + v (Visually Seleting)
選取多行
:w /path/to/newfile (Save as newfile)
gv (reselect the last visual selection)
d (delete that selection)
檔名自動補全 (auto-complete)
進入編輯模式
輸入 /etc/profile(任意路徑)
Ctrl + x -> Ctrl f
Tutorials
Youtube Channel - Vim (TheFrugalComputerGuy)
VIM Colors Online
VimTricks