"---------------------------------------------------------------- " New Filetypes """""""""""""""""""""""" au BufNewFile,BufRead *.h setf c "---------------------------------------------------------------- " Common """""""""""""""""""""""" set fileencodings=utf-8,gb18030 " 兼容txt set nocompatible " 关闭 vi 兼容模式 syntax on " 自动语法高亮 colorscheme atom-dark-256 " 设定配色方案 set number " 显示行号 "set number relativenumber " 显示相对行号 set cursorline " 突出显示当前行 set ruler " 打开状态栏标尺 set tabstop=4 " 设定 tab 长度为 4 set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格 set shiftwidth=4 " 设定 > 命令移动时的宽度为 4 set expandtab set nobackup " 覆盖文件时不备份 set autochdir " 自动切换当前目录为当前文件所在的目录 filetype plugin indent on " 开启插件 set smartindent " 开启新行时使用智能自动缩进 set backupcopy=yes " 设置备份时的行为为覆盖 set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感 set nowrapscan " 禁止在搜索到文件两端时重新搜索 set incsearch " 输入搜索内容时就显示搜索结果 set hlsearch " 搜索时高亮显示被找到的文本 set noerrorbells " 关闭错误信息响铃 set novisualbell " 关闭使用可视响铃代替呼叫 set t_vb= " 置空错误铃声的终端代码 "set showmatch " 插入括号时,短暂地跳转到匹配的对应括号 "set matchtime=1 " 短暂跳转到匹配括号的时间 set magic " 设置魔术 set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存 set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符 set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏) set cmdheight=1 " 设定状态栏命令行的行数为 1 "set showtabline=2 " 显示标签栏 "set mouse=a " 开启鼠标模式 "---------------------------------------------------------------- "Status Line """""""""""""""""""""""" set statusline=%F " 文件的路径 set statusline+=%= " 切换到右边 set statusline+=%{&fileencoding} " 文件的编码 set statusline+=\ " 分隔符 set statusline+=%c " 当前列 set statusline+=\, " 分隔符 set statusline+=%l " 当前行 set statusline+=/ " 分隔符 set statusline+=%L " 总行数 set statusline+=\ " 分隔符 set statusline+=%P " 当前位置 "---------------------------------------------------------------- " Vim Shotcuts """""""""""""""""""""""" inoremap :NERDTreeToggle nnoremap :NERDTreeToggle nnoremap :tabp nnoremap n :tabn nnoremap :vertical resize +2 nnoremap :vertical resize -2 nnoremap :resize +2 nnoremap :resize -2 au Syntax python set makeprg=python3\ -u\ %\ au Syntax go set makeprg=go\ install\ au Syntax rust set makeprg=rustc\ %\ au Syntax lua set makeprg=lua5.1\ %\ au Syntax sh set makeprg=bash\ %\ au Syntax c,python,go,rust,lua,sh nnoremap :execute "normal! ".QuickFix() au Syntax c,go,rust nnoremap e :cn au Syntax c,go,rust nnoremap E :cp au Syntax go nnoremap H :!go doc au Syntax python nnoremap H :!pydoc3 "---------------------------------------------------------------- " Fold """""""""""""""""""""""" set fdm=marker set foldmarker=<>FOLD>> nnoremap @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo') "---------------------------------------------------------------- " Complement """""""""""""""""""""""" " HTML au Syntax html,css,javascript,xml inoremap > >%lyiwh%apa>%i au Syntax html,css,javascript,xml inoremap > >%lyiwopa>^d0k^y0j0Pk$ au Syntax html,css,javascript,xml inoremap { :s/ *$//g:nohlsA {}O au Syntax html,css,javascript,xml inoremap ; A; " PHP au Syntax php inoremap > >%lyiwh%apa>%i au Syntax php inoremap > >%lyiwopa>^d0k^y0j0Pk$ au Syntax php inoremap >p 2hi au Syntax php inoremap >P ?>O au Syntax php inoremap #I include '';hi au Syntax php inoremap #R require '';hi au Syntax php inoremap ; A; " SQL au Syntax sql,plsql inoremap #I IF THENEND IF;khhhi au Syntax sql,plsql inoremap #C CASE WHEN THENELSEEND CASE;kkkA au Syntax sql,plsql inoremap #L LOOPEND LOOP;O au Syntax sql,plsql inoremap #P DBMS_OUTPUT.PUT_LINE();hi au Syntax sql,plsql inoremap ; A; " C au Syntax c inoremap #< #include<>i au Syntax c inoremap #" #include ""i au Syntax c inoremap #M int main(int argc,char *argv[]){return 0;}kO au Syntax c inoremap { :s/ *$//g:nohlsA{}O au Syntax c inoremap ; A; " GO au Syntax go inoremap { :s/ *$//g:nohlsA {}O au Syntax go inoremap { {}O au Syntax go inoremap ( :s/ *$//g:nohlsA ()O au Syntax go inoremap ; A; " RUST au Syntax rust inoremap { :s/ *$//g:nohlsA {}O au Syntax rust inoremap ; A; " SH au Syntax sh inoremap { :s/ *$//g:nohlsA {}O " PYTHON au Syntax python inoremap : =PythonColon() " LUA au Syntax lua inoremap #fu function ()endOreturn k$F(i au Syntax lua inoremap #if if thenendk$F i au Syntax lua inoremap #fo for doendk$F i au Syntax lua inoremap #wh while doendk$F i "---------------------------------------------------------------- " Operators """""""""""""""""""""""" " PHP au Syntax php inoremap .= .= au Syntax php inoremap === === au Syntax php inoremap !== !== au Syntax php inoremap <= <= au Syntax php inoremap >= >= au Syntax php inoremap != != au Syntax php inoremap \|\| \|\| au Syntax php inoremap == == au Syntax php inoremap += += au Syntax php inoremap -= -= au Syntax php inoremap *= *= au Syntax php inoremap /= /= au Syntax php inoremap && && " C au Syntax c inoremap <= <= au Syntax c inoremap >= >= au Syntax c inoremap != != au Syntax c inoremap \|\| \|\| au Syntax c inoremap == == au Syntax c inoremap += += au Syntax c inoremap -= -= au Syntax c inoremap *= *= au Syntax c inoremap /= /= au Syntax c inoremap &= &= au Syntax c inoremap \|= \|= au Syntax c inoremap ~= ~= au Syntax c inoremap ^= ^= au Syntax c inoremap && && au Syntax c inoremap -> -> au Syntax c inoremap >> >> au Syntax c inoremap << << " GO au Syntax go inoremap := := au Syntax go inoremap <= <= au Syntax go inoremap >= >= au Syntax go inoremap != != au Syntax go inoremap \|\| \|\| au Syntax go inoremap == == au Syntax go inoremap += += au Syntax go inoremap -= -= au Syntax go inoremap *= *= au Syntax go inoremap /= /= au Syntax go inoremap &= &= au Syntax go inoremap \|= \|= au Syntax go inoremap ~= ~= au Syntax go inoremap ^= ^= au Syntax go inoremap && && au Syntax go inoremap -> -> au Syntax go inoremap >> >> au Syntax go inoremap << << " RUST au Syntax rust inoremap <= <= au Syntax rust inoremap >= >= au Syntax rust inoremap != != au Syntax rust inoremap \|\| \|\| au Syntax rust inoremap == == au Syntax rust inoremap += += au Syntax rust inoremap -= -= au Syntax rust inoremap *= *= au Syntax rust inoremap /= /= au Syntax rust inoremap &= &= au Syntax rust inoremap \|= \|= au Syntax rust inoremap ~= ~= au Syntax rust inoremap ^= ^= au Syntax rust inoremap && && au Syntax rust inoremap -> -> au Syntax rust inoremap >> >> au Syntax rust inoremap << << " PYTHON au Syntax python inoremap <= <= au Syntax python inoremap >= >= au Syntax python inoremap != != au Syntax python inoremap \|\| \|\| au Syntax python inoremap == == au Syntax python inoremap += += au Syntax python inoremap -= -= au Syntax python inoremap *= *= au Syntax python inoremap /= /= au Syntax python inoremap &= &= au Syntax python inoremap \|= \|= au Syntax python inoremap ~= ~= au Syntax python inoremap ^= ^= au Syntax python inoremap && && " LUA au Syntax lua inoremap <= <= au Syntax lua inoremap >= >= au Syntax lua inoremap != != au Syntax lua inoremap \|\| \|\| au Syntax lua inoremap == == au Syntax lua inoremap += += au Syntax lua inoremap -= -= au Syntax lua inoremap *= *= au Syntax lua inoremap /= /= au Syntax lua inoremap &= &= au Syntax lua inoremap \|= \|= au Syntax lua inoremap ~= ~= au Syntax lua inoremap ^= ^= au Syntax lua inoremap && && " SQL au Syntax sql,plsql inoremap := := au Syntax sql,plsql inoremap <= <= au Syntax sql,plsql inoremap >= >= au Syntax sql,plsql inoremap != != au Syntax sql,plsql inoremap \|\| \|\| "---------------------------------------------------------------- " Comments """""""""""""""""""""""" " Html au Syntax html nnoremap - V au Syntax html vnoremap - :call setpos(".",[0,line("'<"),0,0])I au Syntax html nnoremap == $?3x:nohls " Sql au Syntax sql,plsql nnoremap - 0 au Syntax sql,plsql nnoremap = 0 au Syntax sql,plsql vnoremap - I-- au Syntax sql,plsql vnoremap = :s:--:::nohls0 " C au Syntax c nnoremap - 0 au Syntax c nnoremap = 0 au Syntax c vnoremap - I// au Syntax c vnoremap = :s://:::nohls0 au Syntax c nnoremap - 0 au Syntax c nnoremap = 0 " GO au Syntax go nnoremap - 0 au Syntax go nnoremap = 0 au Syntax go vnoremap - I// au Syntax go vnoremap = :s://:::nohls0 " RUST au Syntax rust nnoremap - 0 au Syntax rust nnoremap = 0 au Syntax rust vnoremap - I// au Syntax rust vnoremap = :s://:::nohls0 " LUA au Syntax lua nnoremap - 0 au Syntax lua nnoremap = 0 au Syntax lua vnoremap - I-- au Syntax lua vnoremap = :s:--:::nohls0 "----------------------------------------------------------------- " Matching Pairs """"""""""""""""""""""""" inoremap " =QuoteDelim('"') inoremap ' =QuoteDelim("'") inoremap ( ()i inoremap ) =ClosePair(')') inoremap [ []i inoremap ] =ClosePair(']') inoremap { {}i inoremap } =ClosePair('}') au Syntax html,css,js,php,xml set mps+=<:> au Syntax html,css,js,php,xml inoremap > =ClosePair('>') au Syntax vim inoremap " " "------------------------------------------------------------------------------ " Ctags """"""""""""""""""""""" " C au syntax c nnoremap t :let $SRC=input("Enter source dir:") au syntax c nnoremap T :!ctags -R -f /tmp/c_sys_tags -I __THROW --extra=+f --languages=c --langmap=c:+.h --c-kinds=+px --fields=+aiKSz --exclude=/usr/include/c++ --exclude=/usr/include/libio.h /usr/include au syntax c set tags=/tmp/c_cur_tags,/tmp/c_sys_tags au BufWrite *.c,*.h !ctags -R -f /tmp/c_cur_tags --extra=+f --languages=c --langmap=c:+.h --c-kinds=+px --fields=+aiKSz $SRC " GO "au syntax go nnoremap t :let $GOPATH=input("Enter GOPATH dir:") au syntax go nnoremap t :!ctags -R -f /tmp/go_sys_tags --languages=Go /usr/lib/go/src au syntax go set tags=/tmp/go_cur_tags,/tmp/go_sys_tags au BufWrite *.go !ctags -R -f /tmp/go_cur_tags --languages=Go $GOPATH " PYTHON au syntax python nnoremap t :let $SRC=input("Enter source dir:") au syntax python nnoremap T :!ctags -R -f /tmp/python_sys_tags --languages=Python /usr/lib/python3.7 au syntax python set tags=/tmp/python_cur_tags,/tmp/python_sys_tags au BufWrite *.py !ctags -R -f /tmp/python_cur_tags --languages=python $SRC "------------------------------------------------------------------------------ " Cscope """""""""""""""""""""""" set cst set csto=1 set cscopequickfix=s-,g-,c-,d-,i-,t-,e- "au BufNewFile,BufRead *.c,*.h nnoremap #SS :cs add $SRC/cscope.out "au BufWrite *.c,*.h !find $SRC -type f|cscope -bk -i -;mv cscope.out $SRC/cscope.out "au BufNewFile,BufRead *.c,*.h nnoremap #CC :!echo 'Generating cs tags ...';find $SRC -type f\|cscope -bk -i -;mv cscope.out $SRC "nnoremap s :cs find s =expand("") "查找本C符号(跳过注释) "nnoremap g :cs find g =expand("") "查找本定义 "nnoremap d :cs find d =expand("") "查找本函数调用的函数 "nnoremap c :cs find c =expand("") "查找调用本函数的函数 "nnoremap t :cs find t =expand("") "查找本字符串 "nnoremap e :cs find e =expand("") "查找本 egrep 模式 "nnoremap f :cs find f =expand("") "查找本文件 "nnoremap i :cs find i =expand("") "查找包含本文件的文件 "------------------------------------------------------------------------------ " NERDTree """"""""""""""""""""""" let NERDChristmasTree = 1 let NERDTreeAutoCenter = 1 let NERDTreeQuitOnOpen = 1 let NERDTreeShowBookmarks = 1 let NERDTreeHighlightCursorline = 1 let NERDTreeShowFiles = 1 let NERDTreeStatusline = 1 "let NERDTreeShowHidden=1 "let NERDTreeShowLineNumbers=1 "let NERDTreeWinSize=30 " t.......在新Tab中打开选中文件/书签,并跳到新Tab " T.......在新Tab中打开选中文件/书签,但不跳到新Tab " i.......split一个新窗口打开选中文件,并跳到该窗口 " gi......split一个新窗口打开选中文件,但不跳到该窗口 " s.......vsp一个新窗口打开选中文件,并跳到该窗口 " gs......vsp一个新窗口打开选中文件,但不跳到该窗口 " !.......执行当前文件 " O.......递归打开选中结点下的所有目录 " x.......合拢选中结点的父目录 " X.......递归合拢选中结点下的所有目录 "------------------------------------------------------------------------------ " Templates """"""""""""""""""""""" let g:enable_template=1 let g:template_dir="~/.vim/templates" "------------------------------------------------------------------------------ " Functions """"""""""""""""""""""" function QuickFix() if exists('g:QuickFixState') && g:QuickFixState if exists('g:asyncrun_status') && 'running' == g:asyncrun_status return ":AsyncStop!\" endif let g:QuickFixState = 0 if 'c' == &filetype return ":cclose\:make clean\\" elseif 'go' == &filetype return ":cclose\:!go clean\\" else return ":cclose\" endif else let g:QuickFixState = 1 if 0 <= index(['c', 'python', 'go', 'rust', 'lua', 'sh'], &filetype) let b:argvs = input("Enter arguments:") if matchstr(v:version, '^8') return ":w!\\\:copen 15\\k:AsyncRun ".&makeprg.b:argvs."\" else return ":w!\\\:make! ".b:argvs."\\:copen 15\\k" endif else let g:QuickFixState = 0 return "\" endif endif endf function PythonColon() let KeyWords = ['if', 'elif', 'else', 'for', 'while', 'class', 'def', 'with', 'try', 'except', 'finally'] let FirstWord = split(getline('.'))[0] if FirstWord == 'try' return "\A:\except Exception, e:\<A:\" endif endf function ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\" else return a:char endif endf function QuoteDelim(char) let line = getline('.') let col = col('.') if line[col - 2] == "\\" return a:char elseif line[col - 1] == a:char return "\" else return a:char.a:char."\" endif endf "------------------------------------------------------------------------------ "------------------------------------------------------------------------------