前言:逃离windows有很长时间了,特别是当今android盛行的时代,我们没有理由不选择ubuntu作为编译开发android之首选。其实操作系统只是我们使用的一个工具,
windows也好linux也罢,自己用的好才是真的好。但是好的开发工具能让我们事半功倍。
先谈谈我的编程开发工具之路,source insight3.5这都是刚工作必备之工具,简直就代码阅读开发之神器。但有一个缺点就是调试编译很是不方便。vs编程的高富帅,编程调试很是好用,界面相当的友好。基本上windows程序开发编译调试面面俱到全方位无死角。但是我们嵌入式开发大部分都是linux下的,这高大上的工具虽然眼馋,可是基本上高级功能我们只能想想,还是洗洗睡吧。
俗话说工欲善其事必先利其器,那就让我们来一起学习linux下的开发工具吧!目前我使用的是ubuntu,但基本上linux系统都差不多,很明显的标志就是都有Terminal。
基于命令行的操作,vim更是linux的必备工具。说了半天我们进入主题吧vim编程环境搭建使用,大工程的阅读开发调试。
首先我们还是先来讲一下搭建:
sudo apt-get install vim exuberant-ctags cscope global; (ubuntu14.04及以上版本执行即可,以下版本请先执行以下操作)
sudoadd-apt-repository ppa:fcwu-tw
/ppa;
sudoapt-get update;
sudo apt-get install vim;
如果你对上面这些工具不熟悉请google, bing, baidu。有了这些工具我们还是只能简单的操作,对工程的阅读开发还是远远不够的。所以我们要配置vim,加入一些vim plugin,有两个文件.vimrc .vimrc.bundles 我配置的脚本首次需要下载请执行 :BundleInstall 安装脚本,下载完了你就可以使用它的强大功能了。你可以先看脚本中的中文注释,了解我们使用了那些快捷键,下篇我将介绍一下常用功能快捷键及大工程阅读开发。让你成为真正的键盘党,摆脱鼠标手。
废话不多说了直接上配置脚本vim 配置:
.vimrc(保存文件名放到你$HOME目录)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" settings for vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" This file contains some boilerplate settings for vim's cscope interface,
" plus some keyboard mappings that I've found useful.
"
" USAGE:
" -- vim 6: Stick this file in your ~/.vim/plugin directory (or in a
" 'plugin' directory in some other directory that is in your "
" 'runtimepath'. "
" Jason Duell '[email protected] 2013/3/13
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""multi-encodingi setting多语言编码转换""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("multi_byte")
"set bomb
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,gb2312,gbk,big5,euc-jp,euc-kr
set encoding=utf8
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, untested
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""" Initial Plugin 加载插件""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" install Vundle bundles
if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""vim 样式配置""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 基础配置设置
filetype on "检测文件类型
filetype indent on "针对不同的文件类型采用不同的缩进格式
filetype plugin on "允许插件
filetype plugin indent on "启动自动补全
"autocmd! bufwritepost _vimrc source % "vimrc文件修改之后自动加载。 windows。
"autocmd! bufwritepost .vimrc source % "vimrc文件修改之后自动加载。 linux。
syntax enable "开启代码高亮
syntax on "打开高亮
set completeopt=longest,menu "自动补全配置,让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
"set relativenumber number "相对行号,可用Ctrl+n在相对/绝对行号间切换
set cursorcolumn "突出显示当前列,可用Ctrl+m切换是否显示
"set cursorline "突出显示当前行,可用Ctrl+m切换是否显示
set history=3000 "history存储长度
set nocompatible "非兼容vi模式,避免以前版本的一些bug和局限
set nu "显示行数
set shiftwidth=4 "换行时行间交错使用4空格
set cindent shiftwidth=4 "自动缩进4空格
set tabstop=4 "让一个tab等于4个空格
set vb t_vb=
set showmatch "显示括号配对情况
set autoread "当文件在外部被改变时,Vim自动更新载入
set nowrap "设置不自动换行
set writebackup "设置无备份文件
set nobackup "取消备份。 视情况自己改
set noswapfile "关闭交换文件
set showmode "开启模式显示
set cmdheight=1 "命令部分高度为1
set shortmess=atI "启动的时候不显示那个援助索马里儿童的提示
set t_ti= t_te= "退出vim后,内容显示在终端屏幕 设置 退出vim后,内容显示在终端屏幕, 可以用于查看和复制好处:误删什么的,如果以前屏幕打开,可以找回
" 去掉输入错误的提示声音
set title "change the terminal's title
set novisualbell "don't beep
set noerrorbells "don't beep
set t_vb=
set tm=500
"set backup "备份
"set backupext=.bak
"set backupdir=/tmp/vimbk/
set mat=4 "Blink times every second when matching brackets
set hidden "A buffer becomes hidden when it is abandoned
set wildmode=list:longest
set ttyfast
set wildignore=*.swp,*.bak,*.pyc,*.class
set scrolloff=3 "至少有3行在光标所在行上下
set selection=old
set selectmode=mouse,key
set viminfo^=% "Remember info about open buffers on close
set viminfo+=! " 保存全局变量
set magic "正则表达式匹配形式
set backspace=eol,start,indent "Configure backspace so it acts as it should act
"set backspace=indent,eol,start whichwrap+=<,>,[,] "允许退格键的使用
"set iskeyword+=_,$,@,%,#,- "带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,# "带有如下符号的单词不要被换行分割
" 字符间插入的像素行数目
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd "markdown配置
"set go= "不要图形按钮
set cul "高亮光标所在行
autocmd InsertEnter * se cul "用浅色高亮当前行
set ruler "显示标尺
set showcmd "输入的命令显示出来,看的清楚些
" Set extra options when running in GUI mode
if has("gui_running")
set guifont=Monaco:h14
set guioptions-=T
set guioptions+=e
set guioptions-=r
set guioptions-=L
set guitablabel=%M\ %t
set showtabline=1
set linespace=4
set noimd
set t_Co=256
else
"set guifont=Courier_New:h10:cANSI " 设置字体
set guifont=Fixedsys:h12:cANSI" 设置字体
endif
"设置标记一列的背景颜色和数字一行颜色一致
hi! link SignColumn LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "状态行显示的内容
set statusline+=%f "不显示工具条
ret laststatus=2 "启动显示状态行(1),总是显示状态行(2)
" max memory (in KiB) used for pattern matching
"set maxmempattern=100
"set foldenable "允许折叠
"set foldmethod=manual "手动折叠
" 选中模式 Ctrl+c 复制选中的文本
"vnoremap
" 普通模式下 Ctrl+c 复制文件路径
"nnoremap
" Shift + Insert 插入系统剪切板中的内容
"noremap
"vnoremap
"inoremap
"inoremap
"set ignorecase "搜索时忽略大小写
set hlsearch "高亮显示结果
"set nohlsearch "关闭搜索高亮
set incsearch "在输入要搜索的文字时,vim会实时匹配
" 有一个或以上大写字母时仍大小写敏感
set smartcase "ignore case if search pattern is all lowercase, case-sensitive otherwise
"autocmd BufEnter * cd %:c:p:h "设置状态栏
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" F1 - F6 设置
" F1 废弃这个键,防止调出系统帮助
" F2 行号开关,用于鼠标复制代码用
" F3 换行开关
" F4 调出listbar函数列表
" F5 粘贴模式paste_mode开关,用于有格式的代码粘贴
" F6 语法开关,关闭语法可以加快大文件的展示
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" I can type :help on my own, thanks. Protect your fat fingers from the evils of
noremap
nnoremap
nnoremap
nmap
set pastetoggle=
"paste mode, where you can paste mass data
"that won't be autoindented
au InsertLeave * set nopaste
nnoremap
" disbale paste mode when leaving insert mode
"Smart way to move between windows 分屏窗口移动
"则可以用
map
map
map
map
"Treat long lines as break lines (useful when moving around in them)
"se swap之后,同物理行上线直接跳
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
" Go to home and end using capitalized directions
noremap H ^
noremap L $
" 命令行模式增强,ctrl - a到行首, -e 到行尾
cnoremap
cnoremap
" 去掉搜索高亮
noremap
" --------tab/buffer相关
"Use arrow key to change buffer"
noremap
noremap
map
map
map
map
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map
"共享剪贴板
set clipboard+=unnamed
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("autocmd")
filetype plugin indent on "根据文件进行缩进
augroup vimrcEx
au!
autocmd FileType text setlocal textwidth=78
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
augroup END
"autocmd Filetype c set omnifunc=ccomplete#Complete
"autocmd Filetype html set omnifunc=htmlcomplete#CompleteTags
"autocmd Filetype xml set omnifunc=xmlcomplete#CompleteTags
"autocmd Filetype python set omnifunc=pythoncomplete#CompleteTags
"autocmd Filetype tex set omnifunc=syntaxcomplete#Complete
autocmd FileType c,cpp set shiftwidth=4 | set expandtab "每次在编辑c文件时,它的自动缩进为4个空格;当你在插入模式下使用CTRL-D、CTRL-T缩进时,它也会调整4个空格的缩进;当你按TAB键时,它将会插入8个空格
"set cinoptions={0,1s,t0,n,p2s,(03s,=.5s,>1s,=1s,:1s
"智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来
set ai! "设置自动缩进
set smartindent "智能自动缩进
set noautoindent "自动对齐 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
else
"智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来
set ai! "设置自动缩进
set smartindent "智能自动缩进
set noautoindent "自动对齐 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
endif " has("autocmd")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""设置cscope ctags"配置""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
""""""""""""" Standard cscope/vim boilerplate
if filereadable("GTAGS")
set csprg=gtags-cscope
" use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t'
" check cscope for definition of a symbol before checking ctags: set to 1
" if you want the reverse search order.
set csto=0
set cst
set nocsverb
"cs reset
"let Gtags_Auto_Map = 1
cs add GTAGS $PWD
endif
" " add any cscope database in current directory
if filereadable("cscope.out")
set csprg=cscope
set csto=0
set cst
set nocsverb
cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
" " show msg when any other cscope db added
set cscopeverbose
endif
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
map
function Do_CsGTag()
let dir = getcwd()
if filereadable("filenametags")
let csoutdeleted=delete("./"."filenametags")
if(csoutdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the filenametags" | echohl None
return
endif
endif
silent! execute"!find `pwd` -name '*.h' -o -name '*.c++' -o -name '*.cc' -o -name '*.cp' -o -name '*.cpp' -o -name '*.cxx' -o -name '*.h++' -o -name '*.hh' -o -name '*.hp' -o -name '*.hpp' -o -name '*.hxx' -o -name '*.C' -o -name '*.H' -o -name '*.ipp' -o -name '*.c' -o -name '*.js' -o -name '*.java' -o -name '*.idl' -o -name '*.mak' -o -name '*.mk' -o -name '[Mm]akefile' -o -name 'GNUmakefile' -o -name '*.pl' -o -name '*.pm' -o -name '*.plx' -o -name '*.perl' -o -name '*.cmake' -o -name '*.y' -o -name '*.sh' -o -name 'CMakeList*.txt'> gtags.files"
silent! execute "!gtags -qv -f `pwd`/gtags.files"
"silent! execute "!ctags -R --languages=+c,c++,java,javascript,make,perl,yacc,sh --langmap=c:+.x,c++:+.inl,make:+.mk.cmake --c-kinds=+px --c++-kinds=+px --fields=+afmikKlnsStz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc"
"execute "cs add GTAGS $PWD"
call system("echo -e '!_TAG_FILE_SORTED\t2\t/2=foldcase/' > filenametags")
call system("find `pwd` -not -regex '.*\.\(png\|gif\)' -type f -printf '%f\t%p\t1\n' | sort -f >> filenametags")
endfunction
map
function Do_CsTag()
let dir = getcwd()
if filereadable("tags")
let tagsdeleted=delete("./"."tags")
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")
let csfilesdeleted=delete("./"."cscope.in.out")
let csfilesdeleted=delete("./"."cscope.po.out")
let csfilesdeleted=delete("./"."cscope.files")
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")
let csoutdeleted=delete("./"."cscope.out")
if(csoutdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
return
endif
endif
if filereadable("filenametags")
let csoutdeleted=delete("./"."filenametags")
if(csoutdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the filenametags" | echohl None
return
endif
endif
if(executable('cscope') && has("cscope") && executable('ctags'))
silent! execute"!find `pwd` -name '*.h' -o -name '*.c++' -o -name '*.cc' -o -name '*.cp' -o -name '*.cpp' -o -name '*.cxx' -o -name '*.h++' -o -name '*.hh' -o -name '*.hp' -o -name '*.hpp' -o -name '*.hxx' -o -name '*.C' -o -name '*.H' -o -name '*.ipp' -o -name '*.c' -o -name '*.js' -o -name '*.java' -o -name '*.idl' -o -name '*.mak' -o -name '*.mk' -o -name '[Mm]akefile' -o -name 'GNUmakefile' -o -name '*.pl' -o -name '*.pm' -o -name '*.plx' -o -name '*.perl' -o -name '*.cmake' -o -name '*.y' -o -name '*.sh' -o -name 'CMakeList*.txt'> cscope.files"
silent! execute "!cscope -Rbkq -i cscope.files"
silent! execute "!ctags -R --languages=+c,c++,java,javascript,make,perl,yacc,sh --langmap=c:+.x,c++:+.inl,make:+.mk.cmake --c-kinds=+px --c++-kinds=+px --fields=+afmikKlnsStz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc"
"silent! execute "!cscope -b"
execute "normal :"
if filereadable("cscope.out")
"let csoutdeleted=delete("./"."cscope.in.out")
"let csoutdeleted=delete("./"."cscope.po.out")
execute "cs add cscope.out"
let csoutdeleted=delete("./"."cscope.files")
call system("echo -e '!_TAG_FILE_SORTED\t2\t/2=foldcase/' > filenametags")
call system("find `pwd` -not -regex '.*\.\(png\|gif\)' -type f -printf '%f\t%p\t1\n' | sort -f >> filenametags")
endif
endif
endfunction
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""" color""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if &bg == "dark" " 根据你的背景色风格来设置不同的书签颜色
highlight SignColor ctermfg=white ctermbg=blue guifg=wheat guibg=peru
else " 主要就是修改guibg的值来设置书签的颜色
highlight SignColor ctermbg=white ctermfg=blue guibg=grey guifg=RoyalBlue3
endif
if $TERM =~ '^xterm' || $TERM =~ '^screen' || $TERM=~ '256color$'
set t_Co=256
set background=dark
colorscheme darkblue
elseif has('gui_running')
set background=light
colorscheme solarized
elseif $TERM =~ 'cons256'
colorscheme default
endif
"colorscheme lucius
"colorscheme evening
"colorscheme eclipse
"colorscheme darkblue
colorscheme maroloccio
"colorscheme peaksea
"colorscheme vanzan_color
"colorscheme zenburn
"colorscheme solarized
"colorscheme molokai
"colorscheme desert
"colorscheme earth
"colorscheme xterm16
"colorscheme xemacs
"colorscheme ashen
"colorscheme autumnleat
"colorscheme zellner
"colorscheme calmar256-light
"colorscheme calmar256-dark
"colorscheme blacklight
"colorscheme putty
"colorscheme shine
"colorscheme morning
===============================================华丽的分割线
vim plugin 下载配置脚本: .vimrc.bundles (保存文件名放到你$HOME目录)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""" bundle 插件管理和配置项""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""包依赖""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"package dependence: ctags
"python dependence: pep8, pyflake
"非兼容vi模式。去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
" configure Vundle
filetype off " required! turn off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""插件管理""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 使用Vundle来管理插件
" vim plugin bundle control, command model
" :BundleInstall install 安装配置的插件
" :BundleInstall! update 更新
" :BundleClean remove plugin not in list 删除本地无用插件
Bundle 'gmarik/vundle'
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""基础"""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 多语言语法检查
Bundle 'scrooloose/syntastic'
let g:syntastic_error_symbol = '✗' "set error or warning signs
let g:syntastic_warning_symbol = '⚠'
let g:syntastic_check_on_open=1
let g:syntastic_enable_highlighting = 0
let g:syntastic_python_checkers=['pyflakes'] " 使用pyflakes,速度比pylint快
let g:syntastic_javascript_checkers = ['jsl', 'jshint']
let g:syntastic_html_checkers=['tidy', 'jshint']
let g:syntastic_cpp_include_dirs = ['/usr/include/']
let g:syntastic_cpp_remove_include_errors = 1
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'
let g:syntastic_enable_balloons = 1 "whether to show balloons
highlight SyntasticErrorSign guifg=white guibg=black
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""自动补全""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代码自动补全
"迄今为止用到的最好的自动VIM自动补全插件
"重启 :YcmRestartServer
Bundle 'Valloric/YouCompleteMe'
"youcompleteme 默认tab s-tab 和自动补全冲突
"let g:ycm_key_list_select_completion=['
let g:ycm_key_list_select_completion = ['
"let g:ycm_key_list_previous_completion=['
let g:ycm_key_list_previous_completion = ['
let g:ycm_complete_in_comments = 1 "在注释输入中也能补全
let g:ycm_complete_in_strings = 1 "在字符串输入中也能补全
let g:ycm_use_ultisnips_completer = 1 "提示UltiSnips
let g:ycm_cache_omnifunc = 0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_collect_identifiers_from_comments_and_strings = 0 "注释和字符串中的文字也会被收入补全
let g:ycm_seed_identifiers_with_syntax = 0 "语言关键字补全, 不过python关键字都很短,所以,需要的自己打开
"let g:ycm_collect_identifiers_from_tags_files = 1 "会导致一直更新标签,python2 占用内存80%以上
" 引入,可以补全系统,以及python的第三方包 针对新老版本YCM做了兼容
" old version
"if !empty(glob("~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"))
" let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"
"endif
" new version
if !empty(glob("~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"))
let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"
endif
" 直接触发自动补全
"let g:ycm_key_invoke_completion = '
" 跳转到定义处, 分屏打开
let g:ycm_goto_buffer_command = 'horizontal-split'
" nnoremap
nnoremap
nnoremap
" 黑名单,不启用
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'gitcommit' : 1,
\}
" 代码片段快速插入 (snippets中,是代码片段资源,需要学习)
Bundle 'SirVer/ultisnips'
" Snippets are separated from the engine. Add this if you want them:
Bundle 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger = "
let g:UltiSnipsJumpForwardTrigger = "
let g:UltiSnipsJumpBackwardTrigger = "
let g:UltiSnipsSnippetDirectories = ['UltiSnips']
let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnips'
" 定义存放代码片段的文件夹 .vim/UltiSnips下,使用自定义和默认的,将会的到全局,有冲突的会提示
" 进入对应filetype的snippets进行编辑
map
" ctrl+j/k 进行选择
func! g:JInYCM()
if pumvisible()
return "\
else
return "\
endif
endfunction
func! g:KInYCM()
if pumvisible()
return "\
else
return "\
endif
endfunction
inoremap
au BufEnter,BufRead * exec "inoremap
let g:UltiSnipsJumpBackwordTrigger = "
" 自动补全单引号,双引号等
Bundle 'Raimondi/delimitMate'
"" for python docstring ",优化输入
au FileType python let b:delimitMate_nesting_quotes = ['"']
" 自动补全html/xml标签
Bundle 'docunext/closetag.vim'
let g:closetag_html_style=1
"################### 快速编码 ###################
" 快速注释
Bundle 'scrooloose/nerdcommenter'
let g:NERDSpaceDelims=1
" 快速加入修改环绕字符
Bundle 'tpope/vim-surround'
" for repeat -> enhance surround.vim, . to repeat command
Bundle 'tpope/vim-repeat'
" 快速去行尾空格 [, +
Bundle 'bronson/vim-trailing-whitespace'
map
" 快速赋值语句对齐
Bundle 'junegunn/vim-easy-align'
vmap
nmap
if !exists('g:easy_align_delimiters')
let g:easy_align_delimiters = {}
endif
let g:easy_align_delimiters['#'] = { 'pattern': '#', 'ignore_groups': ['String'] }
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""快速移动 """"""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"更高效的移动 [,, + w/fx]
Bundle 'Lokaltog/vim-easymotion'
let g:EasyMotion_smartcase = 1
" let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion
map
map
map
map
Bundle 'vim-scripts/matchit.zip'
" 显示marks - 方便自己进行标记和跳转
" m[a-zA-Z] add mark
" '[a-zA-Z] go to mark
" m
Bundle "kshenoy/vim-signature"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""文本对象"""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 支持自定义文本对象
Bundle 'kana/vim-textobj-user.git'
" 增加行文本对象: l dal yal cil
Bundle 'kana/vim-textobj-line'
" 增加文件文本对象: e dae yae cie
Bundle 'kana/vim-textobj-entire.git'
" 增加缩进文本对象: i dai yai cii - 相同缩进属于同一块
Bundle 'kana/vim-textobj-indent.git'
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""快速选中""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 选中区块
Bundle 'terryma/vim-expand-region'
map +
map _
" 多光标选中编辑
Bundle 'terryma/vim-multiple-cursors'
let g:multi_cursor_use_default_mapping=0
" Default mapping
let g:multi_cursor_next_key='
let g:multi_cursor_prev_key='
let g:multi_cursor_skip_key='
let g:multi_cursor_quit_key='
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""功能相关"""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Bundle 'vim-scripts/bufexplorer.zip'
"Bundle 'vim-scripts/winmanager'
"Bundle 'xolox/vim-misc'
"Bundle 'xolox/vim-shell'
Bundle 'vim-scripts/a.vim'
Bundle 'vim-scripts/vcscommand.vim'
" 文件搜索
" change to https://github.com/ctrlpvim/ctrlp.vim
Bundle 'ctrlpvim/ctrlp.vim'
let g:ctrlp_map = '
let g:ctrlp_cmd = 'CtrlP'
map
"set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux"
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|rvm)$',
\ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz)$',
\ }
"\ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
let g:ctrlp_working_path_mode=0
let g:ctrlp_match_window_bottom=1
let g:ctrlp_max_height=15
let g:ctrlp_match_window_reversed=0
let g:ctrlp_mruf_max=500
let g:ctrlp_follow_symlinks=1
" ctrlp插件1 - 不用ctag进行函数快速跳转
Bundle 'tacahiroy/ctrlp-funky'
nnoremap
" narrow the list down with a word under cursor
nnoremap
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_extensions = ['funky']
" git. git操作还是习惯命令行,vim里面处理简单diff编辑操作
Bundle 'tpope/vim-fugitive'
":Gdiff :Gstatus :Gvsplit
nnoremap
" not ready to open
"
"
"
"
"
"
" 同git diff,实时展示文件中修改的行
" 只是不喜欢除了行号多一列, 默认关闭,gs时打开
Bundle 'airblade/vim-gitgutter'
let g:gitgutter_map_keys = 0
let g:gitgutter_enabled = 0
let g:gitgutter_highlight_lines = 1
nnoremap
" edit history, 可以查看回到某个历史状态
Bundle 'sjl/gundo.vim'
nnoremap
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""显示增强""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"状态栏增强展示
" 新的airline配置
Bundle 'bling/vim-airline'
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'
"括号显示增强
Bundle 'kien/rainbow_parentheses.vim'
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['black', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 40
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""显示增强-主题""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"主题 solarized
Bundle 'altercation/vim-colors-solarized'
"let g:solarized_termcolors=256
let g:solarized_termtrans=1
let g:solarized_contrast="normal"
let g:solarized_visibility="normal"
"主题 molokai
Bundle 'tomasr/molokai'
"let g:molokai_original = 1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""快速导航""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"目录导航
Bundle 'scrooloose/nerdtree'
map
let NERDTreeHighlightCursorline=1
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ]
"let NERDTreeDirArrows=0
"let g:netrw_home='~/bak'
"close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end
" s/v 分屏打开文件
let g:NERDTreeMapOpenSplit = 's'
let g:NERDTreeMapOpenVSplit = 'v'
Bundle 'jistr/vim-nerdtree-tabs'
map
" 关闭同步
let g:nerdtree_tabs_synchronize_view=0
let g:nerdtree_tabs_synchronize_focus=0
" 自动开启nerdtree
"let g:nerdtree_tabs_open_on_console_startup=1
" Vim Workspace Controller
Bundle "szw/vim-ctrlspace"
let g:airline_exclude_preview = 1
hi CtrlSpaceSelected guifg=#586e75 guibg=#eee8d5 guisp=#839496 gui=reverse,bold ctermfg=10 ctermbg=7 cterm=reverse,bold
hi CtrlSpaceNormal guifg=#839496 guibg=#021B25 guisp=#839496 gui=NONE ctermfg=12 ctermbg=0 cterm=NONE
hi CtrlSpaceSearch guifg=#cb4b16 guibg=NONE gui=bold ctermfg=9 ctermbg=NONE term=bold cterm=bold
hi CtrlSpaceStatus guifg=#839496 guibg=#002b36 gui=reverse term=reverse cterm=reverse ctermfg=12 ctermbg=8
Bundle 'fholgado/minibufexpl.vim'
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
"解决FileExplorer窗口变小问题
let g:miniBufExplForceSyntaxEnable = 1
let g:miniBufExplorerMoreThanOne=2
let g:miniBufExplCycleArround=1
" 默认方向键左右可以切换buffer
nnoremap
noremap
noremap
noremap
"标签导航
Bundle 'majutsushi/tagbar'
"nmap
let g:tagbar_autofocus = 1
let g:tagbar_left = 1
let g:tagbar_expand = 1
let g:tagbar_compact = 1
let g:tagbar_singleclick = 1
let g:tagbar_autoshowtag = 1
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_width = 30
" for ruby
let g:tagbar_type_ruby = {
\ 'kinds' : [
\ 'm:modules',
\ 'c:classes',
\ 'd:describes',
\ 'C:contexts',
\ 'f:methods',
\ 'F:singleton methods'
\ ]
\ }
" go语言的tagbar配置
" 1.install gotags 'go get -u github.com/jstemmer/gotags'
" 2.make sure `gotags` in you shell PATH, you can call check it with `which gotags`
" for gotags. work with tagbar
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""语言相关"""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"###### Python #########
" python fly check, 弥补syntastic只能打开和保存才检查语法的不足
Bundle 'kevinw/pyflakes-vim'
let g:pyflakes_use_quickfix = 0
" for python.vim syntax highlight
Bundle 'hdima/python-syntax'
let python_highlight_all = 1
"###### Golang #########
" 1.install golang and install gocode 'go get github.com/nsf/gocode'
" 2.make sure gocode in your path: `which gocode` (add $GOPATH/bin to you $PATH)
Bundle 'Blackrush/vim-gocode'
"Bundle 'fatih/vim-go.git'
"###### Ruby #########
" Bundle 'vim-ruby/vim-ruby'
" Bundle 'nelstrom/vim-textobj-rubyblock'
" 有bug, 和当前有冲突, 尚未解决, 不要打开
" Bundle 'tpope/vim-endwise'
"###### Markdown #########
Bundle 'plasticboy/vim-markdown'
let g:vim_markdown_folding_disabled=1
"###### HTML/JS/JQUERY/CSS #########
" for javascript 注意: syntax这个插件要放前面
Bundle 'jelera/vim-javascript-syntax'
Bundle "pangloss/vim-javascript"
let g:html_indent_inctags = "html,body,head,tbody"
let g:html_indent_script1 = "inc"
let g:html_indent_style1 = "inc"
" for javascript 自动补全,配合YCM,需要安装nodejs&npm see
" https://github.com/marijnh/tern_for_vim
" Bundle 'marijnh/tern_for_vim'
"for jquery
Bundle 'nono/jquery.vim'
"###### emmet HTML complete #########
"Bundle "mattn/emmet-vim"
"###### vim.less : less 自动更新##########
" Bundle 'groenewege/vim-less'
" autocmd BufWritePost *.less :!lessc % > %:p:r.css
"###### Jinja2 #########
Bundle 'Glench/Vim-Jinja2-Syntax'
"for css color
"not work in iterm2 which termianl selection is not xterm-256
" Bundle 'ap/vim-css-color'
" 这个有坑, see issue https://github.com/wklken/k-vim/issues/49
"Bundle 'gorodinskiy/vim-coloresque'
"###### nginx #########
" Bundle 'evanmiller/nginx-vim-syntax'
" 待审查
" Bundle "thinca/vim-quickrun"
" nnoremap
Bundle 'vim-scripts/gtags.vim'
" All of your Plugins must be added before the following line
"call vundle#end() " required
"filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""" bundle 插件管理和配置项""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""包依赖""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"package dependence: ctags
"python dependence: pep8, pyflake
"非兼容vi模式。去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
" configure Vundle
filetype off " required! turn off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""插件管理""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 使用Vundle来管理插件
" vim plugin bundle control, command model
" :BundleInstall install 安装配置的插件
" :BundleInstall! update 更新
" :BundleClean remove plugin not in list 删除本地无用插件
Bundle 'gmarik/vundle'
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""基础"""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 多语言语法检查
Bundle 'scrooloose/syntastic'
let g:syntastic_error_symbol = '✗' "set error or warning signs
let g:syntastic_warning_symbol = '⚠'
let g:syntastic_check_on_open=1
let g:syntastic_enable_highlighting = 0
let g:syntastic_python_checkers=['pyflakes'] " 使用pyflakes,速度比pylint快
let g:syntastic_javascript_checkers = ['jsl', 'jshint']
let g:syntastic_html_checkers=['tidy', 'jshint']
let g:syntastic_cpp_include_dirs = ['/usr/include/']
let g:syntastic_cpp_remove_include_errors = 1
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'
let g:syntastic_enable_balloons = 1 "whether to show balloons
highlight SyntasticErrorSign guifg=white guibg=black
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""自动补全""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 代码自动补全
"迄今为止用到的最好的自动VIM自动补全插件
"重启 :YcmRestartServer
Bundle 'Valloric/YouCompleteMe'
"youcompleteme 默认tab s-tab 和自动补全冲突
"let g:ycm_key_list_select_completion=['
let g:ycm_key_list_select_completion = ['
"let g:ycm_key_list_previous_completion=['
let g:ycm_key_list_previous_completion = ['
let g:ycm_complete_in_comments = 1 "在注释输入中也能补全
let g:ycm_complete_in_strings = 1 "在字符串输入中也能补全
let g:ycm_use_ultisnips_completer = 1 "提示UltiSnips
let g:ycm_cache_omnifunc = 0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_collect_identifiers_from_comments_and_strings = 0 "注释和字符串中的文字也会被收入补全
let g:ycm_seed_identifiers_with_syntax = 0 "语言关键字补全, 不过python关键字都很短,所以,需要的自己打开
"let g:ycm_collect_identifiers_from_tags_files = 1 "会导致一直更新标签,python2 占用内存80%以上
" 引入,可以补全系统,以及python的第三方包 针对新老版本YCM做了兼容
" old version
"if !empty(glob("~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"))
" let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"
"endif
" new version
if !empty(glob("~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"))
let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"
endif
" 直接触发自动补全
"let g:ycm_key_invoke_completion = '
" 跳转到定义处, 分屏打开
let g:ycm_goto_buffer_command = 'horizontal-split'
" nnoremap
nnoremap
nnoremap
" 黑名单,不启用
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'gitcommit' : 1,
\}
" 代码片段快速插入 (snippets中,是代码片段资源,需要学习)
Bundle 'SirVer/ultisnips'
" Snippets are separated from the engine. Add this if you want them:
Bundle 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger = "
let g:UltiSnipsJumpForwardTrigger = "
let g:UltiSnipsJumpBackwardTrigger = "
let g:UltiSnipsSnippetDirectories = ['UltiSnips']
let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnips'
" 定义存放代码片段的文件夹 .vim/UltiSnips下,使用自定义和默认的,将会的到全局,有冲突的会提示
" 进入对应filetype的snippets进行编辑
map
" ctrl+j/k 进行选择
func! g:JInYCM()
if pumvisible()
return "\
else
return "\
endif
endfunction
func! g:KInYCM()
if pumvisible()
return "\
else
return "\
endif
endfunction
inoremap
au BufEnter,BufRead * exec "inoremap
let g:UltiSnipsJumpBackwordTrigger = "
" 自动补全单引号,双引号等
Bundle 'Raimondi/delimitMate'
"" for python docstring ",优化输入
au FileType python let b:delimitMate_nesting_quotes = ['"']
" 自动补全html/xml标签
Bundle 'docunext/closetag.vim'
let g:closetag_html_style=1
"################### 快速编码 ###################
" 快速注释
Bundle 'scrooloose/nerdcommenter'
let g:NERDSpaceDelims=1
" 快速加入修改环绕字符
Bundle 'tpope/vim-surround'
" for repeat -> enhance surround.vim, . to repeat command
Bundle 'tpope/vim-repeat'
" 快速去行尾空格 [, +
Bundle 'bronson/vim-trailing-whitespace'
map
" 快速赋值语句对齐
Bundle 'junegunn/vim-easy-align'
vmap
nmap
if !exists('g:easy_align_delimiters')
let g:easy_align_delimiters = {}
endif
let g:easy_align_delimiters['#'] = { 'pattern': '#', 'ignore_groups': ['String'] }
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""快速移动 """"""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"更高效的移动 [,, + w/fx]
Bundle 'Lokaltog/vim-easymotion'
let g:EasyMotion_smartcase = 1
" let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion
map
map
map
map
Bundle 'vim-scripts/matchit.zip'
" 显示marks - 方便自己进行标记和跳转
" m[a-zA-Z] add mark
" '[a-zA-Z] go to mark
" m
Bundle "kshenoy/vim-signature"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""文本对象"""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 支持自定义文本对象
Bundle 'kana/vim-textobj-user.git'
" 增加行文本对象: l dal yal cil
Bundle 'kana/vim-textobj-line'
" 增加文件文本对象: e dae yae cie
Bundle 'kana/vim-textobj-entire.git'
" 增加缩进文本对象: i dai yai cii - 相同缩进属于同一块
Bundle 'kana/vim-textobj-indent.git'
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""快速选中""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 选中区块
Bundle 'terryma/vim-expand-region'
map +
map _
" 多光标选中编辑
Bundle 'terryma/vim-multiple-cursors'
let g:multi_cursor_use_default_mapping=0
" Default mapping
let g:multi_cursor_next_key='
let g:multi_cursor_prev_key='
let g:multi_cursor_skip_key='
let g:multi_cursor_quit_key='
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""功能相关"""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Bundle 'vim-scripts/bufexplorer.zip'
"Bundle 'vim-scripts/winmanager'
"Bundle 'xolox/vim-misc'
"Bundle 'xolox/vim-shell'
Bundle 'vim-scripts/a.vim'
Bundle 'vim-scripts/vcscommand.vim'
" 文件搜索
" change to https://github.com/ctrlpvim/ctrlp.vim
Bundle 'ctrlpvim/ctrlp.vim'
let g:ctrlp_map = '
let g:ctrlp_cmd = 'CtrlP'
map
"set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux"
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|rvm)$',
\ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz)$',
\ }
"\ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
let g:ctrlp_working_path_mode=0
let g:ctrlp_match_window_bottom=1
let g:ctrlp_max_height=15
let g:ctrlp_match_window_reversed=0
let g:ctrlp_mruf_max=500
let g:ctrlp_follow_symlinks=1
" ctrlp插件1 - 不用ctag进行函数快速跳转
Bundle 'tacahiroy/ctrlp-funky'
nnoremap
" narrow the list down with a word under cursor
nnoremap
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_extensions = ['funky']
" git. git操作还是习惯命令行,vim里面处理简单diff编辑操作
Bundle 'tpope/vim-fugitive'
":Gdiff :Gstatus :Gvsplit
nnoremap
" not ready to open
"
"
"
"
"
"
" 同git diff,实时展示文件中修改的行
" 只是不喜欢除了行号多一列, 默认关闭,gs时打开
Bundle 'airblade/vim-gitgutter'
let g:gitgutter_map_keys = 0
let g:gitgutter_enabled = 0
let g:gitgutter_highlight_lines = 1
nnoremap
" edit history, 可以查看回到某个历史状态
Bundle 'sjl/gundo.vim'
nnoremap
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""显示增强""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"状态栏增强展示
" 新的airline配置
Bundle 'bling/vim-airline'
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'
"括号显示增强
Bundle 'kien/rainbow_parentheses.vim'
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['black', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 40
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""显示增强-主题""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"主题 solarized
Bundle 'altercation/vim-colors-solarized'
"let g:solarized_termcolors=256
let g:solarized_termtrans=1
let g:solarized_contrast="normal"
let g:solarized_visibility="normal"
"主题 molokai
Bundle 'tomasr/molokai'
"let g:molokai_original = 1
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""快速导航""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"目录导航
Bundle 'scrooloose/nerdtree'
map
let NERDTreeHighlightCursorline=1
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ]
"let NERDTreeDirArrows=0
"let g:netrw_home='~/bak'
"close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end
" s/v 分屏打开文件
let g:NERDTreeMapOpenSplit = 's'
let g:NERDTreeMapOpenVSplit = 'v'
Bundle 'jistr/vim-nerdtree-tabs'
map
" 关闭同步
let g:nerdtree_tabs_synchronize_view=0
let g:nerdtree_tabs_synchronize_focus=0
" 自动开启nerdtree
"let g:nerdtree_tabs_open_on_console_startup=1
" Vim Workspace Controller
Bundle "szw/vim-ctrlspace"
let g:airline_exclude_preview = 1
hi CtrlSpaceSelected guifg=#586e75 guibg=#eee8d5 guisp=#839496 gui=reverse,bold ctermfg=10 ctermbg=7 cterm=reverse,bold
hi CtrlSpaceNormal guifg=#839496 guibg=#021B25 guisp=#839496 gui=NONE ctermfg=12 ctermbg=0 cterm=NONE
hi CtrlSpaceSearch guifg=#cb4b16 guibg=NONE gui=bold ctermfg=9 ctermbg=NONE term=bold cterm=bold
hi CtrlSpaceStatus guifg=#839496 guibg=#002b36 gui=reverse term=reverse cterm=reverse ctermfg=12 ctermbg=8
Bundle 'fholgado/minibufexpl.vim'
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
"解决FileExplorer窗口变小问题
let g:miniBufExplForceSyntaxEnable = 1
let g:miniBufExplorerMoreThanOne=2
let g:miniBufExplCycleArround=1
" 默认方向键左右可以切换buffer
nnoremap
noremap
noremap
noremap
"标签导航
Bundle 'majutsushi/tagbar'
"nmap
let g:tagbar_autofocus = 1
let g:tagbar_left = 1
let g:tagbar_expand = 1
let g:tagbar_compact = 1
let g:tagbar_singleclick = 1
let g:tagbar_autoshowtag = 1
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_width = 30
" for ruby
let g:tagbar_type_ruby = {
\ 'kinds' : [
\ 'm:modules',
\ 'c:classes',
\ 'd:describes',
\ 'C:contexts',
\ 'f:methods',
\ 'F:singleton methods'
\ ]
\ }
" go语言的tagbar配置
" 1.install gotags 'go get -u github.com/jstemmer/gotags'
" 2.make sure `gotags` in you shell PATH, you can call check it with `which gotags`
" for gotags. work with tagbar
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""语言相关"""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"###### Python #########
" python fly check, 弥补syntastic只能打开和保存才检查语法的不足
Bundle 'kevinw/pyflakes-vim'
let g:pyflakes_use_quickfix = 0
" for python.vim syntax highlight
Bundle 'hdima/python-syntax'
let python_highlight_all = 1
"###### Golang #########
" 1.install golang and install gocode 'go get github.com/nsf/gocode'
" 2.make sure gocode in your path: `which gocode` (add $GOPATH/bin to you $PATH)
Bundle 'Blackrush/vim-gocode'
"Bundle 'fatih/vim-go.git'
"###### Ruby #########
" Bundle 'vim-ruby/vim-ruby'
" Bundle 'nelstrom/vim-textobj-rubyblock'
" 有bug, 和当前有冲突, 尚未解决, 不要打开
" Bundle 'tpope/vim-endwise'
"###### Markdown #########
Bundle 'plasticboy/vim-markdown'
let g:vim_markdown_folding_disabled=1
"###### HTML/JS/JQUERY/CSS #########
" for javascript 注意: syntax这个插件要放前面
Bundle 'jelera/vim-javascript-syntax'
Bundle "pangloss/vim-javascript"
let g:html_indent_inctags = "html,body,head,tbody"
let g:html_indent_script1 = "inc"
let g:html_indent_style1 = "inc"
" for javascript 自动补全,配合YCM,需要安装nodejs&npm see
" https://github.com/marijnh/tern_for_vim
" Bundle 'marijnh/tern_for_vim'
"for jquery
Bundle 'nono/jquery.vim'
"###### emmet HTML complete #########
"Bundle "mattn/emmet-vim"
"###### vim.less : less 自动更新##########
" Bundle 'groenewege/vim-less'
" autocmd BufWritePost *.less :!lessc % > %:p:r.css
"###### Jinja2 #########
Bundle 'Glench/Vim-Jinja2-Syntax'
"for css color
"not work in iterm2 which termianl selection is not xterm-256
" Bundle 'ap/vim-css-color'
" 这个有坑, see issue https://github.com/wklken/k-vim/issues/49
"Bundle 'gorodinskiy/vim-coloresque'
"###### nginx #########
" Bundle 'evanmiller/nginx-vim-syntax'
" 待审查
" Bundle "thinca/vim-quickrun"
" nnoremap
Bundle 'vim-scripts/gtags.vim'
" All of your Plugins must be added before the following line
"call vundle#end() " required
"filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
===============================================华丽的分割线
第一时间获得博客更新提醒,以及更多技术信息分享,欢迎关注个人微信公众平台:程序员互动联盟
1.第一时间获得业内十多个领域的原创技术文章
2.对于文章内有疑问可以立即提出问题,第一时间得到回复,以及耐心的解答。
3.可以和原创文章作者成为很好的朋友,拓展自己的人脉资源。
扫一扫下方二维码或搜索微信号coder_online即可关注,我们可以在线交流。