zoukankan      html  css  js  c++  java
  • GVim配置文件_vimrc

    " -----------------   Author: Ruchee
    " -----------------    Email: my@ruchee.com
    " -----------------  WebSite: http://www.ruchee.com
    " -----------------     Date: 2012-05-01
    
    
    " Ctrl + H                   --光标移当前行行首
    " Ctrl + J                   --光标移下一行行首
    " Ctrl + K                   --光标移上一行行尾
    " Ctrl + L                   --光标移当前行行尾
    " Ctrl + C                   --编译 [支持C/C++、Java、Haskll]
    " Ctrl + R                   --运行 [支持C/C++、Java、Haskell、Lua、Perl、Python、Ruby]
    " Ctrl + ]                   --转到函数定义
    " Ctrl + T                   --返回调用函数
    " Ctrl + E                   --一步加载语法模板和作者、时间信息
    
    " <C-P>                      --单词补全
    " <C-X><C-L>                 --整行补全
    " Tab键                      --插入模式下的全功能语法结构补全 [snipMate插件]
    " Shift + Insert             --向Vim中粘贴从别处复制的内容
    
    " u [小写]                   --单步复原 [非插入模式]
    " U [大写]                   --整行复原 [非插入模式]
    
    " jj                         --保存文件并留在插入模式 [插入模式]
    " kk                         --返回Normal模式 [插入模式]
    " nt                         --打开NERDTree [非插入模式]
    " tl                         --打开TagList [非插入模式]
    
    " za                         --打开或关闭当前折叠
    " zM                         --关闭所有折叠
    " zR                         --打开所有折叠
    
    " :set syntax=cpp            --手动选择语法高亮 [或 :set filetype=cpp]
    
    " :%!xxd                     --转储二进制文件,以十六进制形式显示
    " :%!xxd -r                  --还原二进制文件
    
    
    " ---------- 主要插件详细用法说明 ---------------------
    
    " :Tlist                     --呼出变量和函数列表 [TagList插件]
    " :LoadTemplate              --呼出语法模板 [Load_Template插件]
    " :AuthorInfoDetect          --添加作者、时间等信息 [NERD_commenter && authorinfo插件]
    
    " ---------- a.vim [自动切换C/C++同名头文件] ----------
    "
    " :A                         --切换同名头文件并独占整个屏幕
    " :AS                        --切换同名头文件并垂直分屏,头文件在上
    " :AV                        --切换同名头文件并水平分割,头文件在左
    
    " ---------- mark.vim [追踪高亮指定关键字] ------------
    "
    " \m                         --normal模式下,在想要高亮的单词上面敲击\m即可高亮或取消高亮该单词
    " :Mark                      --取消所有高亮
    " :Mark abc                  --指定高亮单词 abc 或取消高亮 abc
    
    " ---------- NERDTree [智能文件浏览器] ----------------
    "
    " :NERDTree                  --启动NERDTree插件
    " o [小写]                   --切换当前文件或目录的打开、关闭状态
    " u                          --打开上层目录
    " p [小写]                   --返回上层目录
    " P [大写]                   --返回根目录
    " K                          --转到当前目录第一个节点
    " J                          --转到当前目录最后的节点
    " m                          --显示文件系统菜单 [增、删、移]
    " ?                          --弹出帮助菜单
    " q                          --退出该插件
    
    
    " 将所有以.html结尾的文档以Django Template语法进行渲染
    " 本配置语句必须放在所有配置的最前面
    au BufNewFile,BufRead *.html setf htmldjango
    
    colorscheme blackboard       " 着色模式:蓝色背景
    set guifont=Monaco:h10       " 字体 && 字号
    set tabstop=4                " 设置tab键的宽度
    set shiftwidth=4             " 换行时行间交错使用4个空格
    set autoindent               " 自动对齐
    set backspace=2              " 设置退格键可用
    set cindent shiftwidth=4     " 自动缩进4空格
    set smartindent              " 智能自动缩进
    set ai!                      " 设置自动缩进
    set nu!                      " 显示行号
    "set showmatch               " 显示括号配对情况
    set mouse=a                  " 启用鼠标
    set ruler                    " 右下角显示光标位置的状态行
    set incsearch                " 查找book时,当输入/b时会自动找到
    set hlsearch                 " 开启高亮显示结果
    set incsearch                " 开启实时搜索功能
    set nowrapscan               " 搜索到文件两端时不重新搜索
    set nocompatible             " 关闭兼容模式
    set vb t_vb=                 " 关闭提示音
    "set cursorline              " 突出显示当前行
    set hidden                   " 允许在有未保存的修改时切换缓冲区
    set list                     " 显示Tab符,使用一高亮竖线代替
    set listchars=tab:\|\ ,
    
    syntax enable                " 打开语法高亮
    syntax on                    " 开启文件类型侦测
    filetype indent on           " 针对不同的文件类型采用不同的缩进格式
    filetype plugin on           " 针对不同的文件类型加载对应的插件
    filetype plugin indent on    " 启用自动补全
    
    
    if has("gui_running")
        au GUIEnter * simalt ~x  " 窗口启动时自动最大化
        "winpos 20 20            " 指定窗口出现的位置,坐标原点在屏幕左上角
        "set lines=20 columns=90 " 指定窗口大小,lines为高度,columns为宽度
        "set guioptions-=m       " 隐藏菜单栏
        "set guioptions-=T       " 隐藏工具栏
        "set guioptions-=L       " 隐藏左侧滚动条
        "set guioptions-=r       " 隐藏右侧滚动条
        "set guioptions-=b       " 隐藏底部滚动条
        "set showtabline=0       " 隐藏Tab栏
    endif
    
    set writebackup              " 设置无备份文件
    set nobackup
    set autochdir                " 设定文件浏览器目录为当前目录
    "set nowrap                  " 设置不自动换行
    set foldmethod=syntax        " 选择代码折叠类型
    set foldlevel=100            " 禁止自动折叠
    
    set laststatus=2             " 开启状态栏信息
    set cmdheight=2              " 命令行的高度,默认为1,这里设为2
    
    " 每行超过80个的字符用下划线标示
    au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.cc,*.java,*.cs,*.erl,*.hs,*.sh,*.lua,*.pl,*.pm,*.php,*.py,*.rb,*.erb,*.vim,*.js,*.css,*.xml,*.html,*.xhtml 2match Underlined /.\%81v/
    
    
    " 设置编码
    set fenc=utf-8
    set encoding=utf-8
    set fileencodings=utf-8,gbk,cp936,latin-1
    " 解决菜单乱码
    source $VIMRUNTIME/delmenu.vim
    source $VIMRUNTIME/menu.vim
    " 解决consle输出乱码
    language messages zh_CN.utf-8
    
    
    " For Haskell
    :let hs_highlight_delimiters=1            " 高亮定界符
    :let hs_highlight_boolean=1               " 把True和False识别为关键字
    :let hs_highlight_types=1                 " 把基本类型的名字识别为关键字
    :let hs_highlight_more_types=1            " 把更多常用类型识别为关键字
    :let hs_highlight_debug=1                 " 高亮调试函数的名字
    :let hs_allow_hash_operator=1             " 阻止把#高亮为错误
    
    
    " ======= 引号 && 括号自动匹配 ======= "
    
    :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>
    
    :inoremap " ""<ESC>i
    
    :inoremap ' ''<ESC>i
    
    :inoremap ` ``<ESC>i
    
    function ClosePair(char)
        if getline('.')[col('.') - 1] == a:char
            return "\<Right>"
        else
            return a:char
        endif
    endf
    
    
    " MiniBufExplorer     多个文件切换 可使用鼠标双击相应文件名进行切换
    let g:miniBufExplMapWindowNavVim=1
    let g:miniBufExplMapWindowNavArrows=1
    let g:miniBufExplMapCTabSwitchBufs=1
    let g:miniBufExplModSelTarget=1
    
    " :Tlist              调用TagList
    let Tlist_Show_One_File=1                    " 只显示当前文件的tags
    let Tlist_Exit_OnlyWindow=1                  " 如果Taglist窗口是最后一个窗口则退出Vim
    let Tlist_Use_Right_Window=1                 " 在右侧窗口中显示
    let Tlist_File_Fold_Auto_Close=1             " 自动折叠
    
    " TxtBrowser          高亮TXT文本文件
    au BufRead,BufNewFile *.txt setlocal ft=txt
    
    " :LoadTemplate       根据文件后缀自动加载模板
    let g:template_path='D:/Apps/Gvim/vimfiles/template/'
    
    " :AuthorInfoDetect   自动添加作者、时间等信息,本质是NERD_commenter && authorinfo的结合
    let g:vimrc_author='Ruchee'
    let g:vimrc_email='my@ruchee.com'
    let g:vimrc_homepage='http://www.ruchee.com'
    
    " Ctrl + H            将光标移到当前行的行首
    imap <c-h> <ESC>I
    
    " Ctrl + J            将光标移到下一行的行首
    imap <c-j> <ESC>jI
    
    " Ctrl + K            将光标移到上一行的末尾
    imap <c-k> <ESC>kA
    
    " Ctrl + L            将光标移到当前行的行尾
    imap <c-l> <ESC>A
    
    " Ctrl + E            一步加载语法模板和作者、时间信息
    map <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi
    imap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi
    vmap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi
    
    " jj                  保存文件并留在插入模式 [插入模式]
    imap jj <ESC>:w<CR>li
    
    " kk                  返回Normal模式 [插入模式]
    imap kk <ESC>l
    
    " nt                  打开NERDTree [非插入模式]
    map nt :NERDTree<CR>
    
    " tl                  打开Taglist [非插入模式]
    map tl :Tlist<CR><c-l>
    
    
    " ======= 编译 && 运行 ======= "
    
    " 编译源文件
    func! CompileCode()
            exec "w"
            if &filetype == "c"
                exec "!gcc -Wall -std=c99 %<.c -o %<"
            elseif &filetype == "cpp"
                exec "!g++ -Wall -std=c++98 %<.cpp -o %<"
            elseif &filetype == "java"
                exec "!javac %<.java"
            elseif &filetype == "haskell"
                exec "!ghc --make %<.hs -o %<"
            elseif &filetype == "lua"
                exec "!lua %<.lua"
            elseif &filetype == "perl"
                exec "!perl %<.pl"
            elseif &filetype == "python"
                exec "!python %<.py"
            elseif &filetype == "ruby"
                exec "!ruby %<.rb"
            endif
    endfunc
    
    " 运行可执行文件
    func! RunCode()
            exec "w"
            if &filetype == "c" || &filetype == "cpp" || &filetype == "haskell"
                exec "! %<.exe"
            elseif &filetype == "java"
                exec "!java %<"
            elseif &filetype == "lua"
                exec "!lua %<.lua"
            elseif &filetype == "perl"
                exec "!perl %<.pl"
            elseif &filetype == "python"
                exec "!python %<.py"
            elseif &filetype == "ruby"
                exec "!ruby %<.rb"
            endif
    endfunc
    
    " Ctrl + C 一键保存、编译
    map <c-c> :call CompileCode()<CR>
    imap <c-c> <ESC>:call CompileCode()<CR>
    vmap <c-c> <ESC>:call CompileCode()<CR>
    
    " Ctrl + R 一键保存、运行
    map <c-r> :call RunCode()<CR>
    imap <c-r> <ESC>:call RunCode()<CR>
    vmap <c-r> <ESC>:call RunCode()<CR>
    let mapleader = ";"    " 比较习惯用;作为命令前缀,右手小拇指直接能按到
    " 把空格键映射成:
    nmap <space> :
    
    " 快捷打开编辑vimrc文件的键盘绑定
    map <silent> <leader>ee :e $HOME/.vimrc<cr>
    autocmd! bufwritepost *.vimrc source $HOME/.vimrc
    
    " ^z快速进入shell
    nmap <C-Z> :shell<cr>
    inoremap <leader>n <esc>
    
    " 判断操作系统
    if (has("win32") || has("win64") || has("win32unix"))
        let g:isWin = 1
    else
        let g:isWin = 0
    endif
    
    " 判断是终端还是gvim
    if has("gui_running")
        let g:isGUI = 1
    else
        let g:isGUI = 0
    endif
    
    set nocompatible    " 关闭兼容模式
    syntax enable       " 语法高亮
    filetype plugin on  " 文件类型插件
    filetype indent on
    set shortmess=atI   " 去掉欢迎界面
    set autoindent
    autocmd BufEnter * :syntax sync fromstart
    set nu              " 显示行号
    set showcmd         " 显示命令
    set lz              " 当运行宏时,在命令执行完成之前,不重绘屏幕
    set hid             " 可以在没有保存的情况下切换buffer
    set backspace=eol,start,indent 
    set whichwrap+=<,>,h,l " 退格键和方向键可以换行
    set incsearch       " 增量式搜索
    set nohlsearch
    "set hlsearch        " 高亮搜索
    set ignorecase      " 搜索时忽略大小写
    set magic           " 额,自己:h magic吧,一行很难解释
    set showmatch       " 显示匹配的括号
    set nobackup        " 关闭备份
    set nowb
    set noswapfile      " 不使用swp文件,注意,错误退出后无法恢复
    set lbr             " 在breakat字符处而不是最后一个字符处断行
    set ai              " 自动缩进
    set si              " 智能缩进
    set cindent         " C/C++风格缩进
    set wildmenu         
    set nofen
    set fdl=10
    
    " tab转化为4个字符
    set expandtab
    set smarttab
    set shiftwidth=4
    set tabstop=4
    
    " 不使用beep或flash 
    set vb t_vb=
    
    set background=dark
    set t_Co=256
    colorscheme xoria256
    
    set history=400  " vim记住的历史操作的数量,默认的是20
    set autoread     " 当文件在外部被修改时,自动重新读取
    set mouse=n     " 在所有模式下都允许使用鼠标,还可以是n,v,i,c等
    
    "在gvim中高亮当前行
    if (g:isGUI)
        set cursorline
        colorscheme wombat
        hi cursorline guibg=#333333
        hi CursorColumn guibg=#333333
        "set guifont=Consolas\ 10
        "set guifontwide=Consolas\ 10
        set guifont=DejaVu\ Sans\ Mono\ 10
        set gfw=DejaVu\ Sans\ Mono\ 10
        " 不显示toolbar
        set guioptions-=T
        " 不显示菜单栏
        "set guioptions-=m
    endif
    
    " 设置字符集编码,默认使用utf8
    if (g:isWin)
        let &termencoding=&encoding " 通常win下的encoding为cp936
        set fileencodings=utf8,cp936,ucs-bom,latin1
    else
        set encoding=utf8
        set fileencodings=utf8,gb2312,gb18030,ucs-bom,latin1
    endif
    
    " 状态栏
    set laststatus=2      " 总是显示状态栏
    highlight StatusLine cterm=bold ctermfg=yellow ctermbg=blue
    " 获取当前路径,将$HOME转化为~
    function! CurDir()
        let curdir = substitute(getcwd(), $HOME, "~", "g")
        return curdir
    endfunction
    set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurDir()}\ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\ @\ %{hostname()}\ 
    
    " 第80列往后加下划线
    "au BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1)
    
    " 根据给定方向搜索当前光标下的单词,结合下面两个绑定使用
    function! VisualSearch(direction) range
        let l:saved_reg = @"
        execute "normal! vgvy"
        let l:pattern = escape(@", '\\/.*$^~[]')
        let l:pattern = substitute(l:pattern, "\n$", "", "")
        if a:direction == 'b'
            execute "normal ?" . l:pattern . "<cr>"
        else
            execute "normal /" . l:pattern . "<cr>"
        endif
        let @/ = l:pattern
        let @" = l:saved_reg
    endfunction
    " 用 */# 向 前/后 搜索光标下的单词
    vnoremap <silent> * :call VisualSearch('f')<CR>
    vnoremap <silent> # :call VisualSearch('b')<CR>
    
    " 在文件名上按gf时,在新的tab中打开
    "map gf :tabnew <cfile><cr>
    
    " 用c-j,k在buffer之间切换
    nn <C-J> :bn<cr>
    nn <C-K> :bp<cr>
    
    " Bash(Emacs)风格键盘绑定
    imap <C-e> <END>
    imap <C-a> <HOME>
    "imap <C-u> <esc>d0i
    "imap <C-k> <esc>d$i  " 与自动补全中的绑定冲突
    
    "从系统剪切板中复制,剪切,粘贴
    map <F7> "+y
    map <F8> "+x
    map <F9> "+p
    
    " 恢复上次文件打开位置
    set viminfo='10,\"100,:20,%,n~/.viminfo
    au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
    
    " 删除buffer时不关闭窗口
    command! Bclose call <SID>BufcloseCloseIt()
    function! <SID>BufcloseCloseIt()
        let l:currentBufNum = bufnr("%")
        let l:alternateBufNum = bufnr("#")
    
        if buflisted(l:alternateBufNum)
            buffer #
        else
            bnext
        endif
    
        if bufnr("%") == l:currentBufNum
            new
        endif
    
        if buflisted(l:currentBufNum)
            execute("bdelete! ".l:currentBufNum)
        endif
    endfunction
    
    
    " 快捷输入
    " 自动完成括号和引号
    inoremap <leader>1 ()<esc>:let leavechar=")"<cr>i
    inoremap <leader>2 []<esc>:let leavechar="]"<cr>i
    inoremap <leader>3 {}<esc>:let leavechar="}"<cr>i
    inoremap <leader>4 {<esc>o}<esc>:let leavechar="}"<cr>O
    inoremap <leader>q ''<esc>:let leavechar="'"<cr>i
    inoremap <leader>w ""<esc>:let leavechar='"'<cr>i
    
    
    " 插件窗口的宽度,如TagList,NERD_tree等,自己设置
    let s:PlugWinSize = 25
    
    " taglist.vim
    " http://www.vim.org/scripts/script.php?script_id=273
    " <leader>t 打开TagList窗口,窗口在右边
    nmap <silent> <leader>t :TlistToggle<cr>
    "let Tlist_Ctags_Cmd = '/usr/bin/ctags'
    let Tlist_Show_One_File = 0
    let Tlist_Exit_OnlyWindow = 1 
    let Tlist_Use_Right_Window = 1
    let Tlist_File_Fold_Auto_Close = 1
    let Tlist_GainFocus_On_ToggleOpen = 0
    let Tlist_WinWidth = s:PlugWinSize
    let Tlist_Auto_Open = 0
    let Tlist_Display_Prototype = 0
    "let Tlist_Close_On_Select = 1
    
    
    " OmniCppComplete.vim
    " http://www.vim.org/scripts/script.php?script_id=1520
    set completeopt=menu
    let OmniCpp_ShowPrototypeInAbbr = 1 
    let OmniCpp_DefaultNamespaces = ["std"]     " 逗号分割的字符串
    let OmniCpp_MayCompleteScope = 1 
    let OmniCpp_ShowPrototypeInAbbr = 0 
    let OmniCpp_SelectFirstItem = 2 
    " c-j自动补全,当补全菜单打开时,c-j,k上下选择
    imap <expr> <c-j>      pumvisible()?"\<C-N>":"\<C-X><C-O>"
    imap <expr> <c-k>      pumvisible()?"\<C-P>":"\<esc>"
    " f:文件名补全,l:行补全,d:字典补全,]:tag补全
    imap <C-]>             <C-X><C-]>
    imap <C-F>             <C-X><C-F>
    imap <C-D>             <C-X><C-D>
    imap <C-L>             <C-X><C-L> 
    
    " NERD_commenter.vim
    " http://www.vim.org/scripts/script.php?script_id=1218
    " Toggle单行注释/“性感”注释/注释到行尾/取消注释
    map <leader>cc ,c<space>
    map <leader>cs ,cs
    map <leader>c$ ,c$
    map <leader>cu ,cu
    
    " NERD tree
    " http://www.vim.org/scripts/script.php?script_id=1658
    let NERDTreeShowHidden = 1
    let NERDTreeWinPos = "left"
    let NERDTreeWinSize = s:PlugWinSize 
    nmap <leader>n :NERDTreeToggle<cr>
    
    " DoxygenToolkit.vim
    " http://www.vim.org/scripts/script.php?script_id=987
    " 暂时没有使用
    
    " 更新ctags和cscope索引
    " href: http://www.vimer.cn/2009/10/把vim打造成一个真正的ide2.html
    " 稍作修改,提取出DeleteFile函数,修改ctags和cscope执行命令
    map <F6> :call Do_CsTag()<cr>
    function! Do_CsTag()
        let dir = getcwd()
    
        "先删除已有的tags和cscope文件,如果存在且无法删除,则报错。
        if ( DeleteFile(dir, "tags") ) 
            return 
        endif
        if ( DeleteFile(dir, "cscope.files") ) 
            return 
        endif
        if ( DeleteFile(dir, "cscope.out") ) 
            return 
        endif
    
        if(executable('ctags'))
            silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."
        endif
        if(executable('cscope') && has("cscope") )
            if(g:isWin)
                silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
            else
                silent! execute "!find . -iname '*.[ch]' -o -name '*.cpp' > cscope.files"
            endif
            silent! execute "!cscope -b"
            execute "normal :"
            if filereadable("cscope.out")
                execute "cs add cscope.out"
            endif
        endif
        " 刷新屏幕
        execute "redr!"
    endfunction
    
    function! DeleteFile(dir, filename)
        if filereadable(a:filename)
            if (g:isWin)
                let ret = delete(a:dir."\\".a:filename)
            else
                let ret = delete("./".a:filename)
            endif
            if (ret != 0)
                echohl WarningMsg | echo "Failed to delete ".a:filename | echohl None
                return 1
            else
                return 0
            endif
        endif
        return 0
    endfunction
    
    " cscope 绑定
    if has("cscope")
        set csto=1
        set cst
        set nocsverb
        if filereadable("cscope.out")
            cs add cscope.out
        endif
        set csverb
        " s: C语言符号  g: 定义     d: 这个函数调用的函数 c: 调用这个函数的函数
        " t: 文本       e: egrep模式    f: 文件     i: include本文件的文件
        nmap <leader>ss :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
        nmap <leader>sg :cs find g <C-R>=expand("<cword>")<CR><CR>
        nmap <leader>sc :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
        nmap <leader>st :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
        nmap <leader>se :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
        nmap <leader>sf :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
        nmap <leader>si :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
        nmap <leader>sd :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    endif
    
    " Quick Fix 设置
    map <F3> :cw<cr>
    map <F4> :cp<cr>
    map <F5> :cn<cr>
    
    " Buffers Explorer (需要genutils.vim)
    " http://vim.sourceforge.net/scripts/script.php?script_id=42
    " http://www.vim.org/scripts/script.php?script_id=197
    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 = s:PlugWinSize  " Split width
    let g:bufExplorerUseCurrentWindow=1  " Open in new window.
    autocmd BufWinEnter \[Buf\ List\] setl nonumber
    nmap <silent> <Leader>b :BufExplorer<CR>
    
    " Vimwiki配置
    let g:vimwiki_list = [{'path': '~/Dropbox/MyWiki/my_site/',
                \ 'path-html': '~/Dropbox/MyWiki/my_site_html/',
                \ 'html-header': '~/Dropbox/MyWiki/templates/header.tpl',
                \ 'html-footer': '~/Dropbox/MyWiki/templates/footer.tpl'}]
    let g:vimwiki_camel_case=0
    
    let wiki = {}
    let wiki.path = '~/Dropbox/MyWiki/my_site/'
    let wiki.nested_syntaxes = {'python': 'python', 'c++': 'cpp'}
    let g:vimwiki_list = [wiki]
    
    "pythoncomplete配置
    autocmd filetype python set omnifunc=pythoncomplete#Complete
    runtime! debian.vim
    "设置编码
    set encoding=utf-8
    set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
    set fileencodings=utf-8,ucs-bom,chinese
    
    "语言设置
    set langmenu=zh_CN.UTF-8
    
    "设置语法高亮
    syntax enable
    syntax on
    
    "设置配色方案
    colorscheme torte
    
    "可以在buffer的任何地方使用鼠标
    set mouse=a
    set selection=exclusive
    set selectmode=mouse,key
    
    "高亮显示匹配的括号
    set showmatch
    
    "去掉vi一致性
    set nocompatible
    
    "设置缩进
    set tabstop=4
    set softtabstop=4
    set shiftwidth=4
    set autoindent
    set cindent
    if &term=="xterm"
        set t_Co=8
        set t_Sb=^[[4%dm
        set t_Sf=^[[3%dm
    endif
    
    "打开文件类型自动检测功能
    filetype on
    
    "设置taglist
    let Tlist_Show_One_File=0   "显示多个文件的tags
    let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
    let Tlist_Exit_OnlyWindow=1 "在taglist是最后一个窗口时退出vim
    let Tlist_Use_SingleClick=1 "单击时跳转
    let Tlist_GainFocus_On_ToggleOpen=1 "打开taglist时获得输入焦点
    let Tlist_Process_File_Always=1 "不管taglist窗口是否打开,始终解析文件中的tag
    
    "设置WinManager插件
    let g:winManagerWindowLayout='FileExplorer|TagList'
    nmap wm :WMToggle<cr>
    map <silent> <F9> :WMToggle<cr> "将F9绑定至WinManager,即打开WimManager
    
    "设置CSCOPE
    set cscopequickfix=s-,c-,d-,i-,t-,e- "设定是否使用quickfix窗口显示cscope结果
    
    "设置Grep插件
    nnoremap <silent> <F3> :Grep<CR>
    
    "设置一键编译
    map <F6> :make<CR>
    
    "设置自动补全
    filetype plugin indent on   "打开文件类型检测
    set completeopt=longest,menu "关掉智能补全时的预览窗口
    
    "启动vim时如果存在tags则自动加载
    if exists("tags")
        set tags=./tags
    endif
    
    "设置按F12就更新tags的方法
    map <F12> :call Do_CsTag()<CR>
    nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
    nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
    nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    function Do_CsTag()
            let dir = getcwd()
            if filereadable("tags")
                if(g:iswindows==1)
                    let tagsdeleted=delete(dir."\\"."tags")
                else
                    let tagsdeleted=delete("./"."tags")
                endif
                if(tagsdeleted!=0)
                    echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None
                    return
                endif
            endif
            
            if has("cscope")
                silent! execute "cs kill -1"
            endif
            
            if filereadable("cscope.files")
                if(g:iswindows==1)
                    let csfilesdeleted=delete(dir."\\"."cscope.files")
                else
                    let csfilesdeleted=delete("./"."cscope.files")
                endif
                if(csfilesdeleted!=0)
                    echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None
                    return
                endif
            endif
                                                
            if filereadable("cscope.out")
                if(g:iswindows==1)
                    let csoutdeleted=delete(dir."\\"."cscope.out")
                else
                    let csoutdeleted=delete("./"."cscope.out")
                endif
                if(csoutdeleted!=0)
                    echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
                    return
                endif
            endif
                                                
            if(executable('ctags'))
                "silent! execute "!ctags -R --c-types=+p --fields=+S *"
                silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."
            endif
                
            if(executable('cscope') && has("cscope") )
                if(g:iswindows!=1)
                    silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
                else
                    silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
                endif
                silent! execute "!cscope -b"
                execute "normal :"
                                                                        
                if filereadable("cscope.out")
                    execute "cs add cscope.out"
                endif
            endif
    endfunction
    
    "设置默认shell
    set shell=bash
    
    "设置VIM记录的历史数
    set history=400
    
    "设置当文件被外部改变的时侯自动读入文件
    if exists("&autoread")
        set autoread
    endif
    
    "设置ambiwidth
    set ambiwidth=double
    
    "设置文件类型
    set ffs=unix,dos,mac
    
    "设置增量搜索模式
    set incsearch
    
    "设置静音模式
    set noerrorbells
    set novisualbell
    set t_vb=
    
    "不要备份文件
    set nobackup
    set nowb
  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/exmyth/p/2836703.html
Copyright © 2011-2022 走看看