vim之.vimrc文件设置

作者 by adtxl / 2021-11-01 / 暂无评论 / 498 个足迹

个人vimrc文件配置:

" 设置编辑文件的内码是UTF-8
set enc=utf-8
" 设置vim不需要和vi兼容(一般默认,以防万一)
set nocompatible
" 导入 Vim 的示例配置(这会打开一些有用的选项,如语法加亮、搜索加亮、命令历史、记住上次的文件位置,等等)
source $VIMRUNTIME/vimrc_example.vim

" 不产生备份文件
set nobackup
" 保留跨会话撤销编辑的能力
set undodir=~/.vim/undodir

" 停止搜索高亮的键映射
nnoremap <silent> <F2>      :nohlsearch<CR>
inoremap <silent> <F2> <C-O>:nohlsearch<CR>


" 默认显示行号
set nu

if !isdirectory(&undodir)
  call mkdir(&undodir, 'p', 0700)
endif

" 设置缩进
au FileType c,cpp,objc  setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=4 cinoptions=:0,g0,(0,w1
au FileType json        setlocal expandtab shiftwidth=2 softtabstop=2
au FileType vim         setlocal expandtab shiftwidth=2 softtabstop=2

" 加入记录系统头文件的标签文件和上层的 tags 文件
set tags=./tags;,tags,/usr/local/etc/systags

" 启用 man 插件
source $VIMRUNTIME/ftplugin/man.vim
set keywordprg=:Man

" 鼠标支持

if has('mouse')
  if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
  " 此时鼠标拖拽就会在 Vim 里使用可视模式选择内容(只能在 Vim 里使用)
    set mouse=a
  else
    set mouse=nvi
  endif
endif

" 直接展示菜单
let do_syntax_sel_menu = 1
let do_no_lazyload_menus = 1

" 如果是8.0.0210前的版本,无需再手动设置paste
if !has('patch-8.0.210')
  " 进入插入模式时启用括号粘贴模式
  let &t_SI .= "\<Esc>[?2004h"
  " 退出插入模式时停用括号粘贴模式
  let &t_EI .= "\<Esc>[?2004l"
  " 见到 <Esc>[200~ 就调用 XTermPasteBegin
  inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

  function! XTermPasteBegin()
    " 设置使用 <Esc>[201~ 关闭粘贴模式
    set pastetoggle=<Esc>[201~
    " 开启粘贴模式
    set paste
    return ""
  endfunction
endif

" 映射切换窗口快捷键
nnoremap <C-Tab>   <C-W>w
inoremap <C-Tab>   <C-O><C-W>w
nnoremap <C-S-Tab> <C-W>W
inoremap <C-S-Tab> <C-O><C-W>W

" 用于 quickfix、标签和文件跳转的键映射
nmap <F11>   :cn<CR>
nmap <F12>   :cp<CR>
nmap <M-F11> :copen<CR>
nmap <M-F12> :cclose<CR>
nmap <C-F11> :tn<CR>
nmap <C-F12> :tp<CR>
nmap <S-F11> :n<CR>
nmap <S-F12> :prev<CR>

" 和 asyncrun 一起用的异步 make 命令
command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>

" 异步运行命令时打开 quickfix 窗口,高度为 10 行
let g:asyncrun_open = 10

" 映射按键来快速启停构建
nnoremap <F5>  :if g:asyncrun_status != 'running'<bar>
                 \if &modifiable<bar>
                   \update<bar>
                 \endif<bar>
                 \exec 'Make'<bar>
               \else<bar>
                 \AsyncStop<bar>
               \endif<CR>


" minpac包管理器
if exists('g:loaded_minpac')
  " Minpac is loaded.
  call minpac#init()
  call minpac#add('k-takata/minpac', {'type': 'opt'})

  " Other plugins
  call minpac#add('tpope/vim-eunuch')
  call minpac#add('preservim/nerdtree')
  call minpac#add('majutsushi/tagbar')
  call minpac#add('skywind3000/asyncrun.vim')
endif

if has('eval')
  " Minpac commands
  command! PackUpdate packadd minpac | source $MYVIMRC | call minpac#update('', {'do': 'call minpac#status()'})
  command! PackClean  packadd minpac | source $MYVIMRC | call minpac#clean()
  command! PackStatus packadd minpac | source $MYVIMRC | call minpac#status()
endif

独特见解