set nocompatible " 去除 vi 一致性 set number " 打开行数查看 set cursorline " 光标所在的当前行高亮。 set linebreak " 只有遇到指定的符号(比如空格、连词号和其他标点符号),才发生折行。 set laststatus=2 " 是否显示状态栏。0 表示不显示,1 表示只在多窗口时显示,2 表示显示。 set ruler " 在状态栏显示光标的当前位置(位于哪一行哪一列)。 set undofile " 保留撤销历史。 set undodir=~/.vim/.undo " 设置操作历史文件的保存位置。 set encoding=utf-8 " 使用 utf-8 编码 set autoindent " 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致。 set smartindent " 智能缩进 set tabstop=4 " 按下 Tab 键时,Vim 显示的空格数。 filetype indent on " 开启文件类型检查,并且载入与该类型对应的缩进规则。 filetype on " 开启文件类型检测 filetype plugin indent on " 开启文件类型插件检测 syntax on " 开启语法高亮 set showmode " 在底部显示,当前处于命令模式还是插入模式。 set showcmd " 命令模式下,在底部显示,当前键入的指令。比如,键入的指令是 2y3d,那么底部就会显示 2y3,当键入 d 的时候,操作完成,显示消失。 set mouse= " 支持使用鼠标(但这样会导致无法复制!) let g:airline#extensions#tabline#enabled = 1 " 设置开启 tab 样式 let g:airline#extensions#tabline#formatter = 'jsformatter' " 设置默认 tab 栏样式 let g:airline_theme='angr' " 选择配色 let g:NERDSpaceDelims = 1 " 默认情况下,在注释分隔符后添加空格 let g:NERDCompactSexyComs = 1 " 使用紧凑的语法来美化多行注释 let g:NERDTrimTrailingWhitespace = 1 " 启用在取消注释时修剪尾部空白的功能 let g:NERDToggleCheckAllLines = 1 " 启用 NERDCommenterToggle 以检查所有选定行是否已注释 " 树状目录(preservim/nerdtree): 在vim侧栏启动目录 autocmd StdinReadPre * let s:std_in=1 " 使用目录启动时自动启动侧栏 autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') | \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif " 在没有文件参数的情况下启动 autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif " 定义树状目录的快捷键 nnoremap n :NERDTreeFocus nnoremap :NERDTree nnoremap :NERDTreeToggle nnoremap :NERDTreeFind " 如果目录是最后一个窗口则自动退出vim autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " 防止缓冲区目录冲突 autocmd BufEnter * if winnr() == winnr('h') && bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif let g:NERDTreeFileLines = 1 " 显示文件行 " 标签生成器(ludovicchabant/vim-gutentags): 在特定目录下自动调用ctags生成标签 set statusline+=%{gutentags#statusline()} " 在状态行中打印字符串“tag”,当Gutengs在后台生成内容时 let g:gutentags_project_root = ['.git', '.svn', 'Makefile'] " 工程根目录标识(打开包含如下文件或目录是激活Gutentag)。 let g:gutentags_ctags_tagfile = '.tags' " 生成数据文件名称。 let g:gutentags_cache_dir = expand('~/.config/xunmi/tag') " 指定缓存根目录,ctags保存在该目录下。 "Ctags配置参数。 let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q'] let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI'] let g:gutentags_ctags_extra_args += ['--c-kinds=+px'] " 模糊搜索(Yggdroot/LeaderF) let g:Lf_HideHelp = 1 " 在正常模式下不显示帮助 let g:Lf_UseCache = 0 " 不使用缓存, 避免更新文件后搜索异常 let g:Lf_UseVersionControlTool = 1 " 使用版本控制工具(如Git)来获取文件的状态信息 let g:Lf_IgnoreCurrentBufferName = 1 " 忽略当前的缓冲区名称 let g:Lf_WindowPosition = 'popup' " 窗口模式 let g:Lf_ShortcutF = "ff" " 打开LeaderF搜索界面 noremap fb :=printf("Leaderf buffer %s", "") noremap fm :=printf("Leaderf mru %s", "") noremap ft :=printf("Leaderf bufTag %s", "") noremap fl :=printf("Leaderf line %s", "") noremap :=printf("Leaderf! rg --current-buffer -e %s ", expand("")) noremap :=printf("Leaderf! rg -e %s ", expand("")) " 按字面意思搜索视觉选择的文本 xnoremap gf :=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual()) noremap go :Leaderf! rg --recall " 标签栏 nnoremap :TagbarToggle