vimrc

作者: Rex_Diego | 来源:发表于2017-04-24 19:53 被阅读0次

    Make it portable:alias vim="vim -u ~/zy/.vim-hubery/.vimrc_fh"

    set nocompatible
    
    " Vundle settings.
    filetype off
    set rtp+=~/zy/.vim-hubery/bundle/Vundle.vim
    call vundle#begin('~/zy/.vim-hubery/bundle')
    "" ---> Add you favorate vundle plugins here.
    Plugin 'gmarik/Vundle.vim'
    Plugin 'wkyo/vim-help-doc-zh'
    Plugin 'bling/vim-airline'
    Plugin 'nathanaelkane/vim-indent-guides.git'
    Plugin 'vim-scripts/AutoComplPop'
    Plugin 'jlanzarotta/bufexplorer'
    Plugin 'Shougo/neocomplcache.vim'
    Plugin 'ervandew/supertab'
    Plugin 'easymotion/vim-easymotion'
    Plugin 'anscoral/winmanager.vim'
    Plugin 'vim-scripts/taglist.vim'
    Plugin 'godlygeek/tabular.git'
    Plugin 'fholgado/minibufexpl.vim'
    ""Plugin 'tomasr/molokai'
    call vundle#end()
    filetype plugin indent on
    " ###############################################
    "
    " indent-guides setting
    " 随 vim 自启动
    let g:indent_guides_enable_on_vim_startup=1
    " 从第二层开始可视化显示缩进
    let g:indent_guides_start_level=2
    " 色块宽度
    let g:indent_guides_guide_size=1
    "{{{  判断操作系统 & 判断是终端还是 Gvim 
    " -----------------------------------------------------------------------------
    let g:iswindows = 0
    let g:islinux   = 1
    let g:ismac     = 0
    let g:iscygwin  = 0
    " {{{  fold start get the os type
    if(has("win32") || has("win64") || has("win95") || has("win16"))
        let g:iswindows = 1
        let g:ismac     = 0
        let g:os_flag   = "windows"
    elseif has("linux")
        let g:islinux = 1
        let g:ismac   = 0
        let g:os_flag = "linux"
    elseif has("win32unix")
        let g:iscygwin = 1
        let g:ismac    = 0
        let g:os_flag  = "cygwin"
    elseif has("mac")
        let g:ismac   = 1
        let g:os_flag = "mac"
    endif " }}}  fold end 
    
    if g:iswindows == 1 " {{{  fold start get os_flag
        let g:os_flag="windows"
    elseif g:islinux == 1
        let g:os_flag="linux"
    elseif g:iscygwin ==1
        let g:os_flag="cygwin"
    elseif g:ismac == 1
        let g:os_flag="mac"
    endif " }}}  fold end 
    " -----------------------------------------------------------------------------
    if has("gui_running")
        let g:isGUI = 1
    else
        let g:isGUI = 0
    endif
    "}}}
    
    " -----------------------------------------------------------------------------
    " {{{ < Windows Gvim 默认配置> 做了一点修改
    if (g:iswindows && g:isGUI)
        "source $VIMRUNTIME/vimrc_example.vim
        "source $VIMRUNTIME/mswin.vim
        "behave mswin
        set diffexpr=MyDiff()
    
        function MyDiff() "{{{ function fold start
            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 "}}} end function fold
    endif
    "}}}
    " -----------------------------------------------------------------------------
    " {{{   < Linux Gvim/Vim 默认配置> 做了一点修改
    if g:islinux||g:ismac||g:iscygwin
        set hlsearch        "高亮搜索
        set incsearch       "在输入要搜索的文字时,实时匹配
    
        " Uncomment the following to have Vim jump to the last position when
        " reopening a file
        if has("autocmd")
            au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
        endif
    
        if g:isGUI
            " Source a global configuration file if available
            if filereadable("/etc/vim/gvimrc.local")
                source /etc/vim/gvimrc.local
            endif
        else
            " This line should not be removed as it ensures that various options are
            " properly set to work with the Vim-related packages available in Debian.
            runtime! debian.vim
    
            " Vim5 and later versions support syntax highlighting. Uncommenting the next
            " line enables syntax highlighting by default.
            if has("syntax")
                syntax on
            endif
    
            set t_Co=256                   " 在终端启用256色
            set backspace=2                " 设置退格键可用
    
            " Source a global configuration file if available
            if filereadable("/etc/vim/vimrc.local")
                source /etc/vim/vimrc.local
            endif
        endif
    endif
    "}}}
    " -----------------------------------------------------------------------------
    "{{{最大化设置
    if(g:iswindows==1) "允许鼠标的使用
        "防止linux终端下无法拷贝
        if has('mouse')
            set mouse=a "可以在buffer的任何地方使用鼠标
            set selection=exclusive
            set selectmode=mouse,key
        endif
        au GUIEnter * simalt ~x "windows窗口最大化设置
    endif
    
    if(g:islinux==1||g:ismac==1||g:iscygwin==1) "允许鼠标的使用
        set mouse=a "可以在buffer的任何地方使用鼠标
        set selection=exclusive
        set selectmode=mouse,key
    endif
    "}}}
    "=============================================================================="{{{
    if g:isGUI==1 " {{{ gui setting  fold start 
        " 禁止光标闪烁
        set gcr=a:block-blinkon0
        "设置不显示下方的横向滚动条
        set guioptions-=b
        "关闭上侧工具栏
        set guioptions-=T
        set guioptions-=m
        "关闭右侧滚动条
        set guioptions-=r
        set guioptions-=R
        "关闭左侧滚动条
        set guioptions-=l
        set guioptions-=L
        if g:ismac==1
            set fu " mac fullscreen
        endif
    endif " }}}  gui setting fold end "}}}
    
    " {{{  fold start vim basic setting
    " 剪切板设置
    set clipboard=unnamed
    " 缩进线设置
    set list
    set listchars=tab:\|\ ,trail:.,extends:>,precedes:<
    "set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:¬
    "set listchars=trail:.,extends:>,precedes:<,eol:¬
    "设置不自动换行
    set nowrap
    map zL zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl zl
    map zH zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh zh
    map <C-H> <C-w>h
    map <C-L> <C-w>l
    map <C-J> <C-w>j
    map <C-K> <C-w>k
    
    
    set sidescroll=3
    set sidescrolloff=10
    
    " history文件中需要记录的行数
    set history=100
    "关闭兼容模式
    set nocompatible
    "模仿快捷键,如:Ctrl+c,Ctrl+V等等
    "source $VIMRUNTIME/vimrc_example.vim
    "source $VIMRUNTIME/mswin.vim
    "behave mswin
    "gvim字体设置
    if (g:iswindows==1) "  {{{  guifont setting fold start
        set guifont=DejaVu_Sans_Mono:h11:cANSI " windows 系统设置字体
    elseif (g:islinux==1)
        set guifont=Mono\ 12  " linxu 系统设置字体
    elseif (g:ismac==1)
        set guifont=Monaco:h12  " mac` 系统设置字体
    endif " }}}  fold end
    "设置模式行为首尾10行
    set modelines=10
    "gvim内部编码
    set encoding=utf-8
    "当前编辑的文件编码
    set fileencoding=utf-8
    "gvim打开支持的编码文件
    set fileencodings=ucs-bom,utf-8,gbk,cp936,gb2312,big5,euc-jp,euc-kr,latin1
    "set langmenu=zh_CN
    "let SLANG='zh_CN.UTF-8'
    "解决consle输出乱码
    language messages zh_CN.utf-8
    "解决菜单乱码
    source $VIMRUNTIME/delmenu.vim
    source $VIMRUNTIME/menu.vim
    "设置终端编码为gvim内部编码encoding
    let &termencoding=&encoding
    "防止特殊符号无法正常显示
    set ambiwidth=double
    "缩进宽度为2个字符
    set sw=4
    "tab宽度为2个字符
    set ts=4
    set softtabstop=4
    "编辑时将所有tab替换为空格
    set expandtab
    "按一次backspace就删除4个空格了
    set smarttab
    " 自动计算缩进
    set shiftround
    "不生成备份文件,如index.html~
    set nobackup
    set writebackup
    " 当文件在外部被修改,自动更新该文件
    set autoread
    "配色方案为desert
    "colo graywh
    "color molokai 
    hi CursorLine term=BOLD cterm=BOLD ctermbg=black ctermfg=white"
    " 总是显示状态栏
    set laststatus=2
    " 设置powerline状态栏主题风格
    " let g:Powerline_colorscheme='solarized256'
     "let g:Powerline_symbols='fancy'
    " let g:Powerline_symbols='unicode'
    "开启自动缩进
    set autoindent
    "------------the contest below was added by fh at 2013.2.5.21:47-----------
    "设置语法高亮
    if has("syntax")
        syntax enable
        syntax on
    endif
    "高亮显示匹配的括号
    set showmatch
    set linebreak " 整词换行
    set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
    "打开文件类型自动检测
    filetype on
    filetype plugin on
    "在状态栏显示光标所在位置的行号和列号
    set ruler
    if v:version>=704
        set rnu nu
    else
        set rnu nonumber
    endif
    "设置静音模式
    set noerrorbells
    set novisualbell
    set visualbell t_vb=
    "--命令行设置-------------------------
    set showcmd " 命令行显示输入的命令
    set showmode " 命令行显示vim当前模式
    set showmatch
    set matchtime=1
    
    " scrooll smooth 
    map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
    map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
    set scrolloff=3
    "--fold setting--
    set foldmethod=marker " 用marker来定义折叠
    set foldlevel=1 " 启动vim时不要自动折叠代码
    "set foldcolumn=5 " 设置折叠栏宽度
    "--find setting----------------------
    " 在搜索的时候忽略大小写
    set ignorecase
    " 不要高亮被搜索的句子(phrases)
    set hlsearch
    " 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
    set incsearch
    set ignorecase
    set smartcase
    set t_RV=
    " reopening a file
    if has("autocmd")
            au BufReadPost * 
            \if line("'\"") > 1 && line("'\"") <= line("$") |
                \ exe "normal! g'\"" | 
            \endif
            "have Vim load indentation rules and plugins according to the detected filetype
        filetype plugin indent on
    endif
    
    "set cursorcolumn "高亮当前列 cuc
    set cursorline  "高亮当前行 cul
    
    "设定文件浏览器目录为当前目录
    set autochdir
    
    "show autocomplete menus.
    set complete-=k complete+=k
    set wildmode=list:full
    "增强模式中的命令行自动完成操作
    set wildmenu
    " }}}  fold end for vim basic setting
    
    "使用NeoComplete
    let g:NeoComplCache_EnableAtStartup     = 1
    let g:SuperTabDefaultCompletionType     = "<c-x><c-k>"
    let g:neocomplcache_enable_auto_select  = 0
    let g:acp_enableAtStartup               = 1
    let g:NeoComplCache_DisableAutoComplete = 0
    
    " --------------------------minibuferexplorer setting-------------------
    let g:miniBufExplorerMoreThanOne=0
    "-------------------------indent---setting -----------------------
    "离开插入模式时是红色
    au InsertLeave * hi Cursor guibg=red
    
    "插入模式时是绿色
    au InsertEnter * hi Cursor guibg=green
    
    "set textwidth=80
    "set cc=+1 " 设置列宽为80 只对vim 7.3及以上有效
    map <Leader>ch :call SetColorColumn()<CR>
    function! SetColorColumn()
       let col_num = virtcol(".")
        let cc_list = split(&cc, ',')
        if count(cc_list, string(col_num)) <= 0
            execute "set cc+=".col_num
        else
            execute "set cc-=".col_num
        endif
    endfunction
    
    " {{{ easymotin setting--------
    let g:EasyMotion_smartcase = 1
    map <Leader> <Plug>(easymotion-prefix)
    nmap <Leader>s <Plug>(easymotion-s2)
    nmap <Leader>t <Plug>(easymotion-t2)
    map  / <Plug>(easymotion-sn)
    omap / <Plug>(easymotion-tn)
    map  n <Plug>(easymotion-next)
    map  N <Plug>(easymotion-prev)
    " }}}  fold end 
    
    "{{{  配置WinManager
    let g:winManagerWindowLayout='FileExplorer|TagList|BufExplorer'
    let g:winManagerWidth=35
    nmap wm :WMToggle<cr><cr>
    "}}}
    
    " {{{  fold start "在多buffer情况下的关闭
    map fc <Esc>:call CleanClose(1)<CR>
    map fq <Esc>:call CleanClose(0)<CR>
    function! CleanClose(tosave)
        if (a:tosave == 1)
            w!
        endif
        let todelbufNr = bufnr("%")
        let newbufNr = bufnr("#")
        if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
            exe "b!".newbufNr
        else
            bnext
        endif
        if (bufnr("%") == todelbufNr)
            new
        endif
        exe "bd!".todelbufNr
      endfunction " }}} function fold end
    
    "{{{ -------echofunc ,括号自动匹配等----------------------------------
    " 括号匹配
     :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>
      
     function ClosePair(char)
         if getline('.')[col('.') - 1] == a:char
             return "\<Right>"
         else
             return a:char
         endif
     endf "}}}  
    
    au Bufread,BufNewfile *.tags setlocal filetype=tags | &tags = expand("%:t")
    "{{{ fold start-----------setting for ncl edit--------------------------------------
    "-com set for ncl help doc
    au Bufread,BufNewfile *.ncl set filetype=ncl tags=ncludef.tags tags+=./ncludef.tags
    au Bufread,BufNewfile *.ncl map <F2> :        sp $HOME/.vim-hubery/bundle/ncl_vim/doc/ncl_list_alpha.ncl<CR> :  set noma readonly wrap<CR>
    au Bufread,BufNewfile *.ncl imap <F2><ESC> :  sp $HOME/.vim-hubery/bundle/ncl_vim/doc/ncl_list_alpha.ncl<CR> :  set noma readonly wrap<CR>
    au Bufread,BufNewfile *.ncl vmap <F2><ESC> :  sp $HOME/.vim-hubery/bundle/ncl_vim/doc/ncl_list_alpha.ncl<CR> :  set noma readonly wrap<CR>
    au Bufread,BufNewfile *-help.ncl   set noma readonly wrap
    au Bufread,BufNewfile Res_help*.ncl   set noma readonly wrap
    
    "set for ncl dictionary and tags
    if(g:islinux==1||g:ismac==1||g:iscygwin==1)
        au! Syntax newlang source $HOME/.vim-hubery/bundle/ncl_vim/syntax/ncl.vim
        au Bufread,BufNewfile *.ncl set dictionary=$HOME/.vim-hubery/bundle/ncl_vim/dict/ncl.dict
        au Bufread,BufNewfile *.ncl set tags+=$GEODIAG_ROOT/nclgeo.tags 
        au Bufread,BufNewfile *.ncl set tags+=$NCARG_ROOT/nclstd.tags 
        au Bufread,BufNewfile *.ncl set tags+=$HOME/.vim-hubery/bundle/ncl_vim/tags/ncl_func_help_inx.tags
        au Bufread,BufNewfile *.ncl set tags+=$HOME/.vim-hubery/bundle/ncl_vim/tags/ncl_res_help_inx.tags
    elseif(g:iswindows==1)
        au! Syntax newlang source $VIM/vimfiles/bundle/ncl/syntax/ncl.vim
        au Bufread,BufNewfile *.ncl set dictionary=$VIM/vimfiles/bundle/ncl/dict/ncl.dic tags+=C:/Soft/cygwin/opt/tags
    endif
    "{{{ fold start-----------定义快ncl捷操作-----------------------------
    "added by fh at 2013.2.6.9:45-----------------------------------------
    ab loadgsn load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
    ab loadcsm load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
    ab loadcon load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
    ab loadske load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/skewt_func.ncl"
    ab loadshe load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
    ab loadwin load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/wind_rose.ncl"
    ab loadfh  load "$NCARG_ROOT/lib/ncarg/nclscripts/hubery/def_fh.ncl"
    ab loadgeo load "$GEODIAG_ROOT/geodiag.ncl" ;
    ab loadcnm load "$NCARG_ROOT/lib/ncarg/nclscripts/cnmap/cnmap.ncl"
    ab ;~ ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ab ;* ;***************************************************************
    ab ;= ;===============================================================
    ab ;- ;---------------------------------------------------------------
    "----------定义结束-------}}} function fold end
    " }}} setting fold end 
    
    ab {{{  {{{  fold start
    ab }}}  }}}  fold end
    "-------------setting for matlab {{{  fold start{
    ab setfull set(gcf,'outerposition',get(0,'screensize'))
    ab setfull set(gcf,'PaperPositionMode','auto')
    ab printeps print('-depsc','-tiff','-r300','filename.eps')
    "---------------------------------}}}  fold end 
     
    "{{{ -ctags setting---------------------------------------------------------
    " ncl_ctags.sh(在$HOME/.vim/exec/ncl_ctags.sh) 是一个shell脚本,用来生成ncl脚本的tags"
    " 按下F7重新生成tag文件,并更新taglist
    
    let g:needsilent=1
    map <F7> :call Do_CTags(g:needsilent) <CR> :TlistUpdate<CR> 
    imap <F7> <ESC>:call Do_CTags(g:needsilent) <CR><CR> :TlistUpdate<CR>
    
    function Str_Trim(Str_Original) " {{{  fold start 
        " Remove the \r in the String
        let StrLen=len(a:Str_Original)
        let Str_New=strpart(a:Str_Original,0,StrLen-1)
        return Str_New
    endf " }}}  fold end 
    
    function Do_CTags(isSilent) " {{{  fold start 
        if &filetype =~ "ncl"
            "silent! execute "! sh $HOME/.vim-hubery/bundle/ncl/exec/ncl_ctags.sh $PWD ".g:os_flag
            if(g:iswindows==1)
                let Pwd_Cygwin_Orignal=system("pwd")
                let Pwd_Cygwin_New = Str_Trim(Pwd_Cygwin_Orignal)
                let Pwd_Win_Orignal=system("cygpath -w ".Pwd_Cygwin_New)
                let Pwd_Win_New=Str_Trim(Pwd_Win_Orignal)
             
                if(a:isSilent==1) " {{{  fold start 
                    silent!  execute "! sh ".$VIM."/vimfiles/bundle/ncl/exec/ncl_ctags.sh  ".Pwd_Win_New."  ".g:os_flag
                else
                    execute "! sh ".$VIM."/vimfiles/bundle/ncl_vim/exec/ncl_ctags.sh  ".Pwd_Win_New."  ".g:os_flag
                endif " }}}  fold end 
            else
                execute "! sh $HOME/.vim-hubery/bundle/ncl_vim/exec/ncl_ctags.sh $PWD  ".g:os_flag
            endif
        endif "}}} fold end
    endf " }}}  fold end 
    
    " {{{  fold start ------setting fortran------------------------------------
    ab fcom !--------1---------2---------3---------4---------5---------6---------7--
    " }}}  fold end 
    "{{{ fold start--------------------------tabluar setting------------------------------
    "let g:tabular_loaded = 1 不使用tabluar
    let mapleader=','
    "if exists(":Tabularize")
      nmap <Leader>= :Tabularize /=<CR>
      vmap <Leader>= :Tabularize /=<CR>
      nmap <Leader>: :Tabularize /:\zs<CR>
      vmap <Leader>: :Tabularize /:\zs<CR>
      nmap <Leader>, :Tabularize /,<CR>
      vmap <Leader>, :Tabularize /,<CR>
    "endif
    
    inoremap <silent> <Bar>   <Bar><Esc>:call <SID>align()<CR>a
     
    function! s:align()
      let p = '^\s*|\s.*\s|\s*$'
      if exists(':Tabularize') && getline('.') =~# '^\s*|' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
        let column = strlen(substitute(getline('.')[0:col('.')],'[^|]','','g'))
        let position = strlen(matchstr(getline('.')[0:col('.')],'.*|\s*\zs.*'))
        Tabularize/|/l1
        normal! 0
        call search(repeat('[^|]*|',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
      endif
    endfunction " }}} function fold end
    
    "{{{Taglist setting
    "let Tlist_Ctags_Cmd='/usr/bin/ctags' "因为我们放在环境变量里,所以可以直接执行
    let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
    let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
    let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
    "是否一直处理tags.1:处理;0:不处理
    let Tlist_Process_File_Always=1 "实时更新tags
    let Tlist_Inc_Winwidth=0
    "TagList参数设置
    let Tlist_Show_One_File=1
    let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动退出vim
    " }}} setting fold end
    
    "{{{ One key Run
    "Fri Jul 10 12:57:52 CST 2015 update 
    map <F5> :bp<CR>    
    map <F6> :bn<CR>   
    
    map <F10> :        !clear&&date<CR> :  call CompileCode()<CR> :  call RunResult()<CR>
    imap <F10> <ESC>:  !clear&&date<CR> :  call CompileCode()<CR> :  call RunResult()<CR>
    vmap <F10> <ESC>:  !clear&&date<CR> :  call CompileCode()<CR> :  call RunResult()<CR>
     
    " Fri Jul 10 13:34:35 CST 2015 update One_Key_Run function failure
    "map <F10> :         :  call One_Key_Run()<CR>
    "imap <F10> <ESC>:   :  call One_Key_Run()<CR>
    "vmap <F10> <ESC>:   :  call One_Key_Run()<CR>
    
    "func! One_Key_Run() " {{{  function fold start 
    "    " clear the screen
    "    exec "!clear&&date"
    "    " silent to avoid press enter key
    "     exec "call CompileCode()"
    "    if v:shell_error == 0 "v:shell_error=0 stand for shell command right
    "        exec "call RunResult()"
    "    endif
    "endfunc " }}}  fold end 
    func! CompileGcc() "{{{ function flod start
        exec "w"
        let compilecmd="!gcc "
        let compileflag="-o %< "
        if search("mpi/.h") != 0
            let compilecmd = "!mpicc "
        endif
        if search("glut/.h") != 0
            let compileflag .= " -lglut -lGLU -lGL "
        endif
        if search("cv/.h") != 0
            let compileflag .= " -lcv -lhighgui -lcvaux "
        endif
        if search("omp/.h") != 0
            let compileflag .= " -fopenmp "
        endif
        if search("math/.h") != 0
            let compileflag .= " -lm "
        endif
        exec compilecmd." % ".compileflag
    endfunc "}}}a function fold end
    
    func! CompileGpp() " {{{ function fold start
        exec "w"
        let compilecmd="!g++ "
        let compileflag="-o %< "
        if search("mpi/.h") != 0
            let compilecmd = "!mpic++ "
        endif
        if search("glut/.h") != 0
            let compileflag .= " -lglut -lGLU -lGL "
        endif
        if search("cv/.h") != 0
            let compileflag .= " -lcv -lhighgui -lcvaux "
        endif
        if search("omp/.h") != 0
            let compileflag .= " -fopenmp "
        endif
        if search("math/.h") != 0
            let compileflag .= " -lm "
        endif
        exec compilecmd." % ".compileflag
    endfunc " }}} function fold end
    
    func! CompileJava()
        exec "!javac %"
    endfunc
    
    func! CompileFor()
        exec "w"
        let compilecmd="!ifort "
        let compileflag="-o ".expand("%:r").".o"
        exec compilecmd." % ".compileflag
    endfunc
     
    func! CompileCode() " {{{ function fold start
        exec "w"
        if &filetype == "cpp"
            exec "call CompileGpp()"
        elseif &filetype == "c"
            exec "call CompileGcc()"
        elseif &filetype == "python"
            exec "call RunPython()"
        elseif &filetype == "java"
            exec "call CompileJava()"
        elseif &filetype == "fortran"
            exec "call CompileFor()"
        endif
    endfunc " }}} function fold end
     
    func! RunResult() " {{{ function fold start
        exec "w"
        if search("mpi/.h") != 0
            exec "!mpirun -np 4 ./%<"
        elseif &filetype == "cpp"
            exec "! ./%<"
        elseif &filetype == "c"
            exec "! ./%<"
        elseif &filetype == "python"
            exec "!python ./%"
        elseif &filetype == "java"
            exec "!java %<"
        elseif &filetype == "ncl"
            exec "!ncl %"
        elseif &filetype == "sh"
            exec "!bash ./%"
        elseif &filetype == "fortran"
            if v:shell_error == 0
                exec "! ./".expand("%:r").".o"
            else
                exec '! echo "Compile Failure"'
                " fail and  stop
            endif
        elseif &filetype == "mma"
            exec "!math -script %"
        elseif &filetype == "matlab"
            exec "!matlab -nodesktop -nosplash -nodisplay < %"
        endif
    endfunc " }}} function fold end
    "}}}
    
    "{{{ 进行版权声明的设置
    map <F4> :call TitleDet()<cr>
    function TitleDet() "{{{ function fold start
    "判断前10行代码里面,是否有Last modified这个单词,
    "如果没有的话,代表没有添加过作者信息,需要新添加;
    "如果有的话,那么只需要更新即可
        let CommentFlag = FileDet()
        let n=1
        "默认为添加
        while n < 200
            let Line = strpart(getline(n),2,4)
            if Line == 'Last'
                call UpdateTitle(CommentFlag,n)
                return
            endif
            let n = n + 1
        endwhile
        call AddTitle(CommentFlag)
        unlet CommentFlag
    endfunction "}}} function fold end
    
    function FileDet() "{{{ function fold start  根据文件类型确定注释符号
        "let Suffix = tolower(expand("%:e"))
        "let FileName = tolower(expand("%:t"))
        "let FirstChar = strpart(FileName,0,1) "get the first letter of filename
        "if FirstChar == '.'
        "if  empty(Suffix)
        "   let CommentFlag = "#"
        "elseif Suffix=="ncl"
        "   let CommentFlag = ";"
        "elseif match(["f","f90","f77","for"],Suffix)>=0
        "   let CommentFlag = "!"
        "elseif Suffix == "sh"
        "   let CommentFlag = "#"
        "elseif match(Suffix,"vim")>=0
        "   let CommentFlag= '"'
        "endif
        if  &filetype == "python" || &filetype == "sh" || &filetype == "expect"
            let CommentFlag = "#"
        elseif &filetype == "ncl"
            let CommentFlag = ";"
        elseif &filetype == "matlab"
            let CommentFlag = "%"
        elseif &filetype == "vim"
            let CommentFlag = '"'
        elseif &filetype == "fortran"
            let CommentFlag = "!"
        elseif &filetype == "dosbatch"
            let CommentFlag = "REM "
        else
            let CommentFlag = " "
        endif
        return CommentFlag
    endfunction "}}} function fold end
    
    function AddTitle(CommentFlag) "{{{ function fold start 添加或更新copyright
        call append(1,a:CommentFlag."==========================================================")
        call append(2,a:CommentFlag." Author: fanghuan - fanghuan_nju@163.com")
        call append(3,a:CommentFlag." Filename: ".expand("%:t"))
        call append(4,a:CommentFlag." Creat time: ".strftime("%Y-%m-%d %H:%M:%S"))
        call append(5,a:CommentFlag." {{{ comment flod start-----------------------")
        call append(6,a:CommentFlag." Description: ")
        call append(7,a:CommentFlag." Last modified: ".strftime("%Y-%m-%d %H:%M:%S"))
        call append(8,a:CommentFlag." }}} comment flod end")
        call append(9,a:CommentFlag."==========================================================")
        echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
    endf "}}} function fold end
    
    function UpdateTitle(CommentFlag,Line) "{{{ function fold start 更新最近修改时间和文件名
        "normal m'
        "execute '/; Last modified:/s@:.*$@\=strftime(": %Y-%m-%d %H:%M:%S")@'
        "normal ''
        "normal mk
        execute '/'.a:CommentFlag.' Filename:/s@:.*$@\=": ".expand("%:t")@'
        "execute "noh"
        "normal 'k
        call append(a:Line+0,a:CommentFlag." ---------------------------------------------")
        call append(a:Line+1,a:CommentFlag." Description: ")
        call append(a:Line+2,a:CommentFlag." Last modified: ".strftime("%Y-%m-%d %H:%M:%S"))
        echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
    endfunction "}}} function fold end
    "}}}
    
    function! Replace(confirm, wholeword, replace) " 替换函数 {{{  fold start 
    " 参数说明:confirm:是否替换前逐一确认" wholeword:是否整词匹配 " replace:被替换字符串
        wa
        let flag = ''
        if a:confirm
            let flag .= 'gec'
        else
            let flag .= 'ge'
        endif
    
        let search = ''
    
        if a:wholeword
            let search .= '\<' . escape(expand('<cword>'), '/\.*$^~[') . '\>' 
        else
            let search .= expand('<cword>')
        endif
    
        let replace = escape(a:replace, '/\&~')
        execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update' 
    endfunction " }}}  fold end 
    " 不确认、非整词
    nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR>
    " 不确认、整词
    nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR>
    " 确认、非整词
    nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR>
    " 确认、整词
    nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>
    nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>
    
    let g:neocomplete#enable_at_startup    = 1
    let g:neocomplete#enable_smart_case    = 1
    let g:neocomplete#enable_cursor_hold_i = 1
    
    imap <expr><TAB> neosnippet#expandable_or_jumpable() ?
     \ "\<Plug>(neosnippet_expand_or_jump)"
     \: pumvisible() ? "\<C-n>" : "\<TAB>"
    smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
     \ "\<Plug>(neosnippet_expand_or_jump)"
     \: "\<TAB>"
    "----------------setting for tmux --- {{{  fold start 
    " Tue Sep  8 00:04:20 CST 2015
    "调整光标的形状
    "在默认情况下,当通过 Tmux 运行 Vim 时,无论当前 Vim
    "是处于插入模式、可视模式还是其他模式,光标的形状都是一样的。这样就很难判断当前的
    "Vim 模式是什么。若要避免这个问题,就需要让 Tmux 通知 iTerm
    "更新光标的形状。为此,需要将以下配置加入到文件 ~/.vimrc 中。
    if exists('$ITERM_PROFILE')
       if exists('$TMUX') 
            let &t_SI = "\<Esc>[3 q"
            let &t_EI = "\<Esc>[0 q"
        else
            let &t_SI = "\<Esc>]50;CursorShape=1\x7"
            let &t_EI = "\<Esc>]50;CursorShape=0\x7"
        endif
    endif
    "调整粘贴时的文本缩进
    " happens in VIM UI)
    
    function! WrapForTmux(s)
        if !exists('$TMUX')
            return a:s
        endif
    
        let tmux_start = "\<Esc>Ptmux;"
        let tmux_end = "\<Esc>\\"
    
        return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
    endfunction
    
    let &t_SI .= WrapForTmux("\<Esc>[?2004h")
    let &t_EI .= WrapForTmux("\<Esc>[?2004l")
    
    function! XTermPasteBegin()
        set pastetoggle=<Esc>[201~
        set paste
        return ""
    endfunction
    
    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
    "------------- }}} 
    "* vim:set foldlevel=0:  *
    
    

    相关文章

      网友评论

          本文标题:vimrc

          本文链接:https://www.haomeiwen.com/subject/nlnqottx.html