我的GVim配置

我的GVim配置

  工作中,我大部分时间都是和VIM打交道的,甚至Windows下的编程也开始完全用GVIM替代Editplus。这两天对自己的vimrc文件做了一下整理。同时给每一行的配置增加了注释。整理完成之后,好用多了,因为借鉴了很多网友的经验,所以本着分享的精神公布出来,希望有朋友能用上。
  另外,我这份_vimrc配置使用的字体是:YaHei Mono,如果您没有此字体,可以到这里下载:(下载YaHei Mono字体)。下载后放到Windows文件夹下的fonts目录里即可。如果你不想用YaHei Mono字体,那么有一个替代方案就是用Courier_New字体,需要修改以下配置:

  1. " 设置显示字体
  2. if has("win32")
  3.     " set guifont=Courier_New:h11:cANSI
  4.     set guifont=YaHei\ Mono:h11
  5.     "set guifontwide=Microsoft\ Yahei\ Monotype:h11
  6.     "set guifont=YaHei\ Consolas\ Hybrid:h12
  7. endif

将“set guifont=YaHei\ Mono:h11”注掉,同时把“set guifont=Courier_New:h11:cANSI”项打开即可。

以下是配置文件全部内容:

  1. " ***************Vimrc files for GVim *************
  2. " * CreateDate : Apr 20,2010
  3. " * LastModified : Apr 20,2010
  4.  
  5. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  6. "                                全局设定                                    "
  7. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  8. " 不要使用vi的键盘模式,而是vim自己的
  9. set nocompatible
  10.  
  11. " 加载配置。
  12. behave mswin
  13.  
  14. "设置快速编辑.vimrc文件 ,e 编辑.vimrc
  15. map <silent> <leader>e :call SwitchToBuf("~/_vimrc")<cr>
  16.  
  17. "保存.vimrc文件后会自动调用新的.vimrc
  18. autocmd! bufwritepost .vimrc source ~/_vimrc
  19.  
  20. " 设定解码
  21. if has("multi_byte")
  22.     " When 'fileencodings' starts with 'ucs-bom', don't do this manually
  23.     "set bomb
  24.     set fileencodings=ucs-bom,utf-8,chinese,taiwan,japan,korea,latin1
  25.     " CJK environment detection and corresponding setting
  26.     if v:lang =~ "^zh_CN"
  27.         " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
  28.         set encoding=utf-8
  29.         set termencoding=utf-8
  30.         if &fileencoding == ''
  31.             set fileencoding=utf-8
  32.         endif
  33.     elseif v:lang =~ "^zh_TW"
  34.         " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
  35.         set encoding=euc-tw
  36.         set termencoding=euc-tw
  37.         if &fileencoding == ''
  38.             set fileencoding=euc-tw
  39.         endif
  40.     elseif v:lang =~ "^ja_JP"
  41.         " Japanese, on Unix euc-jp, on MS-Windows cp932
  42.         set encoding=euc-jp
  43.         set termencoding=euc-jp
  44.         if &fileencoding == ''
  45.             set fileencoding=euc-jp
  46.         endif
  47.     elseif v:lang =~ "^ko"
  48.         " Korean on Unix euc-kr, on MS-Windows cp949
  49.         set encoding=euc-kr
  50.         set termencoding=euc-kr
  51.         if &fileencoding == ''
  52.             set fileencoding=ecu-kr
  53.         endif
  54.     endif
  55.     " Detect UTF-8 locale, and override CJK setting if needed
  56.     if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
  57.         set encoding=utf-8
  58.     endif
  59. else
  60.     echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
  61. endif
  62.  
  63.  
  64. " browsedir设置
  65. set browsedir=buffer
  66.  
  67. " 自动格式化设置
  68. filetype indent on
  69. set autoindent
  70. set smartindent
  71.  
  72. " 设置备份及备份目录。
  73. set backspace=indent,eol,start
  74. set backupdir=D:\vim_back_files
  75. set autochdir
  76.  
  77. " history文件中需要记录的行数,恢复必须用到。
  78. set history=1024
  79.  
  80. " 窗口最大化
  81. autocmd GUIEnter * simalt ~x
  82.  
  83. " 解决菜单乱码,先指定语言。
  84. set langmenu=zh_CN.UTF-8
  85. source $VIMRUNTIME/vimrc_example.vim
  86. source $VIMRUNTIME/mswin.vim
  87. language message zh_CN.UTF-8
  88. set fileencodings=utf-8,GB2312,cp936,gb18030,big5,euc-jp,euc-kr,latin1
  89.  
  90. " 在处理未保存或只读文件的时候,弹出确认
  91. set confirm
  92.  
  93. " 共享外部剪贴板
  94. set clipboard+=unnamed
  95.  
  96. " 显示未完成命令
  97. set showcmd
  98. " 侦测文件类型
  99. filetype on
  100.  
  101. " 载入文件类型插件
  102. filetype plugin on
  103.  
  104. " 为特定文件类型载入相关缩进文件
  105. filetype indent on
  106.  
  107. " 保存全局变量
  108. set viminfo+=!
  109.  
  110. " 带有如下符号的单词不要被换行分割
  111. set iskeyword+=_,$,@,%,#,-
  112.  
  113. " 语法高亮
  114. syntax on
  115.  
  116. " 设置不兼容模式
  117. set nocp
  118.  
  119. " 设置鼠标支持
  120. set mouse=a
  121.  
  122. " 不要生成swap文件
  123. setlocal noswapfile
  124.  
  125. " 当buffer被丢弃时隐藏
  126. set bufhidden=hide
  127.  
  128. " 保存窗口大小
  129. set sessionoptions+=resize
  130.  
  131. " C++头文件识别
  132. au BufEnter /usr/include/c++/* setf cpp
  133. au BufEnter /usr/include/g++-3/* setf cpp
  134.  
  135. " GNU标准
  136. au BufEnter /usr/* call GnuIndent()
  137.  
  138. " 显示行号
  139. set number
  140.  
  141. " tab宽度
  142. set tabstop=4
  143. set cindent shiftwidth=4
  144. set autoindent shiftwidth=4
  145.  
  146. " C/C++注释
  147. set comments=://
  148.  
  149. " 修正自动C式样注释功能 <2005/07/16>
  150. set comments=s1:/*,mb:*,ex0:/
  151.  
  152. " 增强检索功能
  153. set tags=./tags,./../tags,./**/tags
  154.  
  155. " 保存文件格式
  156. set fileformats=unix,dos
  157.  
  158. " 文件被其他程序修改时自动载入
  159. set autoread
  160.  
  161. " 高亮字符,让其不受100列限制
  162. :highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white
  163. :match OverLength '\%101v.*'
  164.  
  165. " 总是显示状态行
  166. set laststatus=2
  167.  
  168. " 状态行颜色
  169. " highlight StatusLine guifg=SlateBlue guibg=Yellow
  170. highlight StatusLine guifg=SlateBlue guibg=White
  171. highlight StatusLineNC guifg=Gray guibg=White
  172.  
  173. " 我的状态行显示的内容(包括文件类型和解码)
  174. set statusline=[%n]%<%f%y%h%m%r%=[%b\ 0x%B]\ %l\ of\ %L,%c%V\ Page\ %N\ %P
  175.  
  176. " 设置命令行高度为2行
  177. set cmdheight=1
  178.  
  179. " 命令行补全
  180. set wildmenu
  181. " 自动补全括号,包括大括号
  182. :inoremap ( ()<ESC>i
  183. :inoremap ) <c-r>=ClosePair(')')<CR>
  184. :inoremap { {}<ESC>i
  185. :inoremap } <c-r>=ClosePair('}')<CR>
  186. :inoremap [ []<ESC>i
  187. :inoremap ] <c-r>=ClosePair(']')<CR>
  188. :inoremap < <><ESC>i
  189. :inoremap > <c-r>=ClosePair('>')<CR>
  190.  
  191.  
  192. " 打开文件时,总是跳到退出之前的光标处
  193. autocmd BufReadPost *
  194. \ if line("'\"") > 0 && line("'\"") <= line("$") |
  195. \   exe "normal! g`\"" |
  196. \ endif
  197.  
  198. " 用浅色高亮当前行
  199. if has("gui_running")
  200.     autocmd InsertLeave * se nocul
  201.     autocmd InsertEnter * se cul
  202. endif
  203.  
  204. filetype plugin on      "允许使用ftplugin目录下的文件类型特定脚本
  205. filetype indent on      "允许使用indent目录下的文件类型缩进
  206.  
  207. " 设置自动粘贴功能。
  208. set pastetoggle=<F3>
  209.  
  210. " 设置以缩进的方式自动折叠和设置快捷方式
  211. set foldmethod=indent
  212.  
  213. " map <F3> zO " 打开折叠
  214. map <F4> zc " 关闭折叠
  215. map <F5> zR    " 打开所有折叠
  216. map <F6> zM    " 关闭所有折叠
  217.  
  218. " 保存代码文件前自动修改最后修改时间
  219. au BufWritePre *.sh           call TimeStamp('#')
  220. au BufWritePre .vimrc,*.vim   call TimeStamp('"')
  221. au BufWritePre *.c,*.h        call TimeStamp('//')
  222. au BufWritePre *.cpp,*.hpp    call TimeStamp('//')
  223. au BufWritePre *.cxx,*.hxx    call TimeStamp('//')
  224. au BufWritePre *.java         call TimeStamp('//')
  225. au BufWritePre *.rb           call TimeStamp('#')
  226. au BufWritePre *.py           call TimeStamp('#')
  227. au BufWritePre Makefile       call TimeStamp('#')
  228. au BufWritePre *.php
  229.     \call TimeStamp('<?php //', '?>')
  230. au BufWritePre *.html,*htm
  231.     \call TimeStamp('<!--', '-->')
  232.  
  233. " 更改Leader为","
  234. let g:C_MapLeader = ','
  235.  
  236. " 设置显示字体
  237. if has("win32")
  238.     " set guifont=Courier_New:h11:cANSI
  239.     set guifont=YaHei\ Mono:h11
  240.     "set guifontwide=Microsoft\ Yahei\ Monotype:h11
  241.     "set guifont=YaHei\ Consolas\ Hybrid:h12
  242. endif
  243.  
  244. ab xmain int main(int argc, char *argv[])<cr>{<cr>}<up><cr>return
  245.  
  246. " 使用 murphy 调色板
  247. colo murphy
  248.  
  249. " 不要闪烁
  250. set novisualbell
  251.  
  252. " 能够漂亮地显示.NFO文件
  253. set encoding=utf-8
  254. function! SetFileEncodings(encodings)
  255.     let b:myfileencodingsbak=&fileencodings
  256.     let &fileencodings=a:encodings
  257. endfunction
  258. function! RestoreFileEncodings()
  259.     let &fileencodings=b:myfileencodingsbak
  260.     unlet b:myfileencodingsbak
  261. endfunction
  262.  
  263. au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single
  264. au BufReadPost *.nfo call RestoreFileEncodings()
  265.  
  266. " 用空格键来开关折叠
  267. set foldenable
  268. set foldmethod=manual
  269. nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
  270.  
  271. " 隐藏掉菜单和工具条。
  272. set guioptions-=m
  273. set guioptions-=T
  274. map <silent> <F2> :if &guioptions =~# 'T' <Bar>
  275.         \set guioptions-=T <Bar>
  276.         \set guioptions-=m <bar>
  277.     \else <Bar>
  278.         \set guioptions+=T <Bar>
  279.         \set guioptions+=m <Bar>
  280.     \endif<CR>
  281.  
  282. " 标签页设置
  283. if has("gui_running")
  284.     set showtabline=2
  285.     map! tn tabnew
  286.     nmap <C-c> :tabclose<CR>
  287. endif
  288.  
  289. " 标签页只显示文件名
  290. function ShortTabLabel ()
  291.     let bufnrlist = tabpagebuflist (v:lnum)
  292.     let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1])
  293.     let filename = fnamemodify (label, ':t')
  294.     return filename
  295. endfunction
  296.  
  297. set guitablabel=%{ShortTabLabel()}
  298.  
  299. " 使回格键(backspace)正常处理indent, eol, start等
  300. set backspace=eol,start,indent
  301.  
  302. " 允许backspace和光标键跨越行边界
  303. " set whichwrap+=<,>,h,l
  304.  
  305. " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
  306. set mouse=a
  307. set selection=exclusive
  308. set selectmode=mouse,key
  309.  
  310. " 启动的时候不显示那个援助索马里儿童的提示
  311. set shortmess=atI
  312.  
  313. " 通过使用: commands命令,告诉我们文件的哪一行被改变过
  314. set report=0
  315.  
  316. " 不让vim发出讨厌的滴滴声
  317. set noerrorbells
  318.  
  319. " 在被分割的窗口间显示空白,便于阅读
  320. set fillchars=vert:\ ,stl:\ ,stlnc:\
  321.  
  322. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  323. "                              搜索和匹配                                      "
  324. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  325. " 高亮显示匹配的括号
  326. set showmatch
  327.  
  328. " 匹配括号高亮的时间(单位是十分之一秒)
  329. set matchtime=3
  330.  
  331. " 在搜索的时候忽略大小写
  332. set ignorecase
  333.  
  334. " 不要高亮被搜索的句子(phrases
  335. " set nohlsearch
  336.  
  337. " 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
  338. set incsearch
  339.  
  340. " 输入:set list命令是应该显示些啥?
  341. set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$
  342. " Tab补全时忽略这些忽略这些
  343. set wildignore=*.o,*.obj,*.bak,*.exe
  344. " 光标移动到buffer的顶部和底部时保持3行距离
  345. set scrolloff=3
  346.  
  347. "搜索出之后高亮关键词
  348. set hlsearch
  349.  
  350. nmap <silent> <leader><cr> :noh<cr>
  351.  
  352. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  353. "                              CTags的设定                                     "
  354. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  355. set tags=tags;
  356. " 按照名称排序
  357. let Tlist_Sort_Type = "name"
  358.  
  359. " 在右侧显示窗口
  360. let Tlist_Use_Right_Window = 1
  361.  
  362. " 压缩方式
  363. let Tlist_Compart_Format = 1
  364.  
  365. " 如果只有一个bufferkill窗口也killbuffer
  366. let Tlist_Exist_OnlyWindow = 1
  367.  
  368. " 不要关闭其他文件的tags
  369. let Tlist_File_Fold_Auto_Close = 0
  370.  
  371. " 不要显示折叠树
  372. let Tlist_Enable_Fold_Column = 0
  373.  
  374. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  375. "                               快捷键映射                                     "
  376. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  377. "设置其他快捷键
  378. map <F7> :vsplit<ENTER>:edit `pwd`<ENTER>i
  379. "F7 打开左侧垂直窗口选择待编辑的文件
  380.  
  381. " 自动完成的缩进。
  382. if has("autocmd")
  383.     if has("gui")
  384.         autocmd WinLeave * set nocursorline nocursorcolumn
  385.         autocmd WinEnter * set cursorline cursorcolumn
  386.     else
  387.         autocmd WinLeave * set nocursorline nocursorcolumn
  388.         autocmd WinEnter * set cursorline nocursorcolumn
  389.     endif
  390.  
  391.     " Enable file type detection.
  392.  
  393.     " load view saved by the mkview command
  394.     autocmd FileType * loadview
  395.     autocmd FileType * set noexpandtab
  396.     autocmd BufWinEnter * loadview
  397.  
  398.     " Use the default filetype settings, so that mail gets 'tw' set to 72,
  399.     " 'cindent' is on in C files, etc.
  400.     " Also load indent files, to automatically do language-dependent indenting.
  401.     filetype plugin indent on
  402.  
  403.     " In text files, always limit the width of text to 78 characters
  404.     autocmd FileType text set textwidth=78 expandtab softtabstop=4
  405.     autocmd FileType sh set shiftwidth=4 expandtab softtabstop=4
  406.     autocmd FileType php set shiftwidth=4 expandtab softtabstop=4
  407.     autocmd FileType html set shiftwidth=4 expandtab softtabstop=4
  408.     autocmd FileType javascript set shiftwidth=4 expandtab softtabstop=4
  409.     autocmd FileType python set shiftwidth=4 expandtab softtabstop=4
  410.     autocmd FileType ruby set shiftwidth=4 expandtab softtabstop=4
  411.     autocmd FileType eruby set shiftwidth=4 expandtab softtabstop=4
  412.     autocmd FileType sql set shiftwidth=4 expandtab softtabstop=4
  413.  
  414.     " When editing a file, always jump to the last known cursor position.
  415.     " Don't do it when the position is invalid or when inside an event handler
  416.     " (happens when dropping a file on gvim).
  417.     autocmd BufReadPost *
  418.           \ if line("'\"") > 0 && line("'\"") <= line("$") |
  419.           \   execute "normal g`\"" |
  420.           \ endif
  421.  
  422.     augroup prog
  423.         " Remove all cprog autocommands
  424.         autocmd!
  425.  
  426.         " When starting to edit a file:
  427.         "   For C and C++ files set formatting of comments and set C-indenting on.
  428.         "   For other files switch it off.
  429.         "   Don't change the order, it's important that the line with * comes first.
  430.         autocmd FileType *      set formatoptions=tcoql nocindent comments&
  431.  
  432.         autocmd BufWinLeave *.sh,*.c,*.cpp,*.perl,*.py mkview
  433.         autocmd BufWinEnter *.sh,*.c,*.cpp,*.perl,*.py silent loadview
  434.  
  435.         function! CleverTab()
  436.             if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
  437.             return "\<Tab>"
  438.         else
  439.             return "\<C-N>"
  440.         endfunction
  441.  
  442.         autocmd FileType c,cpp  noremap! <S-Tab> <C-R>=CleverTab()<CR>
  443.         autocmd FileType c,cpp  noremap! <C-]> <C-X><C-]>
  444.         autocmd FileType c,cpp  noremap! <C-F> <C-X><C-F>
  445.         autocmd FileType c,cpp  noremap! <C-D> <C-X><C-D>
  446.         autocmd FileType c,cpp  noremap! <C-L> <C-X><C-L>
  447.  
  448.         autocmd FileType c,cpp,sh,perl,python set fileformat=unix
  449.         autocmd FileType sh     set formatoptions=croql cindent comments=b:#
  450.         autocmd FileType c,cpp  set expandtab shiftwidth=4 softtabstop=4
  451.     augroup END
  452. endif " has("autocmd")
  453.  
  454. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  455. "                            PYTHON 相关的设置                                 "
  456. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  457. "Python 文件的一般设置,比如不要 tab 等
  458. "设置自动缩进为4,插入模式里: 插入 <Tab> 时使用合适数量的空格。
  459. "要插入实际的制表,可用 CTRL-V<Tab> 
  460. autocmd FileType python setlocal expandtab | setlocal shiftwidth=4 |
  461.     \setlocal softtabstop=4 | setlocal textwidth=76 |
  462.     \tabstop=4
  463.  
  464. "pydiction插件设置(需要安装pydiction插件)
  465.  
  466. "设置python的字典路径
  467. let g:pydiction_location = '~/.vim/skeleton/pydict/complete-dict'
  468.  
  469. "设置pydict的菜单高度
  470. let g:pydiction_menu_height = 10  
  471.  
  472. "Python Unittest 的一些设置
  473. "在编写 Python 代码及 unittest 测试时不需要离开 vim
  474. "键入 :make 或者点击 gvim 工具条上的 make 按钮就自动执行测试用例
  475. autocmd FileType python compiler pyunit
  476. autocmd FileType python setlocal makeprg=python\ ~/.vim/skeleton/alltests.py
  477. autocmd BufNewFile,BufRead test*.py setlocal makeprg=python\ %
  478.  
  479. "自动使用新文件模板(需要提前准备skeleton相关文件)
  480. autocmd BufNewFile test*.py 0r ~/.vim/skeleton/test.py
  481. autocmd BufNewFile alltests.py 0r ~/.vim/skeleton/alltests.py
  482. autocmd BufNewFile wx*.py 0r ~/.vim/skeleton/wxskeleton.py
  483. autocmd BufNewFile *.py 0r ~/.vim/skeleton/skeleton.py
  484.  
  485. "设置= + - * 前后自动空格
  486. "设置,后面自动添加空格
  487. au FileType python inoremap <buffer>= <c-r>=EqualSign('=')<CR>
  488. au FileType python inoremap <buffer>+ <c-r>=EqualSign('+')<CR>
  489. au FileType python inoremap <buffer>- <c-r>=EqualSign('-')<CR>
  490. au FileType python inoremap <buffer>* <c-r>=EqualSign('*')<CR>
  491. au FileType python inoremap <buffer>/ <c-r>=EqualSign('/')<CR>
  492. au FileType python inoremap <buffer>> <c-r>=EqualSign('>')<CR>
  493. au FileType python inoremap <buffer>< <c-r>=EqualSign('<')<CR>
  494. au FileType python inoremap <buffer>: <c-r>=Swap()<CR>
  495. au FileType python inoremap <buffer>, ,<space>
  496.  
  497.  
  498. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  499. "                        脚本内部用到的自定义函数                              "
  500. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  501. "
  502. "函数后面加上!是防止vimrc文件重新载入时报错
  503. "实现光标位置自动交换:) -->  ):
  504. function! Swap()
  505.     if getline('.')[col('.') - 1] =~ ")"
  506.         return "\<ESC>la:"
  507.     else
  508.         return ":"
  509.     endif
  510. endf
  511.  
  512. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  513. "
  514. "实现+-*/前后自动添加空格,逗号后面自动添加空格,适用python
  515. "支持+= -+ *= /+格式
  516.  
  517. function! EqualSign(char)
  518.     if a:char  =~ '='  && getline('.') =~ ".*("
  519.         return a:char
  520.     endif
  521.     let ex1 = getline('.')[col('.') - 3]
  522.     let ex2 = getline('.')[col('.') - 2]
  523.  
  524.     if ex1 =~ "[-=+><>\/\*]"
  525.         if ex2 !~ "\s"
  526.             return "\<ESC>i".a:char."\<SPACE>"
  527.         else
  528.             return "\<ESC>xa".a:char."\<SPACE>"
  529.         endif
  530.     else
  531.         if ex2 !~ "\s"
  532.             return "\<SPACE>".a:char."\<SPACE>\<ESC>a"
  533.         else
  534.             return a:char."\<SPACE>\<ESC>a"
  535.         endif
  536.     endif
  537. endf
  538.  
  539. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  540. "
  541. "实现括号的自动配对后防止重复输入),适用python
  542. function! ClosePair(char)
  543.     if getline('.')[col('.') - 1] == a:char
  544.         return "\<Right>"
  545.     else
  546.         return a:char
  547.     endif
  548. endf
  549.  
  550. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  551. "
  552. "SwitchToBuf()实现它在所有标签页的窗口中查找指定的文件名,如果找到这样一个窗口,
  553. "就跳到此窗口中;否则,它新建一个标签页来打开vimrc文件
  554. "上面自动编辑.vimrc文件用到的函数
  555. function! SwitchToBuf(filename)
  556.     let bufwinnr = bufwinnr(a:filename)
  557.     if bufwinnr != -1
  558.     exec bufwinnr . "wincmd w"
  559.         return
  560.     else
  561.         " find in each tab
  562.         tabfirst
  563.         let tab = 1
  564.         while tab <= tabpagenr("$")
  565.             let bufwinnr = bufwinnr(a:filename)
  566.             if bufwinnr != -1
  567.                 exec "normal " . tab . "gt"
  568.                 exec bufwinnr . "wincmd w"
  569.                 return
  570.             endif
  571.             tabnext
  572.             let tab = tab + 1
  573.         endwhile
  574.         " not exist, new tab
  575.         exec "tabnew " . a:filename
  576.     endif
  577. endfunction
  578.  
  579. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  580. "
  581. "Last change用到的函数,返回时间,能够自动调整位置
  582. function! TimeStamp(...)
  583.     let sbegin = ''
  584.     let send = ''
  585.     if a:0 >= 1
  586.         let sbegin = a:1.'\s*'
  587.     endif
  588.     if a:0 >= 2
  589.         let send = ' '.a:2
  590.     endif
  591.     let pattern =  'Last Change: .\+'
  592.         \. send
  593.     let pattern = '^\s*' . sbegin . pattern . '\s*$'
  594.     let now = strftime('%Y-%m-%d %H:%M:%S',
  595.         \localtime())
  596.     let row = search(pattern, 'n')
  597.     if row  == 0
  598.         let now = a:1 .  ' Last Change:  '
  599.             \. now . send
  600.         call append(2, now)
  601.     else
  602.         let curstr = getline(row)
  603.         let col = match( curstr , 'Last')
  604.         let spacestr = repeat(' ',col - 1)
  605.         let now = a:1 . spacestr . 'Last Change:  '
  606.             \. now . send
  607.         call setline(row, now)
  608.     endif
  609. endfunction

你可能感兴趣的:(我的GVim配置)