x/配置/vimrc

77 lines
5.1 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>
" 如果目录是最后一个窗口则自动退出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! \<C-W>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 = "<leader>ff" " 打开LeaderF搜索界面
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>
" 按字面意思搜索视觉选择的文本
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
noremap go :<C-U>Leaderf! rg --recall<CR>