vim 配置

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
"-------------------------Custom Function------------------------
" Platform
function! MySys()
  if has("win32")
    return "windows"
  else
    return "linux"
  endif
endfunction

function! SwitchToBuf(filename)
    "let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
    " find in current tab
    let bufwinnr = bufwinnr(a:filename)
    if bufwinnr != -1
        exec bufwinnr . "wincmd w"
        return
    else
        " find in each tab
        tabfirst
        let tab = 1
        while tab <= tabpagenr("$")
            let bufwinnr = bufwinnr(a:filename)
            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 " . a:filename
    endif
endfunction

function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf


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

" For windows version
"if MySys() == 'windows'
"    source $VIMRUNTIME/mswin.vim
"   behave mswin
"endif
"-------------------------mySettings-----------------------------
source C:\Program Files\Vim\vimfiles\syntax\jquery.vim
source C:\Program Files\Vim\vimfiles\colors\hotoo.vim

"Toggle Menu and Toolbar
set guioptions-=m
set guioptions-=T
map <silent> <F2> :if &guioptions =~# 'T' <Bar>
        \set guioptions-=T <Bar>
        \set guioptions-=m <bar>
    \else <Bar>
        \set guioptions+=T <Bar>
        \set guioptions+=m <Bar>
    \endif<CR>

:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>


"Tabs show  
set showtabline=2
" TAB距离 (vim配置; vim技巧)
set tabstop=4          " 保存一个tab是4个字符
set softtabstop=4      " 按一次tab前进4个字符
set shiftwidth=4       " shiftwidth写代码时用到,缩进为4字符
set cindent
syntax enable          "syntax on
colorscheme slate
set nocompatible
set nu
filetype on               "检测文件的类型
set history=1000        "记录历史的行数
set background=dark        "语法高亮度显示

set autochdir       "自动切换工作目录,以当前打开的文件所在目录为准
"cd d:\test            "设置当前目录
set autoindent
set smartindent
set guioptions-=T          "去除vim的GUI版本中的toolbar
set vb t_vb=            "当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set ruler                "在编辑过程中,在右下角显示光标位置的状态行
set nohls                 "默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示
set cul                    "或者 set cursorline 高亮显示当前行
" 打开文件时光标自动到上次退出该文件时的光标所在位置
autocmd BufReadPost * if line("'\"") && line("'\"") <= line("$") | exe "normal`\"" | endif
set foldmethod=indent    "缩进折叠代码
"保留折叠:
"要下一次打开的时候还保留折叠可以在离开的时候:mkview,再进来的时候:loadview就可以了。 当然也可以将这两句加到vimrc里面让其自动完成。
"au BufWinLeave * mkview
"au BufWinEnter * silent loadview

"查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
"个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch
"修改一个文件后,自动进行备份,备份的文件名为原文件名加“~“后缀
"set nobackup           " 让VIM不生成备份文件(~文件)
if has("vms")
   set nobackup
else
   set backup
endif
"默认最大化
if has('win32')
    au GUIEnter * simalt ~x   " 窗口最大化
else
  au GUIEnter * call MaximizeWindow()
endif
function! MaximizeWindow()
  silent !wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
endfunction
"-----------------------NERD_tree------------------------
source C:\Program Files\Vim\vimfiles\plugin\NERD_tree.vim
"-----------------taglist------------------------
source C:\Program Files\Vim\vimfiles\plugin\taglist.vim

let Tlist_Show_One_File = 1            "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1          "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1         "在右侧窗口中显示taglist窗口

"Tlist_Ctags_Cmd选项用于指定你的Exuberant ctags程序的位置,如果它没在你PATH变量所定义的路径中,需要使用此选项设置一下;
"如果你不想同时显示多个文件中的tag,设置Tlist_Show_One_File为1。缺省为显示多个文件中的tag;
"设置Tlist_Sort_Type为”name”可以使taglist以tag名字进行排序,缺省是按tag在文件中出现的顺序进行排序。
"按tag出现的范围(即所属的namespace或class)排序,已经加入taglist的TODO List,但尚未支持;
"如果你在想taglist窗口是最后一个窗口时退出VIM,设置Tlist_Exit_OnlyWindow为1;
"如果你想taglist窗口出现在右侧,设置Tlist_Use_Right_Window为1。缺省显示在左侧。
"在gvim中,如果你想显示taglist菜单,设置Tlist_Show_Menu为1。
"你可以使用Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度;
"缺省情况下,在双击一个tag时,才会跳到该tag定义的位置,如果你想单击tag就跳转,设置Tlist_Use_SingleClick为1;
"如果你想在启动VIM后,自动打开taglist窗口,设置Tlist_Auto_Open为1;
"如果你希望在选择了tag后自动关闭taglist窗口,设置Tlist_Close_On_Select为1;
"当同时显示多个文件中的tag时,设置Tlist_File_Fold_Auto_Close为1,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来。
"在使用:TlistToggle打开taglist窗口时,如果希望输入焦点在taglist窗口中,设置Tlist_GainFocus_On_ToggleOpen为1;
"如果希望taglist始终解析文件中的tag,不管taglist窗口有没有打开,设置Tlist_Process_File_Always为1;
"Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为1设置taglist窗口横向显示;
"在taglist窗口中,可以使用下面的快捷键:
"    <CR>          跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
"    o             在一个新打开的窗口中显示光标下tag
"    <Space>       显示光标下tag的原型定义
"    u             更新taglist窗口中的tag
"    s             更改排序方式,在按名字排序和按出现顺序排序间切换
"    x             taglist窗口放大和缩小,方便查看较长的tag
"    +             打开一个折叠,同zo
"    -             将tag折叠起来,同zc
"    *             打开所有的折叠,同zR
"    =             将所有tag折叠起来,同zM
"    [[            跳到前一个文件
"    ]]            跳到后一个文件
"    q             关闭taglist窗口
"    <F1>          显示帮助
"可以用“:TlistOpen”打开taglist窗口,用“:TlistClose”关闭taglist窗口。
"或者使用“:TlistToggle”在打开和关闭间切换。在我的vimrc中定义了下面的映射,使用“,tl”键就可以打开/关闭taglist窗口:
map <silent> <leader>tl :TlistToogle<cr>
"Taglist插件还提供了很多Ex命令,你甚至可以用这些命令创建一个taglist的会话,然后在下次进入VIM时加载此会话。
"-----------------ctags------------------------
" 运行 C:\Program Files\Vim\ctags58>ctags -R * (生成tags文件)  
"set tags=tags;    "注意第一个命令里的分号是必不可少的。
set tags=C:\Program\ Files\Vim\ctags58\tags;
"set autochdir     "这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,
                   "或者没有找到对应的目标,就到父目录中查找,一直向上递归。
                   "因为tags文件中记录的路径总是相对于tags文件所在的路径,


"---------------------BufExplorer----------------------
source C:\Program Files\Vim\vimfiles\plugin\bufexplorer.vim    

let g:bufExplorerDefaultHelp=0       " Do not show default help.
let g:bufExplorerShowRelativePath=1  " Show relative paths.
let g:bufExplorerSortBy='mru'        " Sort by most recently used.
let g:bufExplorerSplitRight=0        " Split left.
let g:bufExplorerSplitVertical=1     " Split vertically.
let g:bufExplorerSplitVertSize = 30  " Split width
let g:bufExplorerUseCurrentWindow=1  " Open in new window.
               

"----------------netrw setting-------------------------

let g:netrw_winsize = 30
"nmap fe :Sexplore
                   
"--------------WinManager------------------------
"winmanager帮助:
"      CTRL-W h    跳转到左边的窗口
"      CTRL-W j     跳转到下面的窗口
"      CTRL-W k    跳转到上面的窗口
"     CTRL-W l     跳转到右边的窗口
"     CTRL-W t    跳转到最顶上的窗口
"     CTRL-W b    跳转到最底下的窗口
"plugin/winmanager.vim – winmanager插件
"plugin/winfileexplorer.vim - 改良的Explorer插件
"plugin/wintagexplorer.vim – winmanager提供的tag插件,用处不大doc/winmanager.txt – 帮助文件
"source C:\Program Files\Vim\vimfiles\plugin\winfileexplorer.vim
"source C:\Program Files\Vim\vimfiles\plugin\wintagexplorer.vim
source C:\Program Files\Vim\vimfiles\plugin\winmanager.vim

let g:NERDTree_title='NERD Tree'
let g:winManagerWindowLayout='NERDTree|TagList'
"let g:winManagerWindowLayout ="BufExplorer,FileExplorer|TagList"
let g:winManagerWidth = 30
let g:defaultExplorer = 0

function! NERDTree_Start()
    exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
    return 1
endfunction

nmap <F4> :WMToggle<cr>:q<cr>   " 用 F4 打开
nmap <C-F4> :WMToggle<cr>        " 用 ctrl + F4 关闭
nmap <C-W><C-F> :FirstExplorerWindow<cr>
nmap <C-W><C-B> :BottomExplorerWindow<cr>
"nmap <silent> <leader>wm:WMToggle<cr>
"nmap <F11> :wa<cr>:TlistUpdate<cr>:TlistUpdate<cr><F5><c-w>b  "刷新 winManager



posted @ 2010-10-15 16:02  jiangchao  阅读(845)  评论(0编辑  收藏  举报