vim文字編輯器是vi文字編輯器的強化版本,兩者都是運行在文字介面(CLI)上。vim支援多次復原、多窗格、程式碼語法高亮和滑鼠控制等多種功能,經常在Linux和macOS作業系統上被用來查看與編寫程式碼,尤其是透過SSH連線來操作系統的時候更為常用。由於vim是如此常用的文字編輯器,且就算在別台電腦上都有可能會使用SSH連回自己的主機使用vim來編輯文字檔案,以至於替vim設計出一個屬於自己的編輯環境是非常有利於工作效率的。但究竟要怎麼設計出自己的vim編輯環境呢?又能做到怎麼樣的效果呢?本篇文章將會透過.vimrc
檔案來一步步打造屬於個人的vim環境。
首先來看看沒設定.vimrc
檔案時,開啟Java原始碼檔案的結果。
從上圖可以看到顯示出來雖然有程式碼高亮和成對括號標示,但沒有顯示行號和游標行列提示,僅有顯示游標座標,這樣並不利於程式碼的閱讀。然而,加入自己的.vimrc
檔案後,就可以顯示出如下圖的效果,使vim的文字配色更能符合自己的喜好,也能顯示行號和游標行列提示(游標十字瞄準線),讓程式閱讀更加迅速!
使用.vimrc
檔案進行vim環境設定
vim文字編輯器有自己的命令列模式,使用者可以在vim內下達一些指令來完成特定的動作,像是設定環境變數、快速鍵、配色等等,都可以透過vim文字編輯器的命令列模式來完成。vim在開啟的時候會先去讀取使用者家目錄下的.vimrc
檔案(~/.vimrc
),並且自動執行這個檔案中的所有指令。也就是說,.vimrc
檔案可以讓使用者自行決定其vim文字編輯器應該要透過環境變數開啟哪些特定的功能(如行號顯示),也可以讓使用者加入自己的快速鍵來完成指定的工作,最重要、同時也是最常用的就是能事先指定配色了!
讓vim能支援256色
vim的t_Co
環境變數決定了vim支援的顏色數量,如果要讓vim顯示出來的效果好看一些,建議將這個環境變數設為256
,也就是vim最大能支援的256色。
在.vimrc
檔案中添加以下指令:
透過顏色方案來做好全套配色
vim有顏色方案(colorscheme)的功能,可以讓使用者使用colorscheme
或是colo
指令來設定vim的配色主題。vim通常會內建幾個顏色方案,存在/usr/share/vim/vimNN/colors
(NN
是vim的版本號碼)目錄中,副檔名為.vim
。以下挑幾個內建的顏色方案來給大家看看:
default
koehler
darkblue
desert
shine
ron
torte
筆者覺得內建的幾個顏色方案中,torte
是看得最順眼的一個。如果要將torte
作為vim的初始顏色方案,可以將以下指令寫入.vimrc
檔案中:
或是縮寫成:
除了官方內建的顏色方案能使用之外,網路上也有很多地方有提供他人製作的vim顏色方案,只要將該顏色方案的.vim
檔案放置於~/.vim/colors/
目錄中,即可使用colorscheme
或是colo
指令來套用。例如從vim官方網站找到的lucid.vim
就可以放置在那個目錄中,並使用以下指令來套用:
顯示游標所在的列
若要顯示游標所在的「列(row)」,也就是標示出游標所在的水平方向,可以使用以下指令來開啟:
如果要關閉,可以使用以下指令來關閉:
如果覺得預設標示列的方式只是用底線,感覺很醜而且又會擋到真正的底線字元的話,可以使用highlight
或是hi
指令來調整,如下:
以上指令中,cterm
用來調整文字上的變化:none
表示維持不變;underline
表示增加底線;bold
可以將文字加粗;reverse
會將顏色反白。
ctermbg
和ctermfg
分別用來調整背景色和前景色,顏色可以使用vim的256色編號(如下圖表),也可以使用以下的16色英文單字:Black
、DarkBlue
、DarkGreen
、DarkCyan
、DarkRed
、DarkMagenta
、Brown
(DarkYellow
)、LightGray
(LightGrey
、Gray
、Grey
)、DarkGray
(DarkGrey
)、Blue
(LightBlue
)、Green
(LightGreen
)、Cyan
(LightCyan
)、Red
(LightRed
)、Magenta
(LightMagenta
)、Yellow
(LightYellow
)、White
。
調整之後的效果如下:
注意highlight
或是hi
指令應寫在colorscheme
之後。
顯示游標所在的行
若要顯示游標所在的「行(column)」,也就是標示出游標所在的垂直方向,可以使用以下指令來開啟:
如果要關閉,可以使用以下指令來關閉:
如果覺得預設標示行的方式不好看的話,同樣也可以使用highlight
或是hi
指令來調整,如下:
調整之後的效果如下:
注意highlight
或是hi
指令應寫在colorscheme
之後。
開啟/關閉vim的程式碼語法高亮支援
使用以下指令可以開啟vim的程式碼語法高亮功能:
使用以下指令可以關閉vim的程式碼語法高亮功能:
注意syntax
指令應寫在highlight
之前。
開啟/關閉vim的vi相容模式
使用以下指令可以開啟vim的vi相容模式:
開啟了之後,會有許多屬於vim的功能無法被使用。一般都會使用以下指令來關閉vim的vi相容模式:
建議在一開始就先執行這行指令。
開啟/關閉vim的行號顯示
使用以下指令可以開啟vim的行號顯示:
調整之後的效果如下:
使用以下指令可以關閉vim的行號顯示:
開啟/關閉vim的游標座標顯示
使用以下指令可以開啟vim的右下角游標座標顯示:
使用以下指令可以關閉vim的右下角游標座標顯示:
開啟/關閉vim的忽略大小寫搜尋
使用以下指令可以開啟vim的忽略大小寫搜尋:
在ignorecase
狀態下,若搜尋the
,則THE
、tHE
、The
……等子字串都算是符合搜尋條件。
使用以下指令可以關閉vim的忽略大小寫搜尋:
如果要在noignorecase
的狀態下忽略大小寫進行搜尋的話,要在搜尋樣本中加上\c
。
開啟/關閉vim的智慧大小寫搜尋
使用以下指令可以開啟vim的智慧大小寫搜尋:
如果smartcase
和ignorecase
都被開啟,此時搜尋the
,則THE
、tHE
、The
……等子字串都算是符合搜尋條件;但搜尋The
,則只有The
符合搜尋條件。
使用以下指令可以關閉vim的智慧大小寫搜尋:
開啟/關閉vim的搜尋結果高亮提示
使用以下指令可以開啟vim的搜尋結果高亮提示:
調整之後會將搜尋到的所有結果進行高亮顯示,效果如下:
使用以下指令可以關閉vim的搜尋結果高亮提示:
如果覺得vim預設的高亮提示不好看的話,可以使用highlight
或是hi
指令來調整,如下:
調整之後可以將搜尋結果反白顯示,效果如下:
注意highlight
或是hi
指令應寫在colorscheme
之後。
開啟/關閉vim的加強版搜尋功能
使用以下指令可以開啟vim的加強版搜尋功能:
開啟incsearch
之後,在輸入搜尋樣本的期間就會開始進行搜尋了,不用等到樣本全部輸入完成。如果有開啟hlsearch
,則會在樣本確定輸入完成後(按下Enter)才會把所有符合樣本的結果高亮顯示。
使用以下指令可以關閉vim的加強版搜尋功能:
開啟/關閉vim的自動縮排功能
vim的自動縮排有autoindent
、smartindent
和cindent
三種。autoindent
是最基本的縮牌方式,會在建立出新的一行的同時,自動對齊上一行的縮排。smartindent
則是會在autoindent
的基礎上,針對{
(左大括號)後所產生的新行,再多往內縮排一次,且若新行的開頭是}
(右大括號),則會取消往內縮多排一次的動作。而cindent
則是會在smartindent
的基礎上,加入簡單的C/C++、Java等程式語法結構的判斷,如果{
是發生在註解之內,就不會進行縮排,並且也不是根據新行的上一行來決定新行的縮排,而是會根據新行所在的程式區塊(block)來決定,另外也會根據其他符號進行縮排。
使用以下指令可以開啟vim的cindent
自動縮排功能:
使用以下指令可以關閉vim的cindent
自動縮排功能:
vim的TAB和空格處理
使用以下指令可以開啟vim的TAB擴展功能:
將TAB擴展功能開啟之後,在vim插入的TAB字元就可以被擴展成一個或是多個空格(space)。如果要插入原本的TAB字元,可以先按下Ctrl + v,再按下Tab鍵。
使用以下指令可以關閉vim的TAB擴展功能:
如果要設定vim將一個TAB擴展成多個空格的空格數量,可以設定tabstop
和softtabstop
這兩個環境變數。例如要將一個TAB擴展成四個空格的話,可以使用以下指令將tabstop
和softtabstop
設為4
:
set softtabstop=4
tabstop
和softtabstop
的功能略有差異,簡單來說,tabstop
是vim對於TAB字元本身的寬度定義,如果有開啟TAB擴展功能,則這個寬度就等於是空格字元的數量。而softtabstop
是vim對於「虛擬TAB」字元的寬度定義,這個「虛擬TAB」字元表示的寬度會儘量以TAB字元來做填滿,沒有填滿的部份會以空格字元來取代。舉例來說,如果將tabstop
設為3
,softtabstop
設為8
,在使用鍵盤按鍵插入TAB字元時(實際上會是一個「虛擬TAB」字元),會產生兩個TAB字元(共六個字元的寬度)和兩個空格字元來補足八個字元的寬度。若有開啟TAB擴展功能,兩個TAB字元會被擴展成六個空格字元,也就會變成是八個空格字元。
如果要設定原本自動縮排產生的字元寬度,則需要使用shiftwidth
這個環境變數來決定其TAB字元和用來擴展的空格字元所組合而成的字元寬度。可以使用以下指令將shiftwidth
設為4
:
如果將tabstop
設為3
,shiftwidth
設為4
,自動縮排的時候會產生一個TAB字元(三個字元的寬度)和一個空格字元來補足四個字元的寬度。若有開啟TAB擴展功能,一個TAB字元會被擴展成三個空格字元,也就會變成是四個空格字元。
另外,雖然vim有自動縮排功能,但有時候我們還是會手動在一行的最前面,使用鍵盤的TAB按鍵來進行縮排。前面有提到過,鍵盤TAB按鍵的寬度是基於softtabstop
變數所形成的「虛擬TAB」字元,而不是自動縮排時所使用的shiftwidth
環境變數。如果要在行首插入縮排字元時,也能使用shiftwidth
環境變數所定義的寬度,那麼可以開啟vim的智慧TAB功能。
使用以下指令可以開啟vim的智慧TAB功能:
使用以下指令可以關閉vim的智慧TAB功能:
開啟/關閉vim的確認功能
使用以下指令可以開啟vim的確認功能:
開啟vim的確認功能之後,遇到需要進行確認的動作時(例如要不儲存文件內容改變而關閉vim時),vim會出現確認訊息,要求使用者回答,而不是直接阻擋使用者進行該項動作。
使用以下指令可以關閉vim的確認功能:
設定backspace鍵的功能
vim可以透過backspace
環境變數,設定其在編輯模式下,鍵盤上backspace鍵的功能。可以使用以下指令來開啟backspace鍵的所有功能:
或是:
indent
表示允許使用backspace
鍵來刪除縮排;eol
表示允許使用backspace
來刪除換行字元,使其可以退回至上一行;start
表示允許使用Ctrl + w和Ctrl + u快速鍵來刪除獨立詞語和同類字元(縮排、非縮排字元)。
設定vim記錄已執行指令的數量上限
vim可以透過laststatus
環境變數,設定其所能記錄的已執行指令之數量上限。可以將數量上限設多一點,以利查找。若要讓vim儲存500筆指令,可以使用以下指令:
開啟/關閉vim的狀態列
vim可以透過laststatus
環境變數,設定其狀態列的顯示方式。
使用以下指令可以開啟vim的狀態列:
調整之後的效果如下:
使用以下指令可以關閉vim的狀態列:
修改vim的狀態列
vim可以透過statusline
環境變數,設定其狀態列的文字格式。其中,%t
代表檔案名稱;%F
代表檔案路徑;%y
代表檔案類型;%=
代表左右分隔;%c
代表目前游標所在的行號;%l
代表目前游標所在的列號;%L
代表總列數;%p
代表目前瀏覽位置的進度百分比。
在.vimrc
檔案中添加以下指令配置:
set statusline=[%{expand('%:p')}][%{strlen(&fenc)?&fenc:&enc},\ %{&ff},\ %{strlen(&filetype)?&filetype:'plain'}]%{FileSize()}%{IsBinary()}%=%c,%l/%L\ [%3p%%]
function IsBinary()
if (&binary == 0)
return ""
else
return "[Binary]"
endif
endfunction
function FileSize()
let bytes = getfsize(expand("%:p"))
if bytes <= 0
return "[Empty]"
endif
if bytes < 1024
return "[" . bytes . "B]"
elseif bytes < 1048576
return "[" . (bytes / 1024) . "KB]"
else
return "[" . (bytes / 1048576) . "MB]"
endif
endfunction
調整之後的效果如下:
還能顯示檔案大小呢!
若要修改配色,可以在文字格式加上%*
(切換回預設配色)和%#配色名稱#
,並配合highlight
或是hi
指令來調整。可以將以上指令配置修改如下:
set statusline=%#filepath#[%{expand('%:p')}]%#filetype#[%{strlen(&fenc)?&fenc:&enc},\ %{&ff},\ %{strlen(&filetype)?&filetype:'plain'}]%#filesize#%{FileSize()}%{IsBinary()}%=%#position#%c,%l/%L\ [%3p%%]
hi filepath cterm=none ctermbg=238 ctermfg=40
hi filetype cterm=none ctermbg=238 ctermfg=45
hi filesize cterm=none ctermbg=238 ctermfg=225
hi position cterm=none ctermbg=238 ctermfg=228
調整之後的效果如下:
注意highlight
或是hi
指令應寫在colorscheme
之後。
開啟/關閉vim的指令暫存提示
使用以下指令可以開啟vim的指令暫存提示:
開啟指令暫存提示之後,vim就可以在右下角顯示使用者之前輸入的指令,如下圖:
如此以來就可以有效提醒使用者目前指令輸入到哪裡了。
使用以下指令可以關閉vim的指令暫存提示:
開啟/關閉vim的模式提示
使用以下指令可以開啟vim的模式提示:
開啟指令暫存提示之後,vim才可以在底部顯示目前使用的操作模式是一般、插入、取代還是選取模式。
使用以下指令可以關閉vim的模式提示:
開啟/關閉vim的自動換行
使用以下指令可以開啟vim的自動換行:
開啟自動換行之後,若一行的文字長度超過vim所能顯示的範圍,就會換行顯示。建議與顯示行號功能一起使用。
使用以下指令可以關閉vim的自動換行:
開啟/關閉vim的自動存檔
使用以下指令可以開啟vim的自動存檔:
開啟自動存檔之後,當vim編輯器失去焦點,就會自動存檔。
使用以下指令可以關閉vim的自動存檔:
開啟/關閉vim的滑鼠控制功能
vim可以透過mouse
環境變數,設定其滑鼠在哪些模式下可以被用來操作編輯器。n
為一般模式;v
為視覺模式;i
為插入模式;c
為命令列模式;a
為所有模式。
使用以下指令可以在所有模式下開啟vim的滑鼠控制功能:
開啟滑鼠控制功能之後,就可以使用滑鼠來控制vim的游標了!
使用以下指令可以關閉vim的滑鼠控制功能:
vim的多國語系編碼判斷
在開啟文字檔案的時候,偶爾會因為解碼時所用的字元編碼方式(字元集)不符合正確的字元編碼,而出現亂碼的情形。如下圖:
vim可以透過fileencodings
環境變數,設定其在開啟文字檔時要優先使用什麼字元編碼方式來開啟。但前提是它在編譯前要先設定好有支援multi_byte
功能。可以在.vimrc
檔案中撰寫以下判斷式來判斷vim有無支援multi_byte
功能:
if has("multi_byte")
else
echoerr "If +multi_byte is not included, you should compile Vim with big features."
endif
我們可以依照自己經常接觸的字元編碼和它們個別涵蓋的字元範圍及嚴謹程度來排列出嘗試解碼的順序,並設定給fileencodings
環境變數儲存。如下:
萬國碼「UTF」是涵蓋率最高,同時也是最常用的字元編碼,而且編碼方式都很嚴謹。其中UTF-8
又較UTF-16
更嚴格一點,因此排在首位來嘗試解碼。由於筆者是正體中文使用者,因此再來是以正體中文為主的big5
和以簡體中文為主的gb2312
,這兩種編碼方式相對不嚴謹,但會頻繁遇到。接著是涵蓋更多中文及其它字元的gbk
與gb18030
編碼。中文嘗試結束之後,再來嘗試日文所使用的euc-jp
和韓文使用的euc-kr
。最後使用最不嚴謹的latin1
來墊底。
設定完fileencodings
環境變數之後,就比較不會開到亂碼檔案了!
為了確保vim內部有辦法使用使用所有的字元,也建議將encoding
環境變數固定為utf-8
。指令如下:
這是為了避免encoding
若是設為big5
,而讀取了big5
範圍之外的字元,就算fileencodings
有命中,並且可以成功解碼,但在內部進行編碼轉換時還是會無法將該字元轉成big5
而發生問題。
如果使用者的終端機並不是使用與vim所在的主機一樣的文字編碼,則需要修改termencoding
環境變數,將其設定成屬於自己終端環境的編碼方式,若編碼不合的話會有亂碼的問題發生。
加入自訂的快速鍵
vim的map
、nmap
、vmap
、omap
、map!
、imap
、cmap
指令可以在不同vim操作模式下建立快速鍵。其中,map
涵蓋了一般模式和視覺模式;map!
涵蓋了map
沒包含的模式;imap
只涵蓋插入模式;cmap
只涵蓋命令列模式。
map
指令家族的用法都一樣,格式如下:
例如在.vimrc
設定檔加入:
即可在vim的一般模式和視覺模式下,按下快速鍵Ctrl + t來顯示自動縮排的寬度。由於vim內建的快速鍵以及終端機軟體內建的快速鍵已經有很多,所以要找到能夠自訂的快速鍵也不太容易,這是需要不斷嘗試的部份哦!
使用Ctrl + n來切換滑鼠模式
當vim開啟了滑鼠模式之後,終端機原本需要使用滑鼠進行的功能(如右鍵選單)可能就會無法使用,因此筆者將著個功能做成快速鍵來切換。在.vimrc
設定檔加入以下片段,就能用Ctrl + n快速鍵來進行滑鼠模式的切換了!
map <C-n> :call SwitchMouseMode()<CR>
map! <C-n> <Esc>:call SwitchMouseMode()<CR>
function SwitchMouseMode()
if (&mouse == "a")
let &mouse = ""
echo "Mouse is disabled."
else
let &mouse = "a"
echo "Mouse is enabled."
endif
endfunction
使用Ctrl + b來切換文字/二進制模式
在特殊的情況下,我們需要使用二進制模式來編輯文字檔案,單純地將字元寫入至檔案中,防止vim文字編輯器雞婆地對其加入EOL字元(End of Line),而讓檔案莫名其妙多出了一個位元組的資料。在.vimrc
設定檔加入以下片段,就能用Ctrl + b快速鍵來進行文字及二進制模式的切換了!
map <C-b> :call SwitchTextBinaryMode()<CR>
map! <C-b> <Esc>:call SwitchTextBinaryMode()<CR>
function SwitchTextBinaryMode()
if (&binary == 0)
set binary
set noeol
echo "Switch to binary mode."
else
set nobinary
set eol
echo "Switch to text mode."
endif
endfunction
使用Ctrl + j強制將目前開啟的文件轉成UTF-8編碼
由於跨平台、國際化的問題,將文件使用最普遍的UTF-8編碼來儲存是最方便、保險的。在.vimrc
設定檔加入以下片段,就能用Ctrl + j快速鍵來對該文件進行UTF-8編碼的強制轉換!
map <C-j> :call ToUTF8()<CR>
map! <C-j> <Esc>:call ToUTF8()<CR>
function ToUTF8()
if (&fileencoding == "utf-8")
echo "It is already UTF-8."
else
let &fileencoding="utf-8"
echo "Convert to UTF-8."
endif
let &ff="unix"
endfunction
利用修改fileencoding
環境變數的方式來轉換文件的編碼。順便修改ff
環境變數,使文件變成unix
相容的格式。
使用Ctrl + t將所有TAB字元轉成空格字元
一個文件的縮排字元如果混雜著TAB字元和空格字元,有時會十分不便。在.vimrc
設定檔加入以下片段,就能用Ctrl + t快速鍵來將該文件中的TAB字元擴展成空格字元!
map <C-t> :call TabToSpaces()<CR>
map! <C-t> <Esc>:call TabToSpaces()<CR>
function TabToSpaces()
retab
echo "Convert tab to spaces."
endfunction
使用retab
指令來轉換TAB字元。
使用Ctrl + l來切換自動斷行模式
在不同需求下,我們有時會需要自動斷行功能,有時不需要自動斷行功能。在.vimrc
設定檔加入以下片段,就能用Ctrl + l快速鍵來進行自動斷行模式的切換了!
map <C-l> :call SwitchLineBreakingMode()<CR>
map! <C-l> <Esc>:call SwitchLineBreakingMode()<CR>
function SwitchLineBreakingMode()
if (&wrap == 0)
set wrap
echo "Switch to line breaking mode."
else
set nowrap
echo "Switch to one line mode."
endif
endfunction
使用Ctrl + f來切換完整/簡單模式
筆者習慣使用滑鼠來選取終端機內的文字進行快速鍵或是右鍵複製,再至指定位置使用快速鍵或是右鍵貼上。如果vim有設置滑鼠模式、顯示行號且無自動斷行的話,複製文字時將會遇到一些困難。再來是如果vim有開啟自動縮排功能的話,貼上文字時,原先的排版也會亂掉。所以特別開了一個快速鍵來切換完整和簡單模式,在簡單模式下可以照原本的終端機使用習慣,在vim內進行選取和複製貼上。
map <C-f> :call SwitchFullSimpleMode()<CR>
map! <C-f> <Esc>:call SwitchFullSimpleMode()<CR>
function SwitchFullSimpleMode()
if (&mouse == "a")
let &mouse = ""
set nocindent
set nonumber
set wrap
echo "Switch to simple mode.(nomouse, nonumber, nocindent, wrap)"
else
let &mouse = "a"
set cindent
set number
set nowrap
echo "Switch to full mode.(mouse, number, cindent, nowrap)"
endif
endfunction
完整的.vimrc
檔案
以上對於vim指令及.vimrc
檔案的介紹因為東西很雜很多,可能會讓各位看得霧煞煞,因此筆者在文章最後釋出已撰寫完成的.vimrc
檔案。檔案內容如下:
"################### Magic vimrc ###################
" ctrl+n Enable/disable mouse
" ctrl+b Switch to text/binary
" ctrl+j To utf-8 file
" ctrl+t Convert tab to spaces
" ctrl+l Toggle line breaking
" ctrl+f Switch to full/simple
"#######################################################
set nocompatible
"#######################################################
syntax enable
set number
set noruler
set ignorecase
set smartcase
set incsearch
set cindent
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set confirm
set backspace=indent,eol,start
set history=500
set showcmd
set showmode
set nowrap
set autowrite
set mouse=a
"#######################################################
" Color
set t_Co=256
colo torte
set cursorline
set cursorcolumn
set hlsearch
hi CursorLine cterm=none ctermbg=DarkMagenta ctermfg=White
hi CursorColumn cterm=none ctermbg=DarkMagenta ctermfg=White
hi Search cterm=reverse ctermbg=none ctermfg=none
"#######################################################
" statusline
set laststatus=2
set statusline=%#filepath#[%{expand('%:p')}]%#filetype#[%{strlen(&fenc)?&fenc:&enc},\ %{&ff},\ %{strlen(&filetype)?&filetype:'plain'}]%#filesize#%{FileSize()}%{IsBinary()}%=%#position#%c,%l/%L\ [%3p%%]
hi filepath cterm=none ctermbg=238 ctermfg=40
hi filetype cterm=none ctermbg=238 ctermfg=45
hi filesize cterm=none ctermbg=238 ctermfg=225
hi position cterm=none ctermbg=238 ctermfg=228
function IsBinary()
if (&binary == 0)
return ""
else
return "[Binary]"
endif
endfunction
function FileSize()
let bytes = getfsize(expand("%:p"))
if bytes <= 0
return "[Empty]"
endif
if bytes < 1024
return "[" . bytes . "B]"
elseif bytes < 1048576
return "[" . (bytes / 1024) . "KB]"
else
return "[" . (bytes / 1048576) . "MB]"
endif
endfunction
"#######################################################
" encode
if has("multi_byte")
set fileencodings=utf-8,utf-16,big5,gb2312,gbk,gb18030,euc-jp,euc-kr,latin1
else
echoerr "If +multi_byte is not included, you should compile Vim with big features."
endif
"#######################################################
" shortcut
" Toggle mouse
map <C-n> :call SwitchMouseMode()<CR>
map! <C-n> <Esc>:call SwitchMouseMode()<CR>
function SwitchMouseMode()
if (&mouse == "a")
let &mouse = ""
echo "Mouse is disabled."
else
let &mouse = "a"
echo "Mouse is enabled."
endif
endfunction
" Toggle text/binary
map <C-b> :call SwitchTextBinaryMode()<CR>
map! <C-b> <Esc>:call SwitchTextBinaryMode()<CR>
function SwitchTextBinaryMode()
if (&binary == 0)
set binary
set noeol
echo "Switch to binary mode."
else
set nobinary
set eol
echo "Switch to text mode."
endif
endfunction
" To utf-8 file
map <C-j> :call ToUTF8()<CR>
map! <C-j> <Esc>:call ToUTF8()<CR>
function ToUTF8()
if (&fileencoding == "utf-8")
echo "It is already UTF-8."
else
let &fileencoding="utf-8"
echo "Convert to UTF-8."
endif
let &ff="unix"
endfunction
" Convert tab to spaces
map <C-t> :call TabToSpaces()<CR>
map! <C-t> <Esc>:call TabToSpaces()<CR>
function TabToSpaces()
retab
echo "Convert tab to spaces."
endfunction
" Toggle line breaking
map <C-l> :call SwitchLineBreakingMode()<CR>
map! <C-l> <Esc>:call SwitchLineBreakingMode()<CR>
function SwitchLineBreakingMode()
if (&wrap == 0)
set wrap
echo "Switch to line breaking mode."
else
set nowrap
echo "Switch to one line mode."
endif
endfunction
" Switch to full/simple
map <C-f> :call SwitchFullSimpleMode()<CR>
map! <C-f> <Esc>:call SwitchFullSimpleMode()<CR>
function SwitchFullSimpleMode()
if (&mouse == "a")
let &mouse = ""
set nocindent
set nonumber
set wrap
echo "Switch to simple mode.(nomouse, nonumber, nocindent, wrap)"
else
let &mouse = "a"
set cindent
set number
set nowrap
echo "Switch to full mode.(mouse, number, cindent, nowrap)"
endif
endfunction