Mac vim环境配置

vim环境安装

# mac下安装brew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装vim
$ brew install vim   
# 下载plug.vim, 如果下载超时,浏览器打开https://*/plug.vim复制内容,在~/.vim/autoload目录下创建plug.vim文件,并粘贴复制的内容
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# 创建.vimrc文件 
$ touch /Users/${USER}/.vimrc

vimrc配置文件

# .vimrc配置文件内容
" filetype off
call plug#begin('~/.vim/plugged')

" 主题
" Plug 'tomasr/molokai'
Plug 'morhetz/gruvbox'
"======================================================================

" 定义插件,默认用法,和 Vundle 的语法差不多
" Plug 'junegunn/vim-easy-align'
" Plug 'junegunn/seoul256.vim'
" Plug 'junegunn/goyo.vim'
Plug 'skywind3000/quickmenu.vim'
"======================================================================
 
" 延迟按需加载,使用到命令的时候再加载或者打开对应文件类型才加载
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
"======================================================================
 
" 确定插件仓库中的分支或者 tag
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
"======================================================================

" 自动索引
Plug 'ludovicchabant/vim-gutentags'
Plug 'skywind3000/gutentags_plus'
"======================================================================

" 编译运行
Plug 'skywind3000/asyncrun.vim'
"======================================================================

" 动态检查
Plug 'w0rp/ale'
"======================================================================

" 修改比较
" Plug 'mhinz/vim-signify'
"======================================================================

" 文本对象
" Plug 'kana/vim-textobj-user'
" Plug 'kana/vim-textobj-indent'
" Plug 'kana/vim-textobj-syntax'
" Plug 'kana/vim-textobj-function', { 'for':['c', 'cpp', 'vim', 'java'] }
" Plug 'sgur/vim-textobj-parameter'
"======================================================================

" 编辑辅助,高亮
" Plug 'octol/vim-cpp-enhanced-highlight'
"======================================================================

" 代码补全
Plug 'Valloric/YouCompleteMe'
"======================================================================

" 函数列表
Plug 'Yggdroot/LeaderF'
"======================================================================

" 参数提示
Plug 'Shougo/echodoc.vim'
"======================================================================

" 文件目录插件
Plug 'scrooloose/nerdcommenter' " 注释
"======================================================================

" fzf搜索神器
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
"======================================================================

" 状态栏
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
"======================================================================

" limelight
" Plug 'junegunn/limelight.vim'
"======================================================================

" liuchengxu/vista.vim
Plug 'liuchengxu/vista.vim'
"======================================================================

" jiangmiao/auto-pairs
Plug 'jiangmiao/auto-pairs'
"======================================================================

call plug#end()
" filetype plugin indent on


" 主题相关
" colorscheme molokai
colorscheme gruvbox
set background=dark

" 普通配置,快捷键
set number
set ruler
set nopaste
set cursorline
set cursorcolumn
syntax enable
syntax on
set nrformats=
set backspace=2
set shiftwidth=2
set softtabstop=2
set ts=2
set expandtab
set autoindent
" 关闭兼容模式
set nocompatible
" vim 自身命令行模式智能补全
set wildmenu
" 定义快捷键的前缀,即<Leader>
let mapleader=";"
" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on
" 定义快捷键到行首和行尾
nmap LB 0
nmap LE $
" 设置快捷键将选中文本块复制至系统剪贴板
vnoremap <Leader>y "+y
" 设置快捷键将系统剪贴板内容粘贴至 vim
nmap <Leader>p "+p
" 定义快捷键关闭当前分割窗口
nmap <Leader>q :q<CR>
" 定义快捷键保存当前窗口内容
nmap <Leader>w :w<CR>
" 定义快捷键保存所有窗口内容并退出 vim
nmap <Leader>WQ :wa<CR>:q<CR>
" 不做任何保存,直接退出 vim
nmap <Leader>Q :qa!<CR>
" 依次遍历子窗口
nnoremap nw <C-W><C-W>
" 跳转至右方的窗口
nnoremap <Leader>lw <C-W>l
" 跳转至左方的窗口
nnoremap <Leader>hw <C-W>h
" 跳转至上方的子窗口
nnoremap <Leader>kw <C-W>k
" 跳转至下方的子窗口
nnoremap <Leader>jw <C-W>j
" 定义快捷键在结对符之间跳转
nmap <Leader>M %
" 让配置变更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC

if exists('$TMUX')
    set term=screen-256color
endif

" <F5>快捷运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!g++ % -o %<"
        ":AsyncRun g++ % -o %<
        ":AsyncRun ./%<
        exec "!time ./%<"
    elseif &filetype == 'cpp'
        "exec "!g++ -std=c++11 % -o %<"
        "exec "!time ./%<"
        ":AsyncRun g++ -std=c++11 % -o %<
        " :AsyncRun ./%<
        " :AsyncRun g++ -std=c++11 % -o %< `pkg-config --cflags --libs opencv`
        :AsyncRun ./%<
    elseif &filetype == 'java'
        exec "!java %"
        exec "!time java %<"
    elseif &filetype == 'sh'
        :!time bash %
    elseif &filetype == 'python'
        "exec "!time python %"
        :AsyncRun -raw python %
    elseif &filetype == 'html'
        exec "!time go run %"
    endif
endfunctio

autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif


" 插件配置

" ----------------------------------------------------------------
"  Plug 'ludovicchabant/vim-gutentags'

" 设置符号索引,参考韦易笑大神配置
set tags=./.tags;,.tags
let $GTAGSLABEL = 'native-pygments'
let $GTAGSCONF = '/usr/local/Cellar/global/6.6.3/share/gtags/gtags.conf'
" let g:gutentags_enabled = 1
" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']

" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'

" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags

" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

" 禁用 gutentags 自动加载 gtags 数据库的行为
let g:gutentags_auto_add_gtags_cscope = 0
let g:gutentags_plus_nomap = 1
let g:gutentags_define_advanced_commands = 1

" 同时开启 ctags 和 gtags 支持:
let g:gutentags_modules = []
if executable('ctags')
    let g:gutentags_modules += ['ctags']
endif
if executable('gtags-cscope') && executable('gtags')
    let g:gutentags_modules += ['gtags_cscope']
endif

noremap <silent> <leader>gs :GscopeFind s <C-R><C-W><cr>
noremap <silent> <leader>gg :GscopeFind g <C-R><C-W><cr>
noremap <silent> <leader>gC :GscopeFind c <C-R><C-W><cr>
noremap <silent> <leader>gT :GscopeFind t <C-R><C-W><cr>
noremap <silent> <leader>ge :GscopeFind e <C-R><C-W><cr>
noremap <silent> <leader>gf :GscopeFind f <C-R>=expand("<cfile>")<cr><cr>
noremap <silent> <leader>gi :GscopeFind i <C-R>=expand("<cfile>")<cr><cr>
noremap <silent> <leader>gd :GscopeFind d <C-R><C-W><cr>
noremap <silent> <leader>ga :GscopeFind a <C-R><C-W><cr>
"gs Find symbol (reference) under cursor
"gg Find symbol definition under cursor
"gc Functions called by this function 
"gt Functions calling this function 
"ge Find text string under cursor 
"gf Find egrep pattern under cursor
"gi Find file name under cursor
"gd Find files #including the file name under cursor
"ga Find places where current symbol is assigned

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'skywind3000/asyncrun.vim'

" 自动打开 quickfix window ,高度为 10
let g:asyncrun_open = 8 " 任务结束时候响铃提醒 let g:asyncrun_bell = 1
" 设置 F10 打开/关闭 Quickfix 窗口
nnoremap <F10> :call asyncrun#quickfix_toggle(10)<cr>
" 重新定义项目标志
let g:asyncrun_rootmarks = ['.svn', '.git', '.root', '_darcs', 'build.xml'] 
" F4为更新Makefile文件
nnoremap <silent> <F4> :AsyncRun -cwd=<root> cmake . <cr>
" F6 clang编译c++程序
" noremap <F6> :AsyncRun g++ -v -lboost_filesystem -lboost_system -std=c++17 "%" -o "%<"<CR>
noremap <F1> :AsyncRun clang++ -std=c++11 "%" -o "%<"<CR>
" noremap <F6> :AsyncRun g++ -Iboost_1_68_0 -Lboost_1_68_0/lib/ -lboost-filesystem -lboost-system -std=c++11 "%" -o "%<"<CR>
" F7编译整个项目
nnoremap <silent> <F7> :AsyncRun -cwd=<root> make <cr>
" F8 运行当前项目
nnoremap <silent> <F8> :AsyncRun -cwd=<root> -raw make run <cr>
" F9编译单文件
nnoremap <silent> <F9> :AsyncRun gcc -Wall -O2 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <cr>

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'w0rp/ale'

let g:ale_linters_explicit = 1
let g:ale_lint_delay = 500
let g:ale_echo_msg_format = '[%linter%] %code: %%s'
let g:ale_lint_on_text_changed = 'normal'
let g:ale_lint_on_insert_leave = 1
let g:airline#extensions#ale#enabled = 1
 
let g:ale_c_gcc_options = '-Wall -O2 -std=c99'
let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++14'
let g:ale_c_cppcheck_options = ''
let g:ale_cpp_cppcheck_options = ''

let g:ale_sign_error = "\ue009\ue009"
hi! clear SpellBad
hi! clear SpellCap
hi! clear SpellRare
hi! SpellBad gui=undercurl guisp=red
hi! SpellCap gui=undercurl guisp=blue 
hi! SpellRare gui=undercurl guisp=magenta

"始终开启标志列
let g:ale_sign_column_always = 1
let g:ale_set_highlights = 0
"自定义error和warning图标
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
"在vim自带的状态栏中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"显示Linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s触发/关闭语法检查
nmap <Leader>s :ALEToggle<CR>
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>
" "使用clang对c和c++进行语法检查,对python使用pylint进行语法检查
let g:ale_linters = {
    \   'cpp': ['cppcheck','clang','gcc'],
    \   'c': ['cppcheck','clang', 'gcc'],
    \   'python': ['pylint'],
    \   'java': ['checkstyle'],
    \}
"设置状态栏显示的内容
" set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}
set fenc= 

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'mhinz/vim-signify'

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'kana/vim-textobj-user'

" i, 和 a, :参数对象,写代码一半在修改,现在可以用 di, / ci, 一次性删除/改写当前参数
" ii 和 ai :缩进对象,同一个缩进层次的代码,可以用 vii 选中,dii / cii 删除或改写
" if 和 af :函数对象,可以用 vif / dif / cif 来选中/删除/改写函数的内容

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'octol/vim-cpp-enhanced-highlight'

" Vim 自带语法文件更好的 C/C++ 语法标注,支持 cpp11/14/17
let g:cpp_class_scope_highlight = 1
let g:cpp_member_variable_highlight = 1
let g:cpp_class_decl_highlight = 1
let g:cpp_experimental_simple_template_highlight = 1
let g:cpp_concepts_highlight = 1
let g:cpp_no_function_highlight = 1

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'Valloric/YouCompleteMe'

let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
let g:ycm_python_binary_path = ''
let g:ycm_confirm_extra_conf = 0 " stop remind load from local file .ycm_extra_conf
"是否开启语义补全"
let g:ycm_seed_identifiers_with_syntax=1
"是否在注释中也开启补全"
let g:ycm_complete_in_comments=1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"开始补全的字符数"
let g:ycm_min_num_of_chars_for_completion=2
"补全后自动关机预览窗口"
let g:ycm_autoclose_preview_window_after_completion=1
"禁止缓存匹配项,每次都重新生成匹配项"
let g:ycm_cache_omnifunc=0
"字符串中也开启补全"
let g:ycm_complete_in_strings = 1

noremap <leader>gt :YcmCompleter GoToDeclaration<CR>
noremap <leader>gc :YcmCompleter GoToDefinition<CR>

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'Yggdroot/LeaderF'

" alt + p 文件切换
let g:Lf_ShortcutF = '<c-p>'
let g:Lf_ShortcutB = '<m-n>'
noremap <c-n> :LeaderfMru<cr>
noremap <m-p> :LeaderfFunction!<cr>
noremap <m-n> :LeaderfBuffer<cr>
noremap <m-m> :LeaderfTag<cr>
let g:Lf_StlSeparator = { 'left': '', 'right': '', 'font': '' }
 
let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']
let g:Lf_WorkingDirectoryMode = 'Ac'
let g:Lf_WindowHeight = 0.30
let g:Lf_CacheDirectory = expand('~/.vim/cache')
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
" let g:Lf_StlColorscheme = 'powerline'
let g:Lf_StlColorscheme = 'airline'
let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}
" CTRL+P 在当前项目目录打开文件搜索,CTRL+N 打开 MRU搜索,搜索你最近打开的文件
" ALT+P 打开函数搜索,ALT+N 打开 Buffer 搜索

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'Shougo/echodoc.vim'

" 参数提醒

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'fzf'

nnoremap <silent> <Leader>f :Files<CR>
nnoremap <silent> <Leader>b :Buffers<CR>

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'scrooloose/nerdtree'

" nmap <Leader>fl :NERDTreeToggle<CR>
" 设置NERDTree子窗口宽度
let NERDTreeWinSize=32
" 设置NERDTree子窗口位置
let NERDTreeWinPos="left"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
" <F2> open nerdTreeToggle
nmap <F2> :NERDTreeToggle<CR>

" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1
" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1
" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'
" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1
" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }
" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1
" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1
" Enable NERDCommenterToggle to check all selected lines is commented or not
let g:NERDToggleCheckAllLines = 1

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" Plug 'vim-airline/vim-airline'
" Plug 'vim-airline/vim-airline-themes'

let g:airline_theme='biogoo'

" ----------------------------------------------------------------


" ----------------------------------------------------------------
" skywind3000/quickmenu.vim

noremap <silent><F12> :call quickmenu#toggle(0)<cr>
let g:quickmenu_options = "HL"

" ----------------------------------------------------------------


" " ----------------------------------------------------------------
" " Plug 'vim-syntastic/syntastic'
"
" " set statusline+=%#warningmsg#
" " set statusline+=%{SyntasticStatuslineFlag()}
" " set statusline+=%*
"
" let g:syntastic_always_populate_loc_list = 1
" let g:syntastic_auto_loc_list = 1
" let g:syntastic_check_on_open = 1
" let g:syntastic_check_on_wq = 0
"
" " ----------------------------------------------------------------


" " ----------------------------------------------------------------
"Plug 'python-mode/python-mode', { 'branch': 'develop' }

" let g:pymode_python = 'python3'

" " ----------------------------------------------------------------



" " ----------------------------------------------------------------
" liuchengxu/vista.vim
" Plug 'liuchengxu/vista.vim'
" " ----------------------------------------------------------------

vim插件安装

$ vim .vimrc
# 等待插件安装完成
:PluginInstall 
$ brew install global
# 切换到YouCompleteMe插件目录下,执行安装
$ cd ~/.vim/plugged/YouCompleteMe
# 注意python的版本,3.7.4也许会出问题
$ python install.py --all
# 复制.ycm_extra_conf.py文件,也可以在.vimrc文件中指定路径
$ cp ~/.vim/plugged/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py ~
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值