CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

          本節(jié)所用命令的幫助入口:


           :help compatible
          :help mapleader
          :help map
          :help autocmd
           


          為什么我的VIM這么難用?不能語法高亮,沒有折行,不能打開多個(gè)窗口多個(gè)buffer,不能……

          為什么別人用幾個(gè)鍵就可以完成一個(gè)很復(fù)雜的功能,而我不能?

          為什么別人的VIM看起來和我的很不一樣?

          ……

          當(dāng)你開始問這些問題的時(shí)候,是時(shí)候去檢查一下你的vimrc了。

          當(dāng)VIM在啟動(dòng)時(shí),如果沒有找到vimrc或gvimrc,它缺省工作VI兼容的模式。這意味著,你只能使用VI所具備的功能,而VIM中的大量擴(kuò)展功能將無法使用。也許這就是你的VIM如此難用的原因。

          VIM中自帶了一個(gè)vimrc例子,讓我們從這個(gè)例子開始吧。

          下面我以Linux下的VIM為例,windows版本的VIM,會(huì)在后面提到。

          示例的vimrc(名為vimrc_example.vim)通常位于/usr/share/vim/vimXXX/目錄下,其中vimXXX與你所使用的VIM版本有關(guān)。

          首先把這個(gè)示例的vimrc拷貝到相應(yīng)的目錄,在Linux下,應(yīng)該把它拷貝到你的home目錄下,名字為”.vimrc”,下面是shell命令:


          cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc

          或者你在VIM中執(zhí)行下面的命令,和上面的shell命令完成相同的功能:

          :!cp $VIMRUNTIME/vimrc_example.vim ~/.vimrc

          現(xiàn)在,你退出VIM后再進(jìn)入,你的VIM和剛才已經(jīng)不一樣了。

          你可以先讀一下你的vimrc,看看它都設(shè)定了什么:

          :e ~/.vimrc

          這是一個(gè)注釋良好的文件,不需要多解釋。

          對(duì)windows版本的VIM,它已經(jīng)缺省的有了一個(gè)vimrc,你可以在VIM在使用下面的命令來查看它:


          :e $VIM/_vimrc


          在這個(gè)文件中,它包含了上面提到的vimrc_example.vim。同時(shí),它會(huì)把VIM設(shè)置的更符合windows的操作習(xí)慣。比如,支持CTRL-C拷貝,CTRL-V粘貼等等。Windows下的用戶,可以使用$VIM/_vimrc來做為你的第一個(gè)vimrc。

          順便提一句,在unix/linux中,文件名可以以”.”開頭,表明此文件是隱藏的。而在windows中,不允許文件名以”.”開頭,所以,windows版本的VIM,將讀取_vimrc來做為自己的配置文件。

          在今后使用VIM的日子里,你會(huì)頻繁的更改你的vimrc。所以我們需要設(shè)置一些快捷方式,使我們能快速的訪問vimrc。

          把下面這段內(nèi)容拷貝到你的vimrc中:


          1    "Set mapleader
          2    let mapleader = ","
          3
          4    "Fast reloading of the .vimrc
          5    map <silent> <leader>s :source ~/.vimrc<cr>
          6    "Fast editing of .vimrc
          7    map <silent> <leader>e :e ~/.vimrc<cr>
          8    "When .vimrc is edited, reload it
          9    autocmd! bufwritepost .vimrc source ~/.vimrc

          為了方便解釋,我給每一行都加了一個(gè)行號(hào)。

          在vimrc中,雙引號(hào)開頭的行,將被當(dāng)作注釋忽略。

          第2行,用來設(shè)置mapleader變量,當(dāng)mapleader為未設(shè)置或?yàn)榭諘r(shí),使用缺省的“\”來作為mapleader。

          mapleader變量是作用是什么呢?我們先看下面。

          第5行定義了一個(gè)映射,這個(gè)映射把“<leader>s”,映射為命令“:source ~/.vimrc<cr>”。當(dāng)定義一個(gè)映射時(shí),可以使用<Leader>前綴。而在映射生效時(shí),VIM會(huì)把<Leader>替換成mapleader變量的值。也就是說,我們這里定義的“<leader>s”,在使用時(shí)就變成了“,s”,當(dāng)輸入這一快捷方式時(shí),就會(huì)source一次~/.vimrc文件(也就是重新執(zhí)行一遍.vimrc文件)。

          第7行,定義了“<leader>e”快捷鍵,當(dāng)輸入“,e”時(shí),會(huì)打開~/.vimrc進(jìn)行編輯。

          第9行,定義了一個(gè)自動(dòng)命令,每次寫入.vimrc后,都會(huì)執(zhí)行這個(gè)自動(dòng)命令,source一次~/.vimrc文件。

          有了上面的快捷鍵,我們就能快速的打開vimrc文件編輯,快速重新source vimrc文件,方便多了。
           

          無論在windows還是在linux中,我都使用VIM作為我的缺省編輯器。并且,我想使用同一個(gè)vimrc文件。因此,我定義了一個(gè)MySys()函數(shù),用來區(qū)分不同的平臺(tái),以進(jìn)行不同的配置。

          另外,在編輯vimrc文件時(shí),我更喜歡新開一個(gè)標(biāo)簽頁來編輯,而不是在當(dāng)前窗口中。因此,我定義了SwitchToBuf()函數(shù),它在所有標(biāo)簽頁的窗口中查找指定的文件名,如果找到這樣一個(gè)窗口,就跳到此窗口中;否則,它新建一個(gè)標(biāo)簽頁來打開vimrc文件。

          下面是我的vimrc中使用的設(shè)定,希望能夠拋磚引玉:

           

          " Platform
          function! MySys()
            return "linux"
          endfunction

          " Switch to buffer according to file name
          function! SwitchToBuf(filename)
              let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
              " find in current tab
              let bufwinnr = bufwinnr(fullfn)
              if bufwinnr != -1
                  exec bufwinnr . "wincmd w"
                  return
              else
                  " find in each tab
                  tabfirst
                  let tab = 1
                  while tab <= tabpagenr("$")
                      let bufwinnr = bufwinnr(fullfn)
                      if bufwinnr != -1
                          exec "normal " . tab . "gt"
                          exec bufwinnr . "wincmd w"
                          return
                      endif
                      tabnext
                      let tab = tab + 1
                  endwhile
                  " not exist, new tab
                  exec "tabnew " . fullfn
              endif
          endfunction

          "Fast edit vimrc
          if MySys() == 'linux'
              "Fast reloading of the .vimrc
              map <silent> <leader>s :source ~/.vimrc<cr>
              "Fast editing of .vimrc
              map <silent> <leader>e :call SwitchToBuf("~/.vimrc")<cr>
              "When .vimrc is edited, reload it
              autocmd! bufwritepost .vimrc source ~/.vimrc
          elseif MySys() == 'windows'
              "Fast reloading of the _vimrc
              map <silent> <leader>s :source ~/_vimrc<cr>
              "Fast editing of _vimrc
              map <silent> <leader>e :call SwitchToBuf("~/_vimrc")<cr>
              "When _vimrc is edited, reload it
              autocmd! bufwritepost _vimrc source ~/_vimrc
          endif

          注意:我在windows中也定義一個(gè)“HOME”環(huán)境變量,然后把_vimrc放在“HOME”環(huán)境變量所指向的目錄中。如果你打算在windows中使用上面的設(shè)定,也需要這樣做!

          VIM自帶的示例vimrc中,只定義最基本的配置。

          http://www.amix.dk/vim/vimrc.html有一個(gè)非常強(qiáng)大的vimrc,有人戲稱為“史上最強(qiáng)的vimrc”,或許有些言過其實(shí)。不過,如果你通讀了這個(gè)vimrc,相信能從中學(xué)到很多很多……

          我的vimrc也是基于此模板,然后自已做了很多修改。

          建議:不要照拷這個(gè)vimrc!可能這個(gè)文件的設(shè)定并不符合你的習(xí)慣。另外,這個(gè)文件的設(shè)定,可能也不能在你的工作環(huán)境中運(yùn)行。

          http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx,有一個(gè)redguardtoo修改過的版本,可以對(duì)照參考一下。

           [參考文檔]

          1. VIM幫助文件
          2. http://vimcdoc.sourceforge.net/
          3. http://www.amix.dk/vim/vimrc.html

          來自:http://blog.csdn.net/easwy/archive/2007/02/26/1514639.aspx

          posted on 2009-04-08 21:45 CONAN 閱讀(262) 評(píng)論(0)  編輯  收藏 所屬分類: VIM
          主站蜘蛛池模板: 历史| 凤阳县| 桃源县| 宁蒗| 屯昌县| 通化县| 永平县| 敦化市| 金塔县| 古田县| 潍坊市| 旬邑县| 乡城县| 文山县| 道孚县| 开平市| 陵川县| 惠安县| 当涂县| 浑源县| 抚远县| 和政县| 延安市| 通山县| 黑河市| 谢通门县| 厦门市| 青海省| 苏尼特右旗| 本溪市| 平南县| 汉沽区| 合肥市| 资兴市| 乌苏市| 威宁| 镶黄旗| 新昌县| 南昌市| 黄梅县| 株洲市|