在編程領域中, 編輯器之戰的兩位主角 Vi 和 Emacs 經歷幾十年的歲月後, 直到現在依然擁有許多信徒; 而隨著時間的過去, Vi (Visual,Bill Joy 於 1976 年發表 ) 的功能不斷地被增強, 最後演化出目前受歡迎的 Vim; Vim 不管是可擴展性或高效的編輯速度, 都讓一般的編輯器難以望其項背, 也因此有了編輯器之神的封號! 不過 GNU 計劃的創始人 RMS 說它比較像魔鬼的編輯器 (因為 vi-vi-vi 是獸名數目 XD )
關於 Vim 的詳細使用方法請查詢官方文件, 這裡只介紹我自己常用的一些操作。
環境設定
- ~/.vimrc 環境設定檔
- ~/.vim Vim 專屬的資料夾
符號定義
為方便之後的說明,先在此定義兩個按鍵符號
C
表示 CtrlM
表示 Alt
常用模式
- command mode 按
Esc
- insert mode 在 command mode 中,按
i
或a
- plain visual mode 在 command mode 中,按
v
- block visual mode 在 command mode 中,按
C
+v
- command line 在 command mode 中,按
:
存取檔案
vi file_name
開啟檔案:w
存檔:q
離開:q!
強制離開(不須先存檔):e file_name
編輯其它檔案
字元操作
i
在游標所在處開始輸入a
從下個字元開始輸入x
刪除一個字元o
插入空白行並開始輸入
字元操作
d
w
刪除一個單字d
W
刪除一個單字(忽略特殊字元)
拷貝和貼上
yy
拷貝游標所在的那一行3
yy
拷貝連續三行dd
剪下游標所在的那一行3
dd
剪下連續三行y
將標記區域 yank 到剪貼簿p
將剪貼簿的資料貼上
段落操作
J
連接下一行d
$
從游標所在刪除到本行結尾d
^
從游標所在刪除到本行開頭D
從游標所在刪除到本行結尾
暫存區操作
ma
"c
y
'a
將選擇區段拷貝到 register c"c
p
將 register c 的資料貼上ma
"+
y
'a
選擇區塊並拷貝到系統的剪貼板3
"+
yy
將連續三行 yank 到系統的剪貼板:%y+
將檔案內容 yank 到剪貼板
移動游標
gg
第一行開頭G
最後一行的開頭^
移到游標所在行的開頭$
移到游標所在行的結尾C
+f
下一頁C
+b
上一頁M
+f
往後移到一個單字M
+b
往前移到一個單字M
+F
往後移到一個單字並且標記M
+b
往前移到一個單字並且標記
切換目錄
:cd %:h
將工作目錄改變到編輯的檔案下:lcd %:h
僅將目前視窗的工作目錄改變到編輯的檔案下autocmd BufEnter * silent! lcd %:p:h
自動改變工作目錄到編輯的檔案下
切換檔案
gf
跳到關聯檔 ( goto file )C
+^
回到上一個檔案
分頁操作
:tab_new
新分頁:tabprevious
上一個分頁:tabnext
下一個分頁:ab tn tab_new
將 tab_new 縮寫為 tn
視窗操作
:vs
垂直分割:sp
水平分割C
+w
v
垂直分割-
C
+w
s
水平分割 -
C
+w
left[right] arrow
左[右]切換視窗 C
+w
up[down] arrow
上[下]切換視窗C
+w
h[l]
左[右]切換視窗C
+w
k[j]
上[下]切換視窗
其他操作
u
: 回到上一步-
C
+r
: 回到下一步 -
:set nu
顯示行數 :set nonu
不顯示行數:syntax enable
語法顏色-
:set ai
自動縮行 -
:!外部命令
執行外部命令,例如:!ls
-
C
+r
%
在 insert mode 下貼上檔案路徑
自定按鍵
map <C-k> :tabprevious <CR>
用C
+k
映射:tabpreview
map <C-j> :tabnext <CR>
用C
+j
映射:tabnext
好用的 plugins
rails.vim: Rails 套件(語法顏色,快速切換檔案... 等)
-
:Rcd 目錄
切換目錄(從專案目錄出發) -
:Rmodel 檔案
編輯 model 檔案 -
:Rview 檔案
編輯 view 檔案 -
:Rcontroller 檔案
編輯 controller 檔案
snipMate: 加入程式片段
Tab
加入程式片段
ctrp: 模糊搜尋
C
+p
啟動模糊搜尋
fencview.vim: 自動偵測多國編碼
:FencAutoDetect
啟動偵測
nerdtree.vim: 檔案瀏覽器
:e .
瀏覽工作目錄
supertab.vmb: 補全程式碼
Tab
補全程式碼
雖然 Vim 對初學者而言需要投入多一些的時間來熟悉, 但只要上手後, 就會大幅提升你的編程效率。
comments powered by Disqus