转:初学者简易 .vimrc编写指南
生活随笔
收集整理的這篇文章主要介紹了
转:初学者简易 .vimrc编写指南
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自:
? ? http://edyfox.codecarver.org/html/_vimrc_for_beginners.htmlVIM 中可供用戶定制的選項(xiàng)非常非常多,作為初學(xué)者,我們沒(méi)有必要了解這么多東西。下面,滇狐簡(jiǎn)單列出了一些最常用的配置項(xiàng),大家可以根據(jù)自己的需要將這些內(nèi)容添加到自己的 .vimrc 中。
1?基本設(shè)置
- set nocp?
該命令指定讓 VIM 工作在不兼容模式下。在 VIM 之前,出現(xiàn)過(guò)一個(gè)非常流行的編輯器叫 vi。VIM 許多操作與 vi 很相似,但也有許多操作與 vi 是不一樣的。如果使用“:set cp”命令打開(kāi)了兼容模式開(kāi)關(guān)的話,VIM 將盡可能地模仿 vi 的操作模式。?
也許有許多人喜歡“最正統(tǒng)的 vi”的操作模式,對(duì)于初學(xué)者來(lái)說(shuō),vi 里許多操作是比較不方便的。?
舉一個(gè)例子,VIM 里允許在 Insert 模式下使用方向鍵移動(dòng)光標(biāo),而 vi 里在 Insert 模式下是不能移動(dòng)光標(biāo)的,必須使用 ESC 退回到 Normal 模式下才行。?
再舉一個(gè)例子,vi 里使用 u 命令可以撤消一次先前的操作,再次按下 u 時(shí),將撤消“撤消”這個(gè)動(dòng)作本身,也就是我們常說(shuō)的“重復(fù)”(redo)。而 VIM 里可以使用 u 命令撤消多步操作,“重復(fù)”使用的快捷鍵是 Ctrl + R。?
使用兼容模式后,VIM 將放棄這些新的功能,盡量模仿 vi 的各種操作方式。只有在不兼容模式下,才能更好地發(fā)揮 VIM 自身的特點(diǎn)。Bram 爺爺強(qiáng)烈推薦大家使用 VIM 的不兼容模式,滇狐也是這樣推薦的。請(qǐng)務(wù)必在你的 .vimrc 中的第一行寫(xiě)上:“set nocp”。 - set ru?
該命令打開(kāi) VIM 的狀態(tài)欄標(biāo)尺。默認(rèn)情況下,VIM 的狀態(tài)欄標(biāo)尺在屏幕底部,它能即時(shí)顯示當(dāng)前光標(biāo)所在位置在文件中的行號(hào)、列號(hào),以及對(duì)應(yīng)的整個(gè)文件的百分比。打開(kāi)標(biāo)尺可以給文件的編輯工作帶來(lái)一定方便。 - set hls?
搜索時(shí)高亮顯示被找到的文本。該指令的功能在 vimtutor 中已經(jīng)有過(guò)介紹,這里就不多說(shuō)了。其實(shí)似乎許多人并不喜歡這個(gè)功能。 - set is?
搜索時(shí)在未完全輸入完畢要檢索的文本時(shí)就開(kāi)始檢索。vimtutor 對(duì)該命令也有過(guò)介紹,滇狐并不喜歡這個(gè)功能,因此滇狐自己的配置文件里是沒(méi)有這條命令的。但是周圍有朋友很喜歡這個(gè),因此滇狐還是將它列在這里。 - syntax on?
打開(kāi)關(guān)鍵字上色。進(jìn)行程序設(shè)計(jì)的朋友應(yīng)該都知道關(guān)鍵字上色是什么東西,因此這里就不多說(shuō)了。不進(jìn)行程序設(shè)計(jì)的朋友不妨也打開(kāi)這個(gè)功能,雖然不一定能夠用得著,但這個(gè)功能其實(shí)也是很好玩的。 - set backspace=indent,eol,start?
設(shè)想這樣一個(gè)情況:當(dāng)前光標(biāo)前面有若干字母,我們按下 i 鍵進(jìn)入了 Insert 模式,然后輸入了 3 個(gè)字母,再按 5 下刪除(Backspace)。默認(rèn)情況下,VIM 僅能刪除我們新輸入的 3 個(gè)字母,然后喇叭“嘟嘟”響兩聲。如果我們“set backspace=start”,則可以在刪除了新輸入的 3 個(gè)字母之后,繼續(xù)向前刪除原有的兩個(gè)字符。?
再設(shè)想一個(gè)情況:有若干行文字,我們把光標(biāo)移到中間某一行的行首,按 i 鍵進(jìn)入 Insert 模式,然后按一下 Backspace。默認(rèn)情況下,喇叭會(huì)“嘟”一聲,然后沒(méi)有任何動(dòng)靜。如果我們“set backspace=eol”,則可以刪除前一行行末的回車,也就是說(shuō)將兩行拼接起來(lái)。?
當(dāng)我們?cè)O(shè)置了自動(dòng)縮進(jìn)后,如果前一行縮進(jìn)了一定距離,按下回車后,下一行也會(huì)保持相同的縮進(jìn)。默認(rèn)情況下,我們不能在 Insert 模式下直接按 Backspace 刪除行首的縮進(jìn)。如果我們“set backspace=indent”,則可以開(kāi)啟這一項(xiàng)功能。?
上述三項(xiàng)功能,你可以根據(jù)自己的需要,選擇其中一種或幾種,用逗號(hào)分隔各個(gè)選項(xiàng)。建議把這三個(gè)選項(xiàng)都選上。 - set whichwrap=b,s,<,>,[,]?
默認(rèn)情況下,在 VIM 中當(dāng)光標(biāo)移到一行最左邊的時(shí)候,我們繼續(xù)按左鍵,光標(biāo)不能回到上一行的最右邊。同樣地,光標(biāo)到了一行最右邊的時(shí)候,我們不能通過(guò)繼續(xù)按右跳到下一行的最左邊。但是,通過(guò)設(shè)置 whichwrap 我們可以對(duì)一部分按鍵開(kāi)啟這項(xiàng)功能。如果想對(duì)某一個(gè)或幾個(gè)按鍵開(kāi)啟到頭后自動(dòng)折向下一行的功能,可以把需要開(kāi)啟的鍵的代號(hào)寫(xiě)到 whichwrap 的參數(shù)列表中,各個(gè)鍵之間使用逗號(hào)分隔。以下是 whichwrap 支持的按鍵名稱列表:- b?
在 Normal 或 Visual 模式下按刪除(Backspace)鍵。 - s?
在 Normal 或 Visual 模式下按空格鍵。 - h?
在 Normal 或 Visual 模式下按 h 鍵。 - l?
在 Normal 或 Visual 模式下按 l 鍵。 - <?
在 Normal 或 Visual 模式下按左方向鍵。 - >?
在 Normal 或 Visual 模式下按右方向鍵。 - ~?
在 Normal 模式下按 ~ 鍵(翻轉(zhuǎn)當(dāng)前字母大小寫(xiě))。 - [?
在 Insert 或 Replace 模式下按左方向鍵。 - ]?
在 Insert 或 Replace 模式下按右方向鍵。
- b?
- set encoding=utf-8?
設(shè)置當(dāng)前字符編碼為 UTF-8。UTF-8 是支持字符集最多的編碼之一,在 UTF-8 下進(jìn)行工作,會(huì)帶來(lái)許多方便之處。由于 VIM 在運(yùn)行過(guò)程中切換 encoding 會(huì)造成許多問(wèn)題,如提示信息亂碼、register 丟失等,因此強(qiáng)烈建議大家在啟動(dòng) VIM 的時(shí)候把 encoding 設(shè)置為 UTF-8,在編輯非 UTF-8 的文件時(shí),通過(guò) fileencoding 來(lái)進(jìn)行轉(zhuǎn)碼。 - set langmenu=zh_CN.UTF-8?
使用中文菜單,并使用 UTF-8 編碼。如果沒(méi)有這句的話,在非 UTF-8 的系統(tǒng),如 Windows 下,用了 UTF-8 的 encoding 后菜單會(huì)亂碼。 - language message zh_CN.UTF-8?
使用中文提示信息,并使用 UTF-8 編碼。如果沒(méi)有這句的話,在非 UTF-8 的系統(tǒng),如 Windows 下,用了 UTF-8 的 encoding 后系統(tǒng)提示會(huì)亂碼。 - set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1?
設(shè)置編碼的自動(dòng)識(shí)別。關(guān)于這條設(shè)置的詳細(xì)含義,請(qǐng)參看這篇文章。 - set ambiwidth=double?
防止特殊符號(hào)無(wú)法正常顯示。在 Unicode 中,許多來(lái)自不同語(yǔ)言的字符,如果字型足夠近似的話,會(huì)把它們放在同一個(gè)編碼中。但在不同編碼中,字符的寬度是不一樣的。例如中文漢語(yǔ)拼音中的 ā 就很寬,而歐洲語(yǔ)言中同樣的字符就很窄。當(dāng) VIM 工作在 Unicode 狀態(tài)時(shí),遇到這些寬度不明的字符時(shí),默認(rèn)使用窄字符,這會(huì)導(dǎo)致中文的破折號(hào)“——”非常短,五角星“★”等符號(hào)只能顯示一半。因此,我們需要設(shè)置 ambiwidth=double 來(lái)解決這個(gè)問(wèn)題。 - filetype plugin indent on?
開(kāi)啟文件類型自動(dòng)識(shí)別,啟用文件類型插件,啟用針對(duì)文件類型的自動(dòng)縮進(jìn)。
2?文本編輯設(shè)置
- set sw=4?
自動(dòng)縮進(jìn)的時(shí)候,縮進(jìn)尺寸為 4 個(gè)空格。 - set ts=4?
Tab 寬度為 4 個(gè)字符。 - set et?
編輯時(shí)將所有 Tab 替換為空格。?
該選項(xiàng)只在編輯時(shí)將 Tab 替換為空格,如果打開(kāi)一個(gè)已經(jīng)存在的文件,并不會(huì)將已有的 Tab 替換為空格。如果希望進(jìn)行這樣的替換的話,可以使用這條命令“:retab”。 - set smarttab?
當(dāng)使用 et 將 Tab 替換為空格之后,按下一個(gè) Tab 鍵就能插入 4 個(gè)空格,但要想刪除這 4 個(gè)空格,就得按 4 下 Backspace,很不方便。設(shè)置 smarttab 之后,就可以只按一下 Backspace 就刪除 4 個(gè)空格了。 - set spell?
打開(kāi)拼寫(xiě)檢查。拼寫(xiě)有錯(cuò)的單詞下方會(huì)有紅色波浪線,將光標(biāo)放在單詞上,按?z=?就會(huì)出現(xiàn)拼寫(xiě)建議,按?]s?可以直接跳到下一個(gè)拼寫(xiě)錯(cuò)誤處。
3?斷行設(shè)置
- set tw=78?
設(shè)置光標(biāo)超過(guò) 78 列的時(shí)候折行。 - set lbr?
不在單詞中間斷行。設(shè)置了這個(gè)選項(xiàng)后,如果一行文字非常長(zhǎng),無(wú)法在一行內(nèi)顯示完的話,它會(huì)在單詞與單詞間的空白處斷開(kāi),盡量不會(huì)把一個(gè)單詞分成兩截放在兩個(gè)不同的行里。 - set fo+=mB?
打開(kāi)斷行模塊對(duì)亞洲語(yǔ)言支持。m 表示允許在兩個(gè)漢字之間斷行,即使?jié)h字之間沒(méi)有出現(xiàn)空格。B 表示將兩行合并為一行的時(shí)候,漢字與漢字之間不要補(bǔ)空格。該命令支持的更多的選項(xiàng)請(qǐng)參看用戶手冊(cè)。
4?C/C++ 編碼設(shè)置
- set sm?
顯示括號(hào)配對(duì)情況。打開(kāi)這個(gè)選項(xiàng)后,當(dāng)輸入后括號(hào)(包括小括號(hào)、中括號(hào)、大括號(hào)) 的時(shí)候,光標(biāo)會(huì)跳回前括號(hào)片刻,然后跳回來(lái),以此顯示括號(hào)的配對(duì)情況。 - set cin?
打開(kāi) C/C++ 風(fēng)格的自動(dòng)縮進(jìn)。打開(kāi)了自動(dòng)縮進(jìn)后,在編碼的時(shí)候我們可以使用“V”命令選中一段文本后,按“=”將這段文本重新調(diào)整縮進(jìn)格式,在一定程度上起到代碼美化的作用。?
另外,打開(kāi)了自動(dòng)縮進(jìn)后,在使用 TERM 下的 vim 的時(shí),粘貼代碼時(shí)常常會(huì)出現(xiàn)版式混亂的現(xiàn)象。那是因?yàn)?TERM 并不知道你現(xiàn)在正在粘貼代碼,它直接“粘貼”動(dòng)作向 vim 解釋為鍵入,因此 vim 便按照設(shè)置的自動(dòng)縮進(jìn)格式為你的代碼調(diào)整了縮進(jìn)。不幸的是,粘貼進(jìn)去的代碼中本身已經(jīng)包含了縮進(jìn),因此便出現(xiàn)了版式混亂的情況。在 gvim 中就不會(huì)出現(xiàn)這個(gè)問(wèn)題,因?yàn)樗軌蛑滥悻F(xiàn)在正在粘貼。?
知道了這個(gè)癥狀的來(lái)由,解決方案也就顯而易見(jiàn)了:在粘貼的時(shí)候把所有自動(dòng)縮進(jìn)都關(guān)閉,粘貼完畢之后再打開(kāi)。一個(gè)個(gè)手工關(guān)閉自動(dòng)縮進(jìn)未免過(guò)于繁瑣,vim 為我們提供了一個(gè)很好用的命令,只要輸入“:set paste”,就可以關(guān)閉所有自動(dòng)縮進(jìn)。粘貼完畢后再輸入“:set nopaste”就可以重新打開(kāi)原有的自動(dòng)縮進(jìn)設(shè)置了。 - set cino=:0g0t0(sus?
設(shè)定 C/C++ 風(fēng)格自動(dòng)縮進(jìn)的選項(xiàng),這里簡(jiǎn)要介紹一下這段代碼里用到的選項(xiàng)的含義,cino 支持的選項(xiàng)還很多,更多選項(xiàng)請(qǐng)看用戶手冊(cè)。
//
// switch 語(yǔ)句之下的 case 語(yǔ)句縮進(jìn) 0 個(gè)空格,也就是說(shuō)不縮進(jìn),與 switch 塊平
// 齊,使用這樣風(fēng)格:
switch?(x)
{
case?1:
????a = b;
????break;
default:
}
// g0
//
// class、struct 等之下的訪問(wèn)權(quán)限控制語(yǔ)句,如 public、protected、private 等,
// 相對(duì) class、struct 等所在的塊縮進(jìn) 0 個(gè)空格,與 class 等塊平齊,使用這樣的
// 風(fēng)格:
class?foo
{
public:
????int?a;
private:
????int?b;
};
// t0
//
// 如果函數(shù)返回值與函數(shù)名不在同一行,則返回值縮進(jìn) 0 個(gè)空格,也就是說(shuō)不縮進(jìn),如
// 下所示:
// set cino=t4
????int
func1()
{
}
// set cino=t0
int
func()
{
}
// (sus
//
// 當(dāng)一對(duì)括號(hào)跨越多行時(shí),其后的行縮進(jìn)前面 sw 指定的距離,效果如下:
int?a = (1?+?2?+?3
????+?4?+?5?+?6
????+?7?+?8) *?9;
- set ai?
打開(kāi)普通文件類型的自動(dòng)縮進(jìn)。該自動(dòng)縮進(jìn)不如 cindent 智能,但它可以為你編輯非 C/C++ 文件提供一定幫助。
5?其它設(shè)置
- set selectmode=?
不使用 selectmode。 - set keymodel=?
不使用“Shift + 方向鍵”選擇文本,“Shift + 方向鍵”代表向指定方向跳一個(gè)單詞。如果你喜歡這項(xiàng)功能的話,可以使用“set keymodel=startsel,stopsel”打開(kāi)它。 - set selection=inclusive?
指定在選擇文本時(shí),光標(biāo)所在位置也屬于被選中的范圍。如果指定 selection=exclusive 的話,可能會(huì)出現(xiàn)某些文本無(wú)法被選中的情況。 - set wildmenu?
在命令模式下使用 Tab 自動(dòng)補(bǔ)全的時(shí)候,將補(bǔ)全內(nèi)容使用一個(gè)漂亮的單行菜單形式顯示出來(lái)。 - colo torte?
選擇 torte 配色方案。VIM 里內(nèi)置了許多關(guān)鍵字上色的配色方案,另外你還可以到網(wǎng)上下載更多配色方案,或是自己編寫(xiě)。點(diǎn)擊“編輯”→“調(diào)色板”,就能列出所有支持的配色方案。你可以把“調(diào)色板”子菜單剪下來(lái),然后慢慢選擇,挑出一個(gè)你最喜歡的配色方案來(lái)。
6?圖形界面設(shè)置
- set nowrap?
指定不折行。如果一行太長(zhǎng),超過(guò)屏幕寬度,則向右邊延伸到屏幕外面。如果使用圖形界面的話,指定不折行視覺(jué)效果會(huì)好得多。 - set mousemodel=popup?
當(dāng)右鍵單擊窗口的時(shí)候,彈出快捷菜單。 - set guioptions+=b?
添加水平滾動(dòng)條。如果你指定了不折行,那為窗口添加一個(gè)水平滾動(dòng)條就非常有必要了。 - set guifont=Bitstream\ Vera\ Sans\ Mono\ 9?
設(shè)置圖形界面下的字體。你可以點(diǎn)“編輯”→“選擇字體”,然后在對(duì)話框中選出你喜歡的字體與字號(hào),選擇完畢后,先按幾下 ESC 確認(rèn)處在 Normal 模式下,然后輸入這條命令:“:set guifont?”回車后 gvim 屏幕最下方會(huì)顯示出你當(dāng)前所用的字體的名稱與字號(hào)。將獲得的結(jié)果寫(xiě)到配置文件里面就可以了,需要注意一點(diǎn),如果字體名稱里面含有空格的話,在抄的時(shí)候需要在所有空格前面加一個(gè)斜杠。
7?條件選擇
同一個(gè)配色方案,在 gvim 下和字符界面的 vim 下效果大相徑庭,滇狐個(gè)人的習(xí)慣是,在 gvim 下使用 torte 配色方案,在 vim 下使用 ron 配色方案。因此我們有必要針對(duì) gvim 和 vim 進(jìn)行不同的設(shè)置。
另外,前面我們?cè)?gvim 下不使用折行,開(kāi)啟水平滾動(dòng)條,但在 vim 下,是沒(méi)有滾動(dòng)條可用的,因此還是有必要為 vim 保留自動(dòng)折行。
條件選擇設(shè)置的格式如下:
if?(has("gui_running"))" 圖形界面下的設(shè)置
????set?nowrap
????set?guioptions+=b
????colo?torte
else
" 字符界面下的設(shè)置
????set?wrap
????colo?ron
endif
8?示例配置文件
下面給出一個(gè)滇狐推薦的初學(xué)者專用 (G)Vim 配置文件,里面沒(méi)有太多個(gè)性化的設(shè)置,方便大家進(jìn)一步擴(kuò)展:
set?nocp" Tab related
set?ts=4
set?sw=4
set?smarttab
set?et
set?ambiwidth=double
" Format related
set?tw=78
set?lbr
set?fo+=mB
" Indent related
set?cin
set?ai
set?cino=:0g0t0(susj1
" Editing related
set?backspace=indent,eol,start
set?whichwrap=b,s,<,>,[,]
set?mouse=a
set?selectmode=
set?mousemodel=popup
set?keymodel=
set?selection=inclusive
" Misc
set?wildmenu
set?spell
" Encoding related
set?encoding=utf-8
set?langmenu=zh_CN.UTF-8
language?message?zh_CN.UTF-8
set?fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
" File type related
filetype?plugin?indent?on
" Display related
set?ru
set?sm
set?hls
if?(has("gui_running"))
????set?guioptions+=b
????colo?torte
????set?nowrap
else
????colo?ron
????set?wrap
endif
syntax?on
"=============================================================================
" Platform dependent settings
"=============================================================================
if?(has("win32"))
????"-------------------------------------------------------------------------
????" Win32
????"-------------------------------------------------------------------------
????if?(has("gui_running"))
????????set?guifont=Bitstream_Vera_Sans_Mono:h9:cANSI
????????set?guifontwide=NSimSun:h9:cGB2312
????endif
else
????if?(has("gui_running"))
????????set?guifont=Bitstream\ Vera\ Sans\ Mono\?9
????endif
endif
總結(jié)
以上是生活随笔為你收集整理的转:初学者简易 .vimrc编写指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转]技巧:Vim 的纵向编辑模式
- 下一篇: 哈希表原理