手動 Fold
- zf 將選取的範圍 fold 起來
- zd 刪除游標上的 fold
- zo 打開游標上的 fold
- zO 遞迴地打開游標上底下所有的 fold
- zc 把游標上的 fold 折起來
- zC 遞迴地折起游標上底下所有的 fold
- zM 把整個檔案所有的 fold 都折起來
- zR 把整個檔案所有的 fold 都打開
- :2,6fold 將 2-6 行 fold
- :mkview 記憶手動 fold
- :loadview load 手動 fold
檔案比較
- vimdiff FILELEFT FILERIGHT 如果還沒開啟某個檔案,可以在指令列這樣下
- diffsplit FILE_RIGHT 水平分割開啟比較檔案
- vertical diffsplit FILE_RIGHT 垂直分割開啟比較檔案
- :diffthis 將看到的視窗使用檔案比較功能
- :diffoff 關閉檔案比較
- :set scrollbind 同步捲動
- :set noscrollbind 停止同步捲動
- ]c 移到下一個差異點
- [c 移到上一個差異點
- dp 將目前的內容放置到另一個視窗
- do 將另一個視窗的內容放置到目前的視窗
- :diffupdate 手動刷新比較結果
自動 Fold
-
set foldmethod =
- manual 手動摺疊
- indent 級別折疊
- syntax 語法折疊
- marker 所有文本將按照特定標記(默認為{{{和}}})自動摺疊
- set foldlevel=0 控制可以看見的折疊層級
搜尋與取代
- / 在 c-mode 的情形下,按 / 就會在左下角出現一個 /,然後鍵入您要尋找的字串,按個 Enter 就會開始找
- ? 和 / 相同,只是 / 是向前(下)找,? 則是向後(上)找
- n 繼續尋找
- N 繼續尋找(反向)
- /\c 不分大小寫搜尋,譬如要搜尋 test,/\ctest 可以搜尋到 test, Test, tEst 等等
- :set nohlsearch 關閉搜尋的 highlight 效果
- :%s/a/b/gi 不分大小寫將 a 取代為 b
- :2,6s/a/b/gi 不分大小寫將 2,6 行 a 取代為 b
強大的檔案搜尋 vimgrep
notepad++ 跟 Dreamweaver 都可以針對某個資料夾的檔案做原始碼關鍵字的搜尋,沒想到 vim 也可以,真的太強大了,假設今天要搜尋
test 資料夾裡面所有含 $name 的檔案,code 只要這樣下。
:vimgrep /$name/ c:\AppServ\www\test\*
不分大小寫的話直接加上 \c 就可以了。
:vimgrep /\c$name/ c:\AppServ\www\test\*
複合式的搜尋,下方指令會搜尋當下資料夾的檔案跟 template 下的所有檔案
:vimgrep /$name/ * template/*
搜尋包含全部子目錄
:vimgrep /$name/ **/*
vimgrep 其他功能介紹
:cw
- 開啟符合檔案列表
:cn
- 下一個檔案
:cN
- :cn
的相反
:cp
- 上一個檔案
:cP
- :cp
的相反
:cc
- 顯示目前編輯的檔案
小技巧
修改符號內容
假設有個內容是這樣 "aaa-bbb-ccc"
,如果我們移到 aaa
按下 cw
想要修改內容,會變成 "-bbb-
ccc
,但其實我們的目的是要修改掉整個 "" 的內容怎麼辦呢,只要在該 "" 範圍內、按下 ci"
,便會把 ""
內的內容作變更的動作,同理,要清除可以用 di"
,複製則是 yi"
,若使用 ca"
則是把 " 一併修改,ciw
會修改一個整個字,跟
ci
的差別在於 ci
只會修改目前 cursor 之後的字,而 ciw
會判斷前面,ci(
以及 ci{
會修改 ( 以及 {
裡面的內文,ca(
ca{
會連 ( 以及 { 一起取代掉。
修改標籤內容
另外一種常遇到的情況就是 <a href='"#"'>aaa-bbb-ccc</a>
,我們想要修改 <a>
標籤內的內容,此時只要使用
cit
,t
= tag 的意思,cat
則是連 tag 本身都修改。
段落前後加上文字
如果今天有一個段落的內容如下:
aaaaa
bbbbbbb
ccccc
今天想要在前方或後方加入 x 這個字的話,前方可能還好,可以用區塊編輯的方法,但後方並沒有對齊,不能這樣做,此時我們可以用取代的方式。
:1,3s/^/x/gi
- 前方加 x
:1,3s/$/x/gi
- 後方加 x
複製、修改、刪除區段
dfx
- 刪除到 x
dtx
- 刪除到 x 為止
d/word
- 刪除到 word 為止
此技巧可以搭配數字使用,例如說 d4f"
,便會刪除至 4 個 "
。
Hot Key
- $ 行尾
- :2,6m12 將第 2 行至第 6 行移動到 12 行之後
- :2,6t12 將第 2 行至第 6 行複製到 12 行之後
- :command! 這個 ! 強迫中止目前正在編輯的動作,而去執行所下的指令
- :find **/aa.php 在所有目錄下搜尋 aa.php
- :lcd 改變當下目錄
- :m+ 將游標所在位置往下移動一行
- :m-2 將游標所在位置往上移動一行
- :m20 將游標所在位置移到第 20 行
- :pwd 顯示當下目錄
- :q 及 :q! 是對目前編輯中的檔案作用
- :q 如本文有修改而沒存檔,會警告,且無法離開(quit)
- :q! 捨棄所有修改,強迫離開
- :qa 或 :qa! 來整個離開 vim,a 就是 all 的意思
- :sort i 忽略大小寫
- :sort n 依照字數排序
- :sort u 移除重複的內容
- :sort 昇冪排序
- :sort! 降冪排序
- :sp 水平分割視窗
- :tabc 關閉標籤頁
- :tabe filename 在新標籤頁打開一個檔案
- :tabl 最後一個標籤頁
- :tabm [N] 移動到第 N 順位
- :tabn 下一個標籤頁 或是 gt,C-PageDown
- :tabo 關閉其他標籤頁
- :tabp 上一個標籤頁 或是 gT,C-PageUp
- :tabr 第一個標籤頁
- :tabs 顯示所有標籤頁
- :vs 垂直分割視窗
- :w 檔名 另存他檔不加檔名就是寫入原檔(write)
- :wq 存檔後離開縱使檔案未曾修改也是會再存一次檔
- :x 也是存檔後離開,但如果檔案沒有修改,則不會做存檔的動作
- >> 整行向右移一個 shiftwidth(預設是 8 個字元,可重設)
- >> 整行向左移一個 shiftwidth(預設是 8 個字元,可重設)
- ^ 行首第一個字元
- a 在游標所在字元後開始輸入文字(append)
- A 在行尾開始輸入文字
- B 同上,但會忽略一些標點符號
- b 移至前一個字字首
- c confirm,每次替換前會詢問
- C 取代至行尾,即游標所在處以後的字都會被替換或 c$
- c0 取代至行首,或 c^
- cc 取代整行內容或大寫 S 亦可
- Crtl+r 這個也是很重要,就是 redo 鍵
- Ctrl+w+< 增加寬度
- Ctrl+w+= 平均視窗尺寸
- Ctrl+w+> 減少寬度
- Ctrl-b 整個視窗往上移動
- Ctrl-d 在編輯模式下,會將開行往左移動
- Ctrl-e 視窗逐行下移
- Ctrl-f 整個視窗往下移動
- Ctrl-t 在編輯模式下,會將開行往右移動
- Ctrl-v 這是方塊標示(block visual),可縱向標示矩形區域再按一次 Ctrl-v 就會結束 v-mode結束 v-mode 的方式亦可使用 Esc 鍵,或統一使用 Ctrl-c
- Ctrl-w f 開一新視窗,並編輯游標所在處之 word 為檔名的檔案
- Ctrl-w j 移至下視窗
- Ctrl-w k 移至上視窗
- Ctrl-w n 即 :new開一空的新視窗
- Ctrl-w o 即 :only! 使游標所在之視窗,成為目前唯一顯示的視窗其它視窗會隱藏起來
- Ctrl-w q 即 :q 結束分割出來的視窗
- Ctrl-w r 向右或向下輪替視窗
- Ctrl-w R 與上方相反方向
- Ctrl-w s 即 :sp(lit),會開一新視窗,且原檔分屬兩個視窗
- Ctrl-w x 交換同列或同欄視窗位置
- Ctrl-w X 與上方相反
- Ctrl-w++ 增加高度
- Ctrl-w+- 減少高度
- cw 替換一個英文字(word),中文不適用(change)
- D 刪至行尾,或 d$(含游標所在處字元)
- d 刪除標示區內容
- d0 刪至行首,或 d^(不含游標所在處字元)
- d1G 刪至檔首或 dgg(只能用於 vim)
- dd 刪除一整行(delete line)
- dG 刪至檔尾
- dw 刪除一個字(delete word)不能適用於中文
- e 不顯示 error
- E 同上,但會忽略一些標點符號
- e 移至後一個字字尾
- g globe,不詢問,整行替換
- G 移至檔尾(最後一行的第一個非空白字元處)
- gg 移至檔首(第一行之第一個非空白字元處)
- gUU 整行轉大寫
- guu 整行轉小寫
- g~~ 整行大小寫反轉
- h j k l 左 下 上 右
- H 移至螢幕頂第一個非空白字元
- i ignore 不分大小寫
- i 在游標所在字元前開始輸入文字(insert)
- I 在行首開始輸入文字
- J 將下一行整行接至本行(Joint)
- L 移至螢幕底第一個非空白字元,內文內容並未動,只是游標在動而已
- M 移至螢幕中間第一個非空白字元
- O 在游標所在行上開一新行來輸入文字
- o 在游標所在行下開一新行來輸入文字(open)
- P 大寫 P 代表貼至游標前(上)
- p 小寫 p 代表貼至游標後(下)
- pattern 就是要被替換掉的字串,可以用 regexp 來表示
- R 取代字元至按 Esc 為止
- r 取代游標所在處之字元vi(m)
- range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表
- resize n 設定視窗高度
- s 替換一個字元為您所輸入的字串和 R 不同,R 是覆蓋式的取代,s 則是插入式的取代,您可親自實驗看看ㄟ!是小寫的 s
- Shift-> 標示區內容向右移一個 Tab
- Shift-< 標示區內容向左移一個 Tab
- Shift-h 移到該視窗頂端
- Shift-l 移到該視窗尾端
- Shift-m 移到該視窗中央
- string 將 pattern 由 string 所取代
- U 在游標沒離開本行之前,回復所有編輯動作
- u 這個太重要了,就是 undo,傳統的 vi 僅支援一次 undo,vim 及 elvis 就不只了,vim 是沒有限制的
- V 大寫 V,這是行標示(line visual),按下 V 後會整行標示起來(包括行首前空白的部分),您移動上下鍵,會標示多行mouse 連按三次左鈕,也是屬於此類的標示再按一次 V 就會結束 v-mode
- v 小寫 v,這是屬於字元標示(character visual),按下 v 後您就可以移動游標,游標走過的地方就會標示起來再按一次 v 就會結束 v-mode您用 mouse 拉出的標示區也是屬於這類的標示
- vertical resize n 設定視窗寬度
- W 同上,但會忽略一些標點符號
- w 移至次一個字(word)字首
- windows 系統下 Ctrl-v 是複製鍵,可以使用 Ctrl-Q 來替代
- X 刪除游標前之字元不可使用 Backspace 鍵
- x 刪除游標所在處之字元在 vim 及 elvis 亦可用 Del 鍵
- y 複製標示區內容
- y$ 複製至行尾含游標所在處字元
- y1G 複製至檔首
- y2w 複製兩個字
- y^ 複製至行首,或 y0不含游標所在處字元
- yG 複製至檔尾
- yw 複製一個 word
- yy 複製游標所在行整行或大寫一個 Y,2yy 或 y2y 複製兩行
- zb 將游標位置拉至螢幕底部
- zt 將游標位置拉至螢幕頂部
- ZZ 和 :x 完全一樣,隨您高興用哪一個
- zz 將游標位置拉至螢幕中間
- ~ 游標所在處之大小寫互換當然不能用於中文