1. 程式人生 > >VIM的常用配置

VIM的常用配置

花了很長時間整理的,感覺用起來很方便,共享一下。

我的vim配置主要有以下優點:

1.按F5可以直接編譯並執行C、C++、java程式碼以及執行shell指令碼,按“F8”可進行C、C++程式碼的除錯

2.自動插入檔案頭 ,新建C、C++原始檔時自動插入表頭:包括檔名、作者、聯絡方式、建立時間等,讀者可根據需求自行更改

3.對映“Ctrl + A”為全選並複製快捷鍵,方便複製程式碼

4.按“F2”可以直接消除程式碼中的空行

5.“F3”可列出當前目錄檔案,開啟樹狀檔案目錄

6. 支援滑鼠選擇、方向鍵移動

7. 程式碼高亮,自動縮排,顯示行號,顯示狀態行

8.按“Ctrl + P”可自動補全

9.[]、{}、()、""、' '等都自動補全

10.其他功能讀者可以研究以下檔案

 vim本來就是很強大,很方便的編輯器,加上我的程式碼後肯定會如虎添翼,或許讀者使用其他程式語言,可以根據自己的需要進行修改,配置檔案裡面已經加上註釋。

讀者感興趣的話直接複製下面的程式碼到文字檔案,然後把檔案改名為“ .vimrc” (不要忘記前面的“.”),然後把檔案放到使用者資料夾的根目錄下面即可。重新開啟vim即可看到效果。

為方便管理,原始碼託管到了github,後期增加了好多新功能,

具體詳見:https://github.com/ma6174/vim

 

簡易安裝方法:

 

開啟終端,執行下面的命令就自動安裝好了:

wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x

 

這是在github上的vim配置的截圖:

下面是精簡的,沒有外掛的vim配置檔案,儲存到自己的.vimrc檔案就能使用。

 

 
  1. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  2.  
  3. " 顯示相關

  4.  
  5. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  6.  
  7. "set shortmess=atI " 啟動的時候不顯示那個援助烏干達兒童的提示

  8.  
  9. "winpos 5 5 " 設定視窗位置

  10.  
  11. "set lines=40 columns=155 " 設定視窗大小

  12.  
  13. "set nu " 顯示行號

  14.  
  15. set go= " 不要圖形按鈕

  16.  
  17. "color asmanian2 " 設定背景主題

  18.  
  19. set guifont=Courier_New:h10:cANSI " 設定字型

  20.  
  21. "syntax on " 語法高亮

  22.  
  23. autocmd InsertLeave * se nocul " 用淺色高亮當前行

  24.  
  25. autocmd InsertEnter * se cul " 用淺色高亮當前行

  26.  
  27. "set ruler " 顯示標尺

  28.  
  29. set showcmd " 輸入的命令顯示出來,看的清楚些

  30.  
  31. "set cmdheight=1 " 命令列(在狀態行下)的高度,設定為1

  32.  
  33. "set whichwrap+=<,>,h,l " 允許backspace和游標鍵跨越行邊界(不建議)

  34.  
  35. "set scrolloff=3 " 游標移動到buffer的頂部和底部時保持3行距離

  36.  
  37. set novisualbell " 不要閃爍(不明白)

  38.  
  39. set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "狀態行顯示的內容

  40.  
  41. set laststatus=1 " 啟動顯示狀態行(1),總是顯示狀態行(2)

  42.  
  43. set foldenable " 允許摺疊

  44.  
  45. set foldmethod=manual " 手動摺疊

  46.  
  47. "set background=dark "背景使用黑色

  48.  
  49. set nocompatible "去掉討厭的有關vi一致性模式,避免以前版本的一些bug和侷限

  50.  
  51. " 顯示中文幫助

  52.  
  53. if version >= 603

  54.  
  55. set helplang=cn

  56.  
  57. set encoding=utf-8

  58.  
  59. endif

  60.  
  61. " 設定配色方案

  62.  
  63. "colorscheme murphy

  64.  
  65. "字型

  66.  
  67. "if (has("gui_running"))

  68.  
  69. " set guifont=Bitstream\ Vera\ Sans\ Mono\ 10

  70.  
  71. "endif

  72.  
  73.  
  74.  
  75. set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

  76.  
  77. set termencoding=utf-8

  78.  
  79. set encoding=utf-8

  80.  
  81. set fileencodings=ucs-bom,utf-8,cp936

  82.  
  83. set fileencoding=utf-8

  84.  
  85.  
  86.  
  87. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  88.  
  89. """""新檔案標題""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  90.  
  91. "新建.c,.h,.sh,.java檔案,自動插入檔案頭

  92.  
  93. autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"

  94.  
  95. ""定義函式SetTitle,自動插入檔案頭

  96.  
  97. func SetTitle()

  98.  
  99. "如果檔案型別為.sh檔案

  100.  
  101. if &filetype == 'sh'

  102.  
  103. call setline(1,"\#########################################################################")

  104.  
  105. call append(line("."), "\# File Name: ".expand("%"))

  106.  
  107. call append(line(".")+1, "\# Author: ma6174")

  108.  
  109. call append(line(".")+2, "\# mail: [email protected]")

  110.  
  111. call append(line(".")+3, "\# Created Time: ".strftime("%c"))

  112.  
  113. call append(line(".")+4, "\#########################################################################")

  114.  
  115. call append(line(".")+5, "\#!/bin/bash")

  116.  
  117. call append(line(".")+6, "")

  118.  
  119. else

  120.  
  121. call setline(1, "/*************************************************************************")

  122.  
  123. call append(line("."), " > File Name: ".expand("%"))

  124.  
  125. call append(line(".")+1, " > Author: ma6174")

  126.  
  127. call append(line(".")+2, " > Mail: [email protected] ")

  128.  
  129. call append(line(".")+3, " > Created Time: ".strftime("%c"))

  130.  
  131. call append(line(".")+4, " ************************************************************************/")

  132.  
  133. call append(line(".")+5, "")

  134.  
  135. endif

  136.  
  137. if &filetype == 'cpp'

  138.  
  139. call append(line(".")+6, "#include<iostream>")

  140.  
  141. call append(line(".")+7, "using namespace std;")

  142.  
  143. call append(line(".")+8, "")

  144.  
  145. endif

  146.  
  147. if &filetype == 'c'

  148.  
  149. call append(line(".")+6, "#include<stdio.h>")

  150.  
  151. call append(line(".")+7, "")

  152.  
  153. endif

  154.  
  155. "新建檔案後,自動定位到檔案末尾

  156.  
  157. autocmd BufNewFile * normal G

  158.  
  159. endfunc

  160.  
  161. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  162.  
  163. "鍵盤命令

  164.  
  165. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  166.  
  167.  
  168.  
  169. nmap <leader>w :w!<cr>

  170.  
  171. nmap <leader>f :find<cr>

  172.  
  173.  
  174.  
  175. " 對映全選+複製 ctrl+a

  176.  
  177. map <C-A> ggVGY

  178.  
  179. map! <C-A> <Esc>ggVGY

  180.  
  181. map <F12> gg=G

  182.  
  183. " 選中狀態下 Ctrl+c 複製

  184.  
  185. vmap <C-c> "+y

  186.  
  187. "去空行

  188.  
  189. nnoremap <F2> :g/^\s*$/d<CR>

  190.  
  191. "比較檔案

  192.  
  193. nnoremap <C-F2> :vert diffsplit

  194.  
  195. "新建標籤

  196.  
  197. map <M-F2> :tabnew<CR>

  198.  
  199. "列出當前目錄檔案

  200.  
  201. map <F3> :tabnew .<CR>

  202.  
  203. "開啟樹狀檔案目錄

  204.  
  205. map <C-F3> \be

  206.  
  207. "C,C++ 按F5編譯執行

  208.  
  209. map <F5> :call CompileRunGcc()<CR>

  210.  
  211. func! CompileRunGcc()

  212.  
  213. exec "w"

  214.  
  215. if &filetype == 'c'

  216.  
  217. exec "!g++ % -o %<"

  218.  
  219. exec "! ./%<"

  220.  
  221. elseif &filetype == 'cpp'

  222.  
  223. exec "!g++ % -o %<"

  224.  
  225. exec "! ./%<"

  226.  
  227. elseif &filetype == 'java'

  228.  
  229. exec "!javac %"

  230.  
  231. exec "!java %<"

  232.  
  233. elseif &filetype == 'sh'

  234.  
  235. :!./%

  236.  
  237. endif

  238.  
  239. endfunc

  240.  
  241. "C,C++的除錯

  242.  
  243. map <F8> :call Rungdb()<CR>

  244.  
  245. func! Rungdb()

  246.  
  247. exec "w"

  248.  
  249. exec "!g++ % -g -o %<"

  250.  
  251. exec "!gdb ./%<"

  252.  
  253. endfunc

  254.  
  255. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  256.  
  257. ""實用設定

  258.  
  259. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  260.  
  261. " 設定當檔案被改動時自動載入

  262.  
  263. set autoread

  264.  
  265. " quickfix模式

  266.  
  267. autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>

  268.  
  269. "程式碼補全

  270.  
  271. set completeopt=preview,menu

  272.  
  273. "允許外掛

  274.  
  275. filetype plugin on

  276.  
  277. "共享剪貼簿

  278.  
  279. set clipboard+=unnamed

  280.  
  281. "從不備份

  282.  
  283. set nobackup

  284.  
  285. "make 執行

  286.  
  287. :set makeprg=g++\ -Wall\ \ %

  288.  
  289. "自動儲存

  290.  
  291. set autowrite

  292.  
  293. set ruler " 開啟狀態列標尺

  294.  
  295. set cursorline " 突出顯示當前行

  296.  
  297. set magic " 設定魔術

  298.  
  299. set guioptions-=T " 隱藏工具欄

  300.  
  301. set guioptions-=m " 隱藏選單欄

  302.  
  303. "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\

  304.  
  305. " 設定在狀態行顯示的資訊

  306.  
  307. set foldcolumn=0

  308.  
  309. set foldmethod=indent

  310.  
  311. set foldlevel=3

  312.  
  313. set foldenable " 開始摺疊

  314.  
  315. " 不要使用vi的鍵盤模式,而是vim自己的

  316.  
  317. set nocompatible

  318.  
  319. " 語法高亮

  320.  
  321. set syntax=on

  322.  
  323. " 去掉輸入錯誤的提示聲音

  324.  
  325. set noeb

  326.  
  327. " 在處理未儲存或只讀檔案的時候,彈出確認

  328.  
  329. set confirm

  330.  
  331. " 自動縮排

  332.  
  333. set autoindent

  334.  
  335. set cindent

  336.  
  337. " Tab鍵的寬度

  338.  
  339. set tabstop=4

  340.  
  341. " 統一縮排為4

  342.  
  343. set softtabstop=4

  344.  
  345. set shiftwidth=4

  346.  
  347. " 不要用空格代替製表符

  348.  
  349. set noexpandtab

  350.  
  351. " 在行和段開始處使用製表符

  352.  
  353. set smarttab

  354.  
  355. " 顯示行號

  356.  
  357. set number

  358.  
  359. " 歷史記錄數

  360.  
  361. set history=1000

  362.  
  363. "禁止生成臨時檔案

  364.  
  365. set nobackup

  366.  
  367. set noswapfile

  368.  
  369. "搜尋忽略大小寫

  370.  
  371. set ignorecase

  372.  
  373. "搜尋逐字元高亮

  374.  
  375. set hlsearch

  376.  
  377. set incsearch

  378.  
  379. "行內替換

  380.  
  381. set gdefault

  382.  
  383. "編碼設定

  384.  
  385. set enc=utf-8

  386.  
  387. set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

  388.  
  389. "語言設定

  390.  
  391. set langmenu=zh_CN.UTF-8

  392.  
  393. set helplang=cn

  394.  
  395. " 我的狀態行顯示的內容(包括檔案型別和解碼)

  396.  
  397. "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

  398.  
  399. "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]

  400.  
  401. " 總是顯示狀態行

  402.  
  403. set laststatus=2

  404.  
  405. " 命令列(在狀態行下)的高度,預設為1,這裡是2

  406.  
  407. set cmdheight=2

  408.  
  409. " 偵測檔案型別

  410.  
  411. filetype on

  412.  
  413. " 載入檔案型別外掛

  414.  
  415. filetype plugin on

  416.  
  417. " 為特定檔案型別載入相關縮排檔案

  418.  
  419. filetype indent on

  420.  
  421. " 儲存全域性變數

  422.  
  423. set viminfo+=!

  424.  
  425. " 帶有如下符號的單詞不要被換行分割

  426.  
  427. set iskeyword+=_,$,@,%,#,-

  428.  
  429. " 字元間插入的畫素行數目

  430.  
  431. set linespace=0

  432.  
  433. " 增強模式中的命令列自動完成操作

  434.  
  435. set wildmenu

  436.  
  437. " 使回格鍵(backspace)正常處理indent, eol, start等

  438.  
  439. set backspace=2

  440.  
  441. " 允許backspace和游標鍵跨越行邊界

  442.  
  443. set whichwrap+=<,>,h,l

  444.  
  445. " 可以在buffer的任何地方使用滑鼠(類似office中在工作區雙擊滑鼠定位)

  446.  
  447. set mouse=a

  448.  
  449. set selection=exclusive

  450.  
  451. set selectmode=mouse,key

  452.  
  453. " 通過使用: commands命令,告訴我們檔案的哪一行被改變過

  454.  
  455. set report=0

  456.  
  457. " 在被分割的視窗間顯示空白,便於閱讀

  458.  
  459. set fillchars=vert:\ ,stl:\ ,stlnc:\

  460.  
  461. " 高亮顯示匹配的括號

  462.  
  463. set showmatch

  464.  
  465. " 匹配括號高亮的時間(單位是十分之一秒)

  466.  
  467. set matchtime=1

  468.  
  469. " 游標移動到buffer的頂部和底部時保持3行距離

  470.  
  471. set scrolloff=3

  472.  
  473. " 為C程式提供自動縮排

  474.  
  475. set smartindent

  476.  
  477. " 高亮顯示普通txt檔案(需要txt.vim指令碼)

  478.  
  479. au BufRead,BufNewFile * setfiletype txt

  480.  
  481. "自動補全

  482.  
  483. :inoremap ( ()<ESC>i

  484.  
  485. :inoremap ) <c-r>=ClosePair(')')<CR>

  486.  
  487. :inoremap { {<CR>}<ESC>O

  488.  
  489. :inoremap } <c-r>=ClosePair('}')<CR>

  490.  
  491. :inoremap [ []<ESC>i

  492.  
  493. :inoremap ] <c-r>=ClosePair(']')<CR>

  494.  
  495. :inoremap " ""<ESC>i

  496.  
  497. :inoremap ' ''<ESC>i

  498.  
  499. function! ClosePair(char)

  500.  
  501. if getline('.')[col('.') - 1] == a:char

  502.  
  503. return "\<Right>"

  504.  
  505. else

  506.  
  507. return a:char

  508.  
  509. endif

  510.  
  511. endfunction

  512.  
  513. filetype plugin indent on

  514.  
  515. "開啟檔案型別檢測, 加了這句才可以用智慧補全

  516.  
  517. set completeopt=longest,menu

  518.  
  519. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  520.  
  521. " CTags的設定

  522.  
  523. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  524.  
  525. let Tlist_Sort_Type = "name" " 按照名稱排序

  526.  
  527. let Tlist_Use_Right_Window = 1 " 在右側顯示視窗

  528.  
  529. let Tlist_Compart_Format = 1 " 壓縮方式

  530.  
  531. let Tlist_Exist_OnlyWindow = 1 " 如果只有一個buffer,kill視窗也kill掉buffer

  532.  
  533. let Tlist_File_Fold_Auto_Close = 0 " 不要關閉其他檔案的tags

  534.  
  535. let Tlist_Enable_Fold_Column = 0 " 不要顯示摺疊樹

  536.  
  537. autocmd FileType java set tags+=D:\tools\java\tags

  538.  
  539. "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags

  540.  
  541. "let Tlist_Show_One_File=1 "不同時顯示多個檔案的tag,只顯示當前檔案的

  542.  
  543. "設定tags

  544.  
  545. set tags=tags

  546.  
  547. "set autochdir

  548.  
  549.  
  550.  
  551. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  552.  
  553. "其他東東

  554.  
  555. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  556.  
  557. "預設開啟Taglist

  558.  
  559. let Tlist_Auto_Open=1

  560.  
  561. """"""""""""""""""""""""""""""

  562.  
  563. " Tag list (ctags)

  564.  
  565. """"""""""""""""""""""""""""""""

  566.  
  567. let Tlist_Ctags_Cmd = '/usr/bin/ctags'

  568.  
  569. let Tlist_Show_One_File = 1 "不同時顯示多個檔案的tag,只顯示當前檔案的

  570.  
  571. let Tlist_Exit_OnlyWindow = 1 "如果taglist視窗是最後一個視窗,則退出vim

  572.  
  573. let Tlist_Use_Right_Window = 1 "在右側視窗中顯示taglist視窗

  574.  
  575. " minibufexpl外掛的一般設定

  576.  
  577. let g:miniBufExplMapWindowNavVim = 1

  578.  
  579. let g:miniBufExplMapWindowNavArrows = 1

  580.  
  581. let g:miniBufExplMapCTabSwitchBufs = 1

  582. let g:miniBufExplModSelTarget = 1

 

 

為了方便大家下載使用,我把它放到我的空間裡了,兩個命令就可以瞬間得到.vimrc檔案

wget  http://files.cnblogs.com/ma6174/vimrc.zip

unzip  -f  vimrc.zip  -d  ~/