当前位置:   article > 正文

2022 最新 Mac Vim 开发环境的部署与配置_macvim

macvim

2022 最新 Mac Vim 开发环境的部署与配置

效果图

Mac Vim 开发环境的部署与配置

Vim 插件简介

插件名描述
pope/vim-fugitiveVim 编辑器中的 Git 包装器插件,它可以让我们在 Vim 编辑器中完成 Git 操作
scrooloose/nerdtree用来提供一个导航目录的侧边栏
ryanoasis/vim-devicons在 NERDTree 中显示文件类型图标
jistr/vim-nerdtree-tabs可以使 NERDTree 的 tab 更加友好些
Xuyuanp/nerdtree-git-plugin可以在文件目录中看到 Git 版本信息
airblade/vim-gitgutter可以在文档中显示 Git 信息
preservim/tagbar查看当前代码文件中的变量和函数列表的插件,可以切换和跳转到代码中对应的变量和函数的位置
jiangmiao/auto-pairs自动补全括号的插件,包括小括号,中括号,以及花括号
vim-airline/vim-airlineVim 状态栏插件,包括显示行号,列号,文件类型,文件名,以及 Git 状态
vim-airline/vim-airline-themesvim-airline 的主题插件
ianva/vim-youdao-translater有道词典在线翻译
ycm-core/YouCompleteMe代码自动完成,安装完插件还需要额外配置才可以使用
Yggdroot/indentLine代码缩进提示
tmhedberg/SimpylFold代码折叠
SirVer/ultisnips代码块生成器
honza/vim-snippets代码块自定义风格片段
iamcco/mathjax-support-for-mkdpMarkdown 插件,预览数学插件
iamcco/markdown-preview.vim在浏览器预览 Markdown 文档
bronson/vim-trailing-whitespace高亮显示多余空格并一键去除
preservim/nerdcommenter快速注释插件
Yggdroot/LeaderFLeaderF 无论是从性能还是匹配精度上,都远远超越 ctrlp。快速打开或定位某个 buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、命令历史、文件中的某一行、Vim 的 help、marks 等。
morhetz/gruvboxVim 主题
fatih/vim-goVim Go 语言插件
dgryski/vim-godefGo 中的代码追踪,输入 gd 就可以自动跳转
vim-scripts/indentpython.vimPython 自动缩进工具,符合 PEP8 风格
tell-k/vim-autopep8Python 一款自动格式化工具

MacVim 安装

Vim下载地址,分为适用 Mac 的 MacVim,适用 MS-Windows 系统的 GVim,适用 Unix 的 Vim

# Mac 系统可以下载 MacVim.dmg 安装,也可以通过 homebrew 安装
brew cask install macvim --with-override-system-vim

# 编辑 ~/.bash_profile 在文件末尾添加
vim ~/.bash_profile

alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"
alias mvim="/Applications/MacVim.app/Contents/Ma cOS/MacVim"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Vim 插件安装

Vundle 插件管理器安装

vim 插件管理器,能够搜索、安装、更新和移除 vim 相关插件。

# 下载 Vundle 到 bundle 文件夹
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
  • 1
  • 2
Vundle 配置,安装插件的几种方式:
  • 从GitHub仓库安装,格式为Plugin 'GitHub用户名/插件仓库名',如Plugin 'tpope/vim-fugitive'

  • 来自 http://vim-scripts.org/vim/scripts.html 的插件,GitHub地址,格式为Plugin '插件名称',如Plugin 'L9'

  • 由Git支持但不在GitHub上的插件仓库安装,格式为Plugin 'git_address'

    如``Plugin 'https://gitee.com/yanzhongqian/nerdtree.git`

  • 从本地Git仓库的插件安装,格式为Plugin 'file:///home/gmarik/path/to/plugin',

    Plugin '/Users/biaowong/.vim/plugins/go_fmt_customer

  • 如果插件名称重复,可以通过定义别名的方式避免冲突,如L9插件冲突,可以通过

    Plugin 'ascenator/L9', {'name': 'newL9'}重新指定插件名称的方式解决冲突问题

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" 插件列表
" Vim 编辑器中的 Git 包装器插件,它可以让我们在 Vim 编辑器中完成 Git 操作
Plugin 'tpope/vim-fugitive'
" 用来提供一个导航目录的侧边栏
Plugin 'scrooloose/nerdtree'
" 在 NERDTree 中显示文件类型图标
Plugin 'ryanoasis/vim-devicons'
" 可以使 NERDTree 的 tab 更加友好些
Plugin 'jistr/vim-nerdtree-tabs'
" 可以在文件目录中看到 git 版本信息
Plugin 'Xuyuanp/nerdtree-git-plugin'
" 可以在文档中显示 Git 信息
Plugin 'airblade/vim-gitgutter'
" 查看当前代码文件中的变量和函数列表的插件,
" 可以切换和跳转到代码中对应的变量和函数的位置
" 大纲式导航, Go 需要 https://github.com/jstemmer/gotags 支持
Plugin 'preservim/tagbar'
" 自动补全括号的插件,包括小括号,中括号,以及花括号
Plugin 'jiangmiao/auto-pairs'
" Vim 状态栏插件,包括显示行号,列号,文件类型,文件名,以及 Git 状态
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" 有道词典在线翻译
Plugin 'ianva/vim-youdao-translater'
" 代码自动完成,安装完插件还需要额外配置才可以使用
Plugin 'ycm-core/YouCompleteMe'
" 代码缩进提示
Plugin 'Yggdroot/indentLine'
" 代码折叠
Plugin 'tmhedberg/SimpylFold'
" 下面两个插件要配合使用,可以自动生成代码块
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
" Markdown 插件,预览数学插件
Plugin 'iamcco/mathjax-support-for-mkdp'
" 在浏览器预览 Markdown 文档
Plugin 'iamcco/markdown-preview.vim'
" 高亮显示多余空格并一键去除
Plugin 'bronson/vim-trailing-whitespace'
" 状态栏插件,需要安装 powerline 字体
"Plugin 'powerline/powerline', {'rtp': 'powerline/bindings/vim'}
" 快速注释插件
" let g:NERDSpaceDelims=1 " 注释的时候自动加个空格
Plugin 'preservim/nerdcommenter'
" Ctrl + p,实现模糊匹配快速打开文件等功能
" Plugin 'kien/ctrlp.vim'
" 这个插件其实是上边 ctrlp 插件的一个补充,它主要是提升了文件查找的速度
" Plugin 'FelikZ/ctrlp-py-matcher'
" LeaderF 无论是从性能还是匹配精度上,都远远超越 ctrlp,
" 快速打开或定位某个 buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、
" 命令历史、文件中的某一行、Vim 的 help、marks 等
Plugin 'Yggdroot/LeaderF', { 'do': './install.sh' }

" Themes
Plugin 'morhetz/gruvbox'

" Go 相关
" go 主要插件
Plugin 'fatih/vim-go', { 'tag': '*' }
" go 中的代码追踪,输入 gd 就可以自动跳转
Plugin 'dgryski/vim-godef'

" Python 相关
Plugin 'vim-scripts/indentpython.vim'
Plugin 'tell-k/vim-autopep8'

" All of your Plugins must be added before the following line
call vundle#end()            " required

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

Vim 基本配置

编辑或新建 vimrc 文件 vim ~/.vimrc, 添加如下内容:

" ==============================================================================
" Vim 基本配置
" ==============================================================================
" 设置 vimrc 修改保存后立刻生效,不用再重新打开
" 建议配置完成后将这个关闭
autocmd BufWritePost $MYVIMRC source $MYVIMRC


" =============== YCM 配置 ===============
set nocompatible				" 关闭兼容模式 YCM 需求
filetype off                  	" 关闭文件类型侦测 YCM需求
filetype plugin indent on       " 启用自动补全 YCM需求

" =============== 主题 ===============
set background=dark    			" Setting dark mode
let g:gruvbox_italic=1 			" gruvbox 前置配置
colorscheme gruvbox


" =============== 外观设置 ===============
set number                      " 显示行号
set showtabline=0               " 隐藏顶部标签栏
set guioptions-=r               " 隐藏右侧滚动条
set guioptions-=L               " 隐藏左侧滚动条
set guioptions-=b               " 隐藏底部滚动条
set cursorline                  " 突出显示当前行
set cursorcolumn                " 突出显示当前列
set langmenu=zh_CN.UTF-8        " 显示中文菜单
set helplang=cn 				" 帮助文档中文显示
set transparency=10				" 设置窗口透明度


" =============== 编码风格设置 ===============
syntax enable					" 开启文件类型检测
syntax on
set encoding=utf-8				" 编码格式为UTF-8
set nu 							" 设置行号
set nowrap                      " 设置代码不折行"
set cursorline 					" 突出显示当前行
" set cursorcolumn				  " 突出显示当前列
set showmatch 					" 显示括号匹配
set tabstop=4 					" 设置Tab长度为4空格
set shiftwidth=4 				" 设置自动缩进长度为4空格
set backspace+=indent,eol,start " set backspace&可以对其重置
set autoindent 					" 继承前一行的缩进方式,适用于多行注释
set scrolloff=5                 " 距离顶部和底部5行
set laststatus=2                " 命令行为两行
let mapleader=";" 				" 定义快捷键的前缀,即<Leader>


" =============== 其它相关设置 ===============
set mouse=a                     " 启用鼠标
set selection=exclusive
set selectmode=mouse,key
set matchtime=5
set ignorecase                  " 搜索时大小写不敏感
set incsearch					" 开启实时搜索
set hlsearch                    " 高亮搜索项
set noexpandtab                 " 不允许扩展table
set whichwrap+=<,>,h,l
set autoread
" 退出插入模式指定类型的文件自动保存
"autocmd InsertLeave *.go,*.rs,*.sh,*.php,*.py,*.js,*.html,*.md write


" =============== 系统剪切板复制粘贴 ===============
" v 模式下复制内容到系统剪切板
vmap <Leader>c "+yy
" n 模式下复制一行到系统剪切板
nmap <Leader>c "+yy
" n 模式下粘贴系统剪切板的内容
nmap <Leader>v "+p


" =============== 屏幕切割 ===============
" 指定屏幕上可以进行分割布局的区域
set splitbelow               " 允许在下部分割布局
set splitright               " 允许在右侧分隔布局
" 组合快捷键:
nnoremap <C-J> <C-W><C-J>    " 组合快捷键:- Ctrl-j 切换到下方的分割窗口
nnoremap <C-K> <C-W><C-K>    " 组合快捷键:- Ctrl-k 切换到上方的分割窗口
nnoremap <C-L> <C-W><C-L>    " 组合快捷键:- Ctrl-l 切换到右侧的分割窗口
nnoremap <C-H> <C-W><C-H>    " 组合快捷键:- Ctrl-h 切换到左侧的分割窗口



" =============== Vundle 配置 ===============
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" 插件列表
" Vim 编辑器中的 Git 包装器插件,它可以让我们在 Vim 编辑器中完成 Git 操作
Plugin 'tpope/vim-fugitive'
" 用来提供一个导航目录的侧边栏
Plugin 'scrooloose/nerdtree'
" 在 NERDTree 中显示文件类型图标
Plugin 'ryanoasis/vim-devicons'
" 可以使 NERDTree 的 tab 更加友好些
Plugin 'jistr/vim-nerdtree-tabs'
" 可以在文件目录中看到 git 版本信息
Plugin 'Xuyuanp/nerdtree-git-plugin'
" 可以在文档中显示 Git 信息
Plugin 'airblade/vim-gitgutter'
" 查看当前代码文件中的变量和函数列表的插件,
" 可以切换和跳转到代码中对应的变量和函数的位置
" 大纲式导航, Go 需要 https://github.com/jstemmer/gotags 支持
Plugin 'preservim/tagbar'
" 自动补全括号的插件,包括小括号,中括号,以及花括号
Plugin 'jiangmiao/auto-pairs'
" Vim 状态栏插件,包括显示行号,列号,文件类型,文件名,以及 Git 状态
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" 有道词典在线翻译
Plugin 'ianva/vim-youdao-translater'
" 代码自动完成,安装完插件还需要额外配置才可以使用
Plugin 'ycm-core/YouCompleteMe'
" 代码缩进提示
Plugin 'Yggdroot/indentLine'
" 代码折叠
Plugin 'tmhedberg/SimpylFold'
" 下面两个插件要配合使用,可以自动生成代码块
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
" Markdown 插件,预览数学插件
Plugin 'iamcco/mathjax-support-for-mkdp'
" 在浏览器预览 Markdown 文档
Plugin 'iamcco/markdown-preview.vim'
" 高亮显示多余空格并一键去除
Plugin 'bronson/vim-trailing-whitespace'
" 状态栏插件,需要安装 powerline 字体
"Plugin 'powerline/powerline', {'rtp': 'powerline/bindings/vim'}
" 快速注释插件
" let g:NERDSpaceDelims=1 " 注释的时候自动加个空格
Plugin 'preservim/nerdcommenter'
" Ctrl + p,实现模糊匹配快速打开文件等功能
" Plugin 'kien/ctrlp.vim'
" 这个插件其实是上边 ctrlp 插件的一个补充,它主要是提升了文件查找的速度
" Plugin 'FelikZ/ctrlp-py-matcher'
" LeaderF 无论是从性能还是匹配精度上,都远远超越 ctrlp,
" 快速打开或定位某个 buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、
" 命令历史、文件中的某一行、Vim 的 help、marks 等
Plugin 'Yggdroot/LeaderF', { 'do': './install.sh' }

" Themes
Plugin 'morhetz/gruvbox'

" Go 相关
" go 主要插件
Plugin 'fatih/vim-go', { 'tag': '*' }
" go 中的代码追踪,输入 gd 就可以自动跳转
Plugin 'dgryski/vim-godef'

" Python 相关
Plugin 'vim-scripts/indentpython.vim'
Plugin 'tell-k/vim-autopep8'

" All of your Plugins must be added before the following line
call vundle#end()            " required


" =============== NERDTree 配置 ===============
" 使用F3键快速调出和隐藏它
map <F3> :NERDTreeToggle<CR>

let NERDTreeChDirMode=1
" 显示书签"
let NERDTreeShowBookmarks=1
" 设置忽略文件类型"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
" 窗口大小"
let NERDTreeWinSize=25
" 修改默认箭头
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
" How can I open a NERDTree automatically when vim starts up if no files were specified?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 打开vim时自动打开NERDTree
autocmd vimenter * NERDTree
" How can I open NERDTree automatically when vim starts up on opening a directory?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
" 关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1


" =============== vim-devicons 配置 ===============
"set encoding=UTF-8 " 已设置
"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1
"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1
"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1
"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1
" 解决 GUI 乱码问题
" 下载地址:https://github.com/ryanoasis/nerd-fonts/blob/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20Nerd%20Font%20Complete.otf
set guifont=DroidSansMono_Nerd_Font:h11


" =============== vim-nerdtree-tabs 配置 ===============
map <Leader>n <plug>NERDTreeTabsToggle<CR>


" =============== nerdtree-git-plugin 配置 ===============
" 开发的过程中,我们希望git信息直接在NERDTree中显示出来,
" 和Eclipse一样,修改的文件和增加的文件都给出相应的标注,
" 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }


" =============== tagbar 配置 ===============
nmap <F9> :TagbarToggle<CR>
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'
\ }


" =============== vim-airline 配置 ===============
" 去这里去选主题
" https://github.com/vim-airline/vim-airline-themes/tree/master/autoload/airline/themes
let g:airline_theme="luna"

" 这个是安装字体后 必须设置此项
let g:airline_powerline_fonts = 1

" 打开tabline功能,方便查看Buffer和切换,这个功能比较不错
" 我还省去了minibufexpl插件,因为我习惯在1个Tab下用多个buffer
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1

" 设置切换Buffer快捷键
nnoremap <C-N> :bn<CR>
nnoremap <C-P> :bp<CR>

" 关闭状态显示空白符号计数,这个对我用处不大
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'

" 在Gvim中我设置了英文用Hermit,中文使用 YaHei Mono
if has('win32')
    set guifont=Hermit:h13
    set guifontwide=Microsoft_YaHei_Mono:h12
endif


" =============== vim-youdao-translater 配置 ===============
vnoremap <silent> <C-T> :<C-u>Ydv<CR>
nnoremap <silent> <C-T> :<C-u>Ydc<CR>
noremap <leader>yd :<C-u>Yde<CR>


" =============== YouCompleteMe 配置 ===============
" 补全菜单的开启与关闭
set completeopt=longest,menu                    			" 让 Vim 的补全菜单行为与一般 IDE 一致(参考 VimTip1228)
let g:ycm_min_num_of_chars_for_completion=2             	" 从第 2 个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0                      			" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_autoclose_preview_window_after_completion=1       " 智能关闭自动补全窗口
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif    " 离开插入模式后自动关闭预览窗口

" 补全菜单中各项之间进行切换和选取:默认使用tab  s-tab进行上下切换,使用空格选取。可进行自定义设置:
" 解决与 ultisnips 冲突的快捷键
"let g:ycm_key_list_select_completion = ['<C-n>', '<space>']
"let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
"let g:SuperTabDefaultCompletionType = '<C-n>'

inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"    " 回车即选中补全菜单中的当前项

" 开启各种补全引擎
let g:ycm_collect_identifiers_from_tags_files=1             " 开启 YCM 基于标签引擎
let g:ycm_auto_trigger = 1                                  " 开启 YCM 基于标识符补全,默认为 1
let g:ycm_seed_identifiers_with_syntax=1                    " 开启 YCM 基于语法关键字补全
let g:ycm_complete_in_comments = 1                          " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1                           " 在字符串输入中也能补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0 " 注释和字符串中的文字也会被收入补全

" 重映射快捷键
"上下左右键的行为 会显示其他信息,inoremap由i 插入模式和noremap不重映射组成,只映射一层,不会映射到映射的映射
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>   " force recomile with syntastic
"nnoremap <leader>lo :lopen<CR>    					" open locationlist
"nnoremap <leader>lc :lclose<CR>    				" close locationlist
"inoremap <leader><leader> <C-x><C-o>

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
let g:ycm_confirm_extra_conf=0  									" 关闭加载.ycm_extra_conf.py确认提示


" =============== indentline 配置 ===============
" 支持任意ASCII码,也可以使用特殊字符:¦, ┆, or │ ,但只在utf-8编码下有效
let g:indentLine_char='¦'
" 使indentline生效
let g:indentLine_enabled = 1


" =============== SimpylFold 配置 ===============
" 必须手动输入za来折叠(和取消折叠)
set foldmethod=indent                " 根据每行的缩进开启折叠
set foldlevel=99
" 使用空格键会是更好的选择,所以在你的配置文件中加上这一行命令吧:
nnoremap <space> za
" 希望看到折叠代码的文档字符串?
let g:SimpylFold_docstring_preview=1


" =============== ultisnips 配置 ===============
g:UltiSnipsExpandTrigger               <tab>
g:UltiSnipsListSnippets                <c-tab>
g:UltiSnipsJumpForwardTrigger          <c-n>
g:UltiSnipsJumpBackwardTrigger         <c-p>
" 使用 UltiSnipsEdit 命令时垂直分割屏幕
let g:UltiSnipsEditSplit="vertical"


" =============== markdown-preview 配置 ===============
" 设置 chrome 浏览器的路径(或是启动 chrome(或其他现代浏览器)的命令)
" 如果设置了该参数, g:mkdp_browserfunc 将被忽略
let g:mkdp_path_to_chrome = "chrome"
" vim 回调函数, 参数为要打开的 url
let g:mkdp_browserfunc = 'MKDP_browserfunc_default'
" 设置为 1 可以在打开 markdown 文件的时候自动打开浏览器预览,只在打开markdown 文件的时候打开一次
let g:mkdp_auto_start = 1
" 设置为 1 在编辑 markdown 的时候检查预览窗口是否已经打开,否则自动打开预览窗口
let g:mkdp_auto_open = 1
" 在切换 buffer 的时候自动关闭预览窗口,设置为 0 则在切换 buffer 的时候不自动关闭预览窗口
let g:mkdp_auto_close = 1
" 设置为 1 则只有在保存文件,或退出插入模式的时候更新预览,默认为 0,实时更新预览
let g:mkdp_refresh_slow = 0
" 设置为 1 则所有文件都可以使用 MarkdownPreview 进行预览,默认只有 markdown
let g:mkdp_command_for_global = 0
" 设置为 1, 在使用的网络中的其他计算机也能访问预览页面
" 默认只监听本地(127.0.0.1),其他计算机不能访问
let g:mkdp_open_to_the_world = 0
nmap <silent> <F8> <Plug>MarkdownPreview        	" 普通模式
imap <silent> <F8> <Plug>MarkdownPreview        	" 插入模式
nmap <silent> <C-F8> <Plug>StopMarkdownPreview    	" 普通模式
imap <silent> <C-F8> <Plug>StopMarkdownPreview    	" 插入模式


" =============== vim-trailing-whitespace 配置 ===============
 map <leader><space> :FixWhitespace<cr>


" =============== NerdCommenter 配置 ===============
let g:NERDSpaceDelims=1			" 注释的时候自动加个空格
nmap <leader>cc   				" 加注释
nmap <leader>cu   				" 解开注释
nmap <leader>ca 				" 切换注释的样式:/*....*/和//..的切换
nmap <leader>c<space> 			" 加上/解开注释, 智能判断
nmap <leader>cy   				" 先复制, 再注解,p可以进行黏贴
nmap <leader>cs  				" '性感的'注释


" =============== LeaderF 配置 ===============
let g:Lf_WindowPosition = 'popup'
let g:Lf_PreviewInPopup = 1
let g:Lf_PopupPalette = {
    \  'light': {
    \      'Lf_hl_match': {
    \                'gui': 'NONE',
    \                'font': 'NONE',
    \                'guifg': 'NONE',
    \                'guibg': '#303136',
    \                'cterm': 'NONE',
    \                'ctermfg': 'NONE',
    \                'ctermbg': '236'
    \              },
    \      'Lf_hl_cursorline': {
    \                'gui': 'NONE',
    \                'font': 'NONE',
    \                'guifg': 'NONE',
    \                'guibg': '#303136',
    \                'cterm': 'NONE',
    \                'ctermfg': 'NONE',
    \                'ctermbg': '236'
    \              },
    \      },
    \  'dark': {
    \      }
    \  }
" Show icons, icons are shown by default
let g:Lf_ShowDevIcons = 1
" For GUI vim, the icon font can be specify like this, for example
let g:Lf_DevIconsFont = "DroidSansMono Nerd Font Mono"
" If needs
set ambiwidth=double
" don't show the help in normal mode
let g:Lf_HideHelp = 1
let g:Lf_UseCache = 0
let g:Lf_UseVersionControlTool = 0
let g:Lf_IgnoreCurrentBufferName = 1
" popup mode
let g:Lf_WindowPosition = 'popup'
let g:Lf_PreviewInPopup = 1
let g:Lf_StlSeparator = { 'left': "\ue0b0", 'right': "\ue0b2", 'font': "DejaVu Sans Mono for Powerline" }
let g:Lf_PreviewResult = {'Function': 0, 'BufTag': 0 }
let g:Lf_ShortcutF = "<leader>ff"
noremap <leader>fb :<C-U><C-R>=printf("Leaderf buffer %s", "")<CR><CR>
noremap <leader>fm :<C-U><C-R>=printf("Leaderf mru %s", "")<CR><CR>
noremap <leader>ft :<C-U><C-R>=printf("Leaderf bufTag %s", "")<CR><CR>
noremap <leader>fl :<C-U><C-R>=printf("Leaderf line %s", "")<CR><CR>
noremap <C-B> :<C-U><C-R>=printf("Leaderf! rg --current-buffer -e %s ", expand("<cword>"))<CR>
noremap <C-F> :<C-U><C-R>=printf("Leaderf! rg -e %s ", expand("<cword>"))<CR>
" search visually selected text literally
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
noremap go :<C-U>Leaderf! rg --recall<CR>
" should use `Leaderf gtags --update` first
let g:Lf_GtagsAutoGenerate = 0
let g:Lf_Gtagslabel = 'native-pygments'
noremap <leader>fr :<C-U><C-R>=printf("Leaderf! gtags -r %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fd :<C-U><C-R>=printf("Leaderf! gtags -d %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fo :<C-U><C-R>=printf("Leaderf! gtags --recall %s", "")<CR><CR>
noremap <leader>fn :<C-U><C-R>=printf("Leaderf gtags --next %s", "")<CR><CR>
noremap <leader>fp :<C-U><C-R>=printf("Leaderf gtags --previous %s", "")<CR><CR>


" =============== Vim-go 配置 ===============
let s:packages = [
      \ "github.com/nsf/gocode",
      \ "github.com/alecthomas/gometalinter",
      \ "golang.org/x/tools/cmd/goimports",
      \ "golang.org/x/tools/cmd/guru",
      \ "golang.org/x/tools/cmd/gorename",
      \ "github.com/golang/lint/golint",
      \ "github.com/rogpeppe/godef",
      \ "github.com/kisielk/errcheck",
      \ "github.com/jstemmer/gotags",
      \ "github.com/klauspost/asmfmt/cmd/asmfmt",
      \ "github.com/fatih/motion",
      \ "github.com/fatih/gomodifytags",
      \ "github.com/zmb3/gogetdoc",
      \ "github.com/josharian/impl",
      \ "github.com/dominikh/go-tools/cmd/keyify",
      \ ]


" =============== vim-godef 配置 ===============
let g:godef_split=3 														" 在新标签打开
let g:godef_same_file_in_same_window=1 										" 函数在同一个文件中时不需要打开新窗口
autocmd FileType go nnoremap <buffer> gd :call GodefUnderCursor()<cr>
autocmd FileType go nnoremap <buffer> <C-]> :call GodefUnderCursor()<cr> 	" 使用 C-] 代替 gd 进行跳转


" =============== vim-autopep8 配置 ===============
let g:autopep8_disable_show_diff=1
autocmd FileType python noremap <buffer> <F4> :call Autopep8()<CR>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497

YouCompleteMe 安装

因为我是多语言环境开发,经常会用到 Go,Python,Rust,PHP,JS,HTML等,所以 YCM 插件我要配置全语言安装。因此在配置 YCM 之前,我需要把相对应的语言环境部署完成。

# 安装多语言支持环境
brew install cmake go python rust nodejs openjdk
# 编辑 ~/.bash_profile 在文件末尾添加 Go 代理及环境变量
vim ~/.bash_profile

# Go 国内代理
export GO111MODULE=off
export GOPROXY=https://goproxy.cn
# Go 环境变量
export GOROOT=/usr/local/Cellar/go/1.17.8/libexec
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

# Python 环境变量
export PATH="/usr/local/Cellar/python@3.9/3.9.10/bin:$PATH"

#:wq 保存退出

# Vundle 安装,或通过 git 拉去代码手动安装
git clone https://github.com/ycm-core/YouCompleteMe.git ~/.vim/bundle
# --all 全语言支持安装。确保 xbuild, go, node and npm 添加到了 `PATH` 环境变量中:
cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
./install.py --all
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

配置:

" 补全菜单的开启与关闭
set completeopt=longest,menu                    			" 让 Vim 的补全菜单行为与一般 IDE 一致(参考 VimTip1228)
let g:ycm_min_num_of_chars_for_completion=2             	" 从第 2 个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0                      			" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_autoclose_preview_window_after_completion=1       " 智能关闭自动补全窗口
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif    " 离开插入模式后自动关闭预览窗口

" 补全菜单中各项之间进行切换和选取:默认使用tab  s-tab进行上下切换,使用空格选取。可进行自定义设置:
" 解决与 ultisnips 冲突的快捷键
"let g:ycm_key_list_select_completion = ['<C-n>', '<space>']
"let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
"let g:SuperTabDefaultCompletionType = '<C-n>'

inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"    " 回车即选中补全菜单中的当前项

" 开启各种补全引擎
let g:ycm_collect_identifiers_from_tags_files=1             " 开启 YCM 基于标签引擎
let g:ycm_auto_trigger = 1                                  " 开启 YCM 基于标识符补全,默认为 1
let g:ycm_seed_identifiers_with_syntax=1                    " 开启 YCM 基于语法关键字补全
let g:ycm_complete_in_comments = 1                          " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1                           " 在字符串输入中也能补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0 " 注释和字符串中的文字也会被收入补全

" 重映射快捷键
"上下左右键的行为 会显示其他信息,inoremap由i 插入模式和noremap不重映射组成,只映射一层,不会映射到映射的映射
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>   " force recomile with syntastic
"nnoremap <leader>lo :lopen<CR>    					" open locationlist
"nnoremap <leader>lc :lclose<CR>    				" close locationlist
"inoremap <leader><leader> <C-x><C-o>

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
let g:ycm_confirm_extra_conf=0  									" 关闭加载.ycm_extra_conf.py确认提示
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

以下内容可忽略不看


插件说明

vim-fugitive

vim-fugitive 可以让我们在 Vim 命令行中运行任何的 Git 相关命令。如::Git ...:G ...

命令说明
GblameGblame其实就是执行git blame命令,然后直接在vim中将git的输出结果与源代码一一对应起来。这样当你读团队代码的时候发现了一个坑,然后想知道是谁写的这个坑的时候,只需要:Gblame一下,结果立马呈现。
GbrowseGbrowse是当你想分享一段代码给别人的时候,可以直接选中你想分享的代码,可以是单行也可以是多行,然后执行:Gbrowse,它就会帮你在浏览器中打开github的地址,然后直接定位到你所选的代码行数。被选中的代码会被高亮显示。用这种方式分享代码可比截图或复制粘贴优雅多了。但是它只支持存放在github中的代码仓库,如果你的代码放在gitlab或其他仓库中,这个插件是无法打开的。
NerdTree

文件管理插件,可以侧边栏显示或关闭NERDTree,并对NERDTree进行相关操作。

配置:

"使用F3键快速调出和隐藏它
map <F3> :NERDTreeToggle<CR>

let NERDTreeChDirMode=1
"显示书签"
let NERDTreeShowBookmarks=1
"设置忽略文件类型"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
"窗口大小"
let NERDTreeWinSize=25
" 修改默认箭头
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
"How can I open a NERDTree automatically when vim starts up if no files were specified?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 打开vim时自动打开NERDTree
autocmd vimenter * NERDTree
"How can I open NERDTree automatically when vim starts up on opening a directory?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
" 关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

操作方法:

?: 快速帮助文档
o: 打开一个目录或者打开文件,创建的是buffer,也可以用来打开书签
go: 打开一个文件,但是光标仍然留在NERDTree,创建的是buffer
t: 打开一个文件,创建的是Tab,对书签同样生效
T: 打开一个文件,但是光标仍然留在NERDTree,创建的是Tab,对书签同样生效
i: 水平分割创建文件的窗口,创建的是buffer
gi: 水平分割创建文件的窗口,但是光标仍然留在NERDTree
s: 垂直分割创建文件的窗口,创建的是buffer
gs: 和gi,go类似
x: 收起当前打开的目录
X: 收起所有打开的目录
e: 以文件管理的方式打开选中的目录
D: 删除书签
P: 大写,跳转到当前根路径
p: 小写,跳转到光标所在的上一级路径
K: 跳转到第一个子路径
J: 跳转到最后一个子路径
<C-j><C-k>: 在同级目录和文件间移动,忽略子目录和子文件
C: 将根路径设置为光标所在的目录
u: 设置上级目录为根路径
U: 设置上级目录为跟路径,但是维持原来目录打开的状态
r: 刷新光标所在的目录
R: 刷新当前根路径
I: 显示或者不显示隐藏文件
f: 打开和关闭文件过滤器
q: 关闭NERDTree
A: 全屏显示NERDTree,或者关闭全屏
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
vim-devicons

在NerdTree中显示文件类型图标,这个插件不光支持NerdTree,还支持vim-airline、CtrlP、powerline等。

配置:

set encoding=UTF-8
"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1
"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1
"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1
"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
vim-nerdtree-tabs

共享 NERDTree 状态。在编辑当前文件,切换到 NERDTree,选中其它文件按 t 打开新标签,保留 NERDTree 状态。

配置:

map <Leader>n <plug>NERDTreeTabsToggle<CR>
  • 1

操作方法:

:NERDTreeTabsOpen switches NERDTree on for all tabs.
:NERDTreeTabsClose switches NERDTree off for all tabs.
:NERDTreeTabsToggle toggles NERDTree on/off for all tabs.
:NERDTreeTabsFind find currently opened file and select it
:NERDTreeMirrorOpen acts as :NERDTreeMirror, but smarter: When opening, it first tries to use an existing tree (i.e. previously closed in this tab or perform a mirror of another tab's tree). If all this fails, a new tree is created. It is recommended that you use this command instead of :NERDTreeMirror.
:NERDTreeMirrorToggle toggles NERDTree on/off in current tab, using the same behavior as :NERDTreeMirrorOpen.
:NERDTreeSteppedOpen focuses the NERDTree, opening one first if none is present.
:NERDTreeSteppedClose unfocuses the NERDTree, or closes/hides it if it was not focused.
:NERDTreeFocusToggle focus the NERDTree or create it if focus is on a file, unfocus NERDTree if focus is on NERDTree
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
nerdtree-git-plugin

能够在 NERDTree 文件栏中显示 Git 状态。

配置:

" 开发的过程中,我们希望git信息直接在NERDTree中显示出来, 
" 和Eclipse一样,修改的文件和增加的文件都给出相应的标注, 
" 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ "Modified"  : "",
    \ "Staged"    : "",s
    \ "Untracked" : "",
    \ "Renamed"   : "",
    \ "Unmerged"  : "",
    \ "Deleted"   : "",
    \ "Dirty"     : "",
    \ "Clean"     : "✔︎",
    \ "Unknown"   : "?"
    \ }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
vim-gitgutter

让 vim 对新增、删除、修改等操作时,都有颜色标记提醒。在sign列中显示git diff标记并进行阶段预览撤销块和部分块。

tagbar

类似SublimeText右侧属性列表展示效果。

配置:

nmap <F9> :TagbarToggle<CR>
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'
\ }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
auto-pairs

在输入或删除左括号时,能自动补上或删除右括号。

配置:

" 去这里去选主题
" https://github.com/vim-airline/vim-airline-themes/tree/master/autoload/airline/themes
let g:airline_theme="luna" 

" 这个是安装字体后 必须设置此项
let g:airline_powerline_fonts = 1   
 
" 打开tabline功能,方便查看Buffer和切换,这个功能比较不错
" 我还省去了minibufexpl插件,因为我习惯在1个Tab下用多个buffer
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1

" 设置切换Buffer快捷键
nnoremap <C-N> :bn<CR>
nnoremap <C-P> :bp<CR>

" 关闭状态显示空白符号计数,这个对我用处不大
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'

" 在Gvim中我设置了英文用Hermit, 中文使用 YaHei Mono
if has('win32')
    set guifont=Hermit:h13
    set guifontwide=Microsoft_YaHei_Mono:h12
endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
vim-youdao-translater

在普通模式下,按 ,y, 会翻译当前光标下的单词。

配置:

vnoremap <silent> <C-T> :<C-u>Ydv<CR>
nnoremap <silent> <C-T> :<C-u>Ydc<CR>
noremap <leader>yd :<C-u>Yde<CR>
  • 1
  • 2
  • 3

操作方法:

在 visual 模式下选中单词或语句,按 ,y,会翻译选择的单词或语句;
:Ydc 翻译当前光标下单词
:Ydv 翻译在 visual 模式下选中单词或语句
:Yde 手动输入单词
  • 1
  • 2
  • 3
  • 4
YouCompleteMe

一款非常强大的代码自动补全插件,用TAB键切换选择。

配置:

" 补全菜单的开启与关闭
set completeopt=longest,menu                    " 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
let g:ycm_min_num_of_chars_for_completion=2             " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0                      " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_autoclose_preview_window_after_completion=1       " 智能关闭自动补全窗口
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif         " 离开插入模式后自动关闭预览窗口

" 补全菜单中各项之间进行切换和选取:默认使用tab  s-tab进行上下切换,使用空格选取。可进行自定义设置:
"let g:ycm_key_list_select_completion=['<c-n>']
"let g:ycm_key_list_select_completion = ['<Down>']      " 通过上下键在补全菜单中进行切换
"let g:ycm_key_list_previous_completion=['<c-p>']
"let g:ycm_key_list_previous_completion = ['<Up>']
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"    " 回车即选中补全菜单中的当前项

" 开启各种补全引擎
let g:ycm_collect_identifiers_from_tags_files=1             " 开启 YCM 基于标签引擎
let g:ycm_auto_trigger = 1                                  " 开启 YCM 基于标识符补全,默认为1
let g:ycm_seed_identifiers_with_syntax=1                    " 开启 YCM 基于语法关键字补全
let g:ycm_complete_in_comments = 1                          " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1                           " 在字符串输入中也能补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0 " 注释和字符串中的文字也会被收入补全

" 重映射快捷键
"上下左右键的行为 会显示其他信息,inoremap由i 插入模式和noremap不重映射组成,只映射一层,不会映射到映射的映射
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>           " force recomile with syntastic
"nnoremap <leader>lo :lopen<CR>    "open locationlist
"nnoremap <leader>lc :lclose<CR>    "close locationlist
"inoremap <leader><leader> <C-x><C-o>

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
let g:ycm_confirm_extra_conf=0  " 关闭加载.ycm_extra_conf.py确认提示
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
indentline

代码缩进提示插件。

配置:

" 支持任意ASCII码,也可以使用特殊字符:¦, ┆, or │ ,但只在utf-8编码下有效
let g:indentLine_char='¦'
" 使indentline生效
let g:indentLine_enabled = 1
  • 1
  • 2
  • 3
  • 4
SimpylFold

代码快速折叠插件。

配置:

" 必须手动输入za来折叠(和取消折叠)
set foldmethod=indent                " 根据每行的缩进开启折叠
set foldlevel=99
" 使用空格键会是更好的选择,所以在你的配置文件中加上这一行命令吧:
nnoremap <space> za
" 希望看到折叠代码的文档字符串?
let g:SimpylFold_docstring_preview=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
ultisnips

Ultisnips 插件安装分两部分,一个是 ultisnips 插件本身,另外一个是代码片段仓库。一般来说把默认的代码片段仓库下载下来按需修改后上传到自己的 github 即可。

配置:

g:UltiSnipsExpandTrigger               <tab>
g:UltiSnipsListSnippets                <c-tab>
g:UltiSnipsJumpForwardTrigger          <c-n>
g:UltiSnipsJumpBackwardTrigger         <c-p>
" 使用 UltiSnipsEdit 命令时垂直分割屏幕
let g:UltiSnipsEditSplit="vertical"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
vim-snippets

自己的代码片段仓库,按需修改维护。配合 ultisnips 插件才能生效。可以下载 https://github.com/honza/vim-snippets这个 vim-snippets 库,按需修改后上传到自己的 GitHub 中。

mathjax-support-for-mkdp

Markdown 数学公式预览插件。

markdown-preview.vim

Markdown 浏览器预览插件。

配置:

" 设置 chrome 浏览器的路径(或是启动 chrome(或其他现代浏览器)的命令)
" 如果设置了该参数, g:mkdp_browserfunc 将被忽略
let g:mkdp_path_to_chrome = "chrome"
" vim 回调函数, 参数为要打开的 url
let g:mkdp_browserfunc = 'MKDP_browserfunc_default'
" 设置为 1 可以在打开 markdown 文件的时候自动打开浏览器预览,只在打开markdown 文件的时候打开一次
let g:mkdp_auto_start = 1
" 设置为 1 在编辑 markdown 的时候检查预览窗口是否已经打开,否则自动打开预览窗口
let g:mkdp_auto_open = 1
" 在切换 buffer 的时候自动关闭预览窗口,设置为 0 则在切换 buffer 的时候不自动关闭预览窗口
let g:mkdp_auto_close = 1
" 设置为 1 则只有在保存文件,或退出插入模式的时候更新预览,默认为 0,实时更新预览
let g:mkdp_refresh_slow = 0
" 设置为 1 则所有文件都可以使用 MarkdownPreview 进行预览,默认只有 markdown
let g:mkdp_command_for_global = 0
" 设置为 1, 在使用的网络中的其他计算机也能访问预览页面
" 默认只监听本地(127.0.0.1),其他计算机不能访问
let g:mkdp_open_to_the_world = 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

操作方法:

nmap <silent> <F8> <Plug>MarkdownPreview        	" 普通模式
imap <silent> <F8> <Plug>MarkdownPreview        	" 插入模式
nmap <silent> <C-F8> <Plug>StopMarkdownPreview    " 普通模式
imap <silent> <C-F8> <Plug>StopMarkdownPreview    " 插入模式
  • 1
  • 2
  • 3
  • 4
vim-trailing-whitespace

会将行尾空格标红,并可以一键去掉行尾的空格。

配置:

 map <leader><space> :FixWhitespace<cr>
  • 1
nerdcommenter

根据文件类型实现不同风格的快速注释功能。

LeaderF

模糊搜索快速打开目录下的文件,模糊搜索当前文件的函数及字符。

配置:

let g:Lf_WindowPosition = 'popup'
let g:Lf_PreviewInPopup = 1
let g:Lf_PopupPalette = {
    \  'light': {
    \      'Lf_hl_match': {
    \                'gui': 'NONE',
    \                'font': 'NONE',
    \                'guifg': 'NONE',
    \                'guibg': '#303136',
    \                'cterm': 'NONE',
    \                'ctermfg': 'NONE',
    \                'ctermbg': '236'
    \              },
    \      'Lf_hl_cursorline': {
    \                'gui': 'NONE',
    \                'font': 'NONE',
    \                'guifg': 'NONE',
    \                'guibg': '#303136',
    \                'cterm': 'NONE',
    \                'ctermfg': 'NONE',
    \                'ctermbg': '236'
    \              },
    \      },
    \  'dark': {
    \      }
    \  }
" Show icons, icons are shown by default
let g:Lf_ShowDevIcons = 1
" For GUI vim, the icon font can be specify like this, for example
let g:Lf_DevIconsFont = "DroidSansMono Nerd Font Mono"
" If needs
set ambiwidth=double
" don't show the help in normal mode
let g:Lf_HideHelp = 1
let g:Lf_UseCache = 0
let g:Lf_UseVersionControlTool = 0
let g:Lf_IgnoreCurrentBufferName = 1
" popup mode
let g:Lf_WindowPosition = 'popup'
let g:Lf_PreviewInPopup = 1
let g:Lf_StlSeparator = { 'left': "\ue0b0", 'right': "\ue0b2", 'font': "DejaVu Sans Mono for Powerline" }
let g:Lf_PreviewResult = {'Function': 0, 'BufTag': 0 }

let g:Lf_ShortcutF = "<leader>ff"
noremap <leader>fb :<C-U><C-R>=printf("Leaderf buffer %s", "")<CR><CR>
noremap <leader>fm :<C-U><C-R>=printf("Leaderf mru %s", "")<CR><CR>
noremap <leader>ft :<C-U><C-R>=printf("Leaderf bufTag %s", "")<CR><CR>
noremap <leader>fl :<C-U><C-R>=printf("Leaderf line %s", "")<CR><CR>

noremap <C-B> :<C-U><C-R>=printf("Leaderf! rg --current-buffer -e %s ", expand("<cword>"))<CR>
noremap <C-F> :<C-U><C-R>=printf("Leaderf! rg -e %s ", expand("<cword>"))<CR>
" search visually selected text literally
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
noremap go :<C-U>Leaderf! rg --recall<CR>

" should use `Leaderf gtags --update` first
let g:Lf_GtagsAutoGenerate = 0
let g:Lf_Gtagslabel = 'native-pygments'
noremap <leader>fr :<C-U><C-R>=printf("Leaderf! gtags -r %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fd :<C-U><C-R>=printf("Leaderf! gtags -d %s --auto-jump", expand("<cword>"))<CR><CR>
noremap <leader>fo :<C-U><C-R>=printf("Leaderf! gtags --recall %s", "")<CR><CR>
noremap <leader>fn :<C-U><C-R>=printf("Leaderf gtags --next %s", "")<CR><CR>
noremap <leader>fp :<C-U><C-R>=printf("Leaderf gtags --previous %s", "")<CR><CR>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
vim-go

Vim-go 是当前使用最为广泛的用于搭建 Golang 开发环境的 Vim 插件。

配置:

let s:packages = [
      \ "github.com/nsf/gocode",
      \ "github.com/alecthomas/gometalinter",
      \ "golang.org/x/tools/cmd/goimports",
      \ "golang.org/x/tools/cmd/guru",
      \ "golang.org/x/tools/cmd/gorename",
      \ "github.com/golang/lint/golint",
      \ "github.com/rogpeppe/godef",
      \ "github.com/kisielk/errcheck",
      \ "github.com/jstemmer/gotags",
      \ "github.com/klauspost/asmfmt/cmd/asmfmt",
      \ "github.com/fatih/motion",
      \ "github.com/fatih/gomodifytags",
      \ "github.com/zmb3/gogetdoc",
      \ "github.com/josharian/impl",
      \ "github.com/dominikh/go-tools/cmd/keyify",
      \ ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
vim-godef

这个插件为 Vim 增加了godef 支持。Roger 解析 Go 的 godef 工具返回代码并返回符号定义的位置。

配置:

let g:godef_split=3 	" 在新标签打开
let g:godef_same_file_in_same_window=1 	" 函数在同一个文件中时不需要打开新窗口
autocmd FileType go nnoremap <buffer> gd :call GodefUnderCursor()<cr>
autocmd FileType go nnoremap <buffer> <C-]> :call GodefUnderCursor()<cr> " 使用 C-] 代替 gd 进行跳转
  • 1
  • 2
  • 3
  • 4
indentpython.vim

Python 代码自动缩进作用,在某些情况下(比如函数定义有多行的时候),并不总是会达到你想要的缩进效果,尤其是在符合 PEP8 标准方面。我们可以利用 indentpython.vim 插件来解决这个问题。

配置:

" 标红空白字符,该功能可以使用 vim-trailing-whitespace 插件代替
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
  • 1
  • 2
vim-autopep8

一款自动格式化工具,安装配置 vim-autopep8 插件之后在 vim 的 Normal 模式输入 :Autopep8 或按 F4 就可以自动依照 pep8 的标准自动格式化代码。

配置:

let g:autopep8_disable_show_diff=1
autocmd FileType python noremap <buffer> <F4> :call Autopep8()<CR>
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/518752
推荐阅读
相关标签
  

闽ICP备14008679号