Friday, September 23, 2011

VIM進階設定

 
 

Sent to you by Danny via Google Reader:

 
 

via Hsian Studio by Clockwork Box on 10/7/09

最近去coscup2009才發現原來有把vim用到神領域的人,真有超佩服他的,所以最近又在玩vim的一些功能,以下是我的一些心得分享。

* 編碼的設定

我的環境是zh_TW.UTF-8那如果別人給我一個big5編碼的檔不就不能開了,不過vim會做轉碼的動作,所以可以放心。

在.vimrc裡面加入
set fencs=utf-8,big5 "vim開檔自動判斷檔案編碼先從utf-8開始
set fenc=utf-8 "建立新檔的時候以什麼編碼建立
set enc=utf-8 "vim所使用的內部編碼

簡單來說三個例子

1、檔案編碼為utf-8

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為utf-8,而它與我們vim的內部編碼相同都是utf-8,所以直接就可以正確顯示。

2、檔案編碼為big5

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為big5,而它與我們vim的內部編碼不同,我們內部編碼是utf-8,所以vim會呼叫iconv把讀出來的big5轉換成utf-8編碼,就可以正確顯示,而如果我們修改完內容寫回檔案的時候,vim又會將utf-8自動轉換成big5寫回檔案。

3、開新檔案

由於設定fenc=utf-8所以檔案在建立的時候就會以utf-8來編碼,雖然不設定的話,預設vim會讀取目前locale所使用的語系來建立檔案,但是如果常常語系改來改去的話,常常建立的檔案自己都不知道是什麼編碼,所以加入這個設定。

* 視窗分割

vim可以把一個視窗分割成幾個視窗,可以縱切也可以橫切,通常我使用縱切的話分割成左右兩個畫面,這樣可以同時開兩個程式碼而且可以對照著看內容,非常的方便。

ctrl+w, v 切割垂直分割
ctrl+w, n 切割水平分割
ctrl+w, q 關閉分割
ctrl+w, - 縮小分割大小
ctrl+w, + 放大分割大小
ctrl+w, = 平均分割大小
ctrl+w, 方向鍵 移動聚焦視窗

* 在程式碼中加速移動(必學)

※注意:要在normal mode下
[{ or [( 找左邊界第一個出現的{ or (
]} or ]) 找右邊界第一個出現的} or )
f@ or f" 向右找第一個出現匹配的符號或字元
$ 移到行尾,等於END
^ 移到行首,等於HOME
H 移到畫面最上方
M 移到畫面中間
L 移到畫面最下方
c$ 修改到行尾
d% 移除到行尾
dw 移除一個單字
d^ 移除到行首
% 找最近的() or {}

範圍選取技

※以下看到的"|"是「或」的意思
v | c | d + i | a + { | [ | " | '

v: visual
c: change
d: delete
i: inner object
a: an object
{},[],"",'': region

va{ 選取最小範圍的{}部份
vi{ 選取最小範圍的{}部份(但不包含{})
di" 移除最小範圍的""部份(但不包含"")
ci( 修改最小範圍的()部份(但不包含())
va{= 選取最小範圍的{}部份並排列整齊

* vim plugins

vim官網有非常多的plugin可以用,如果興趣可以自己上去慢慢找

NERD_tree.vim 目錄列表插件
taglist.vim 函式列表插件(需安裝ctags)

要加入plugin先在家目錄下面建立.vim/plugin目錄
> mkdir -p ~/.vim/plugin
之後把下載的plugin解壓縮之後都放到plugin目錄下面就行了,之後看一下它所附上的說明檔, 看要怎麼來設定使用這個插件,之後在加入對映的快速鍵來啟動插件。

> vim .vimrc 加入
"ctags command set for bsd
let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"
"functional mapping
nmap <F1> :NERDTreeToggle<CR>
nmap <F2> :TlistToggle<CR>

我把F1, F2對映到這些plugin的啟動上面

* 總結

vim是個非常強大的編輯器,其實用起來像在打電動,所有很多的連續技,如果熟練的話,那麼寫程式或是編寫文件會大大的縮短時間,使工作更有效率。

* 附上投影片
Vim Hacks
View more documents from c9s.


 
 

Things you can do from here:

 
 

No comments: