Vim一个最突出的特点就是它强大的可定制性。但过度的自由也为初学者带来了一大困扰,配置太多太杂,网上的各种配置文章良莠不齐,从茫茫的配置项中找出适合自己的配置方案,完全不知道如何下手。 由于不同人有不同的习惯,因此并没有一套通用的适合所有人的配置方案,这里我仅以我常用的通用配置(2018/08/06
) 为例进行一个讲解。 Vim的通用配置指的是不依赖插件的一些配置,这些配置一般可被IDE等的Vim插件所支持,因此我称之为通用配置。Vim的通用配置主要分为选项,快捷键和自动命令三部分。
选项 选项是对Vim的特定行为的效果进行控制的配置,通常使用set
指令进行配置。
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 set nocompatibleset number set relativenumberset ignorecaseset incsearchset hlsearchset mouse=a set hiddensyntax on set expandtabset softtabstop=4 set shiftwidth =4 set tabstop=4 set autoindentset cino=(0 ,W4filetype plugin indent on set colorcolumn=81 set fo +=mB set wrapset autoreadset ttimeoutlen=0 set encoding=utf-8 set fileencodings=utf-8 ,ucs-bom,GB2312,big5set cursorlineset wildmenuset wildmode=fullset noshowmodeset foldenable set foldmethod=indent set foldcolumn=0 setlocal foldlevel =1 set foldlevelstart=99 set backspace=eol,start,indent set listchars=tab :▸\ ,eol:¬set guifont=FuraCode\ Nerd\ Font\ Mono\ 10 if !isdirectory($HOME."/.undo_history" ) call mkdir ($HOME."/.undo_history" , "" , 0700 ) endif set undodir=~/.undo_history/set undofile
快捷键 无论在哪个编辑器或IDE中,熟练掌握快捷键都是提高效率一个必不可少的途径。在Vim中,我么可以将自己常用的命令映射为快捷键,提高效率。此类配置项一般以包括map
的命令开通,如noremap
,vnoremap
,cnoremap
等。
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 let mapleader = ';' let maplocalleader = ',' inoremap jk <Esc> noremap H ^noremap L $nnoremap ' ` nnoremap ` ' noremap + ;noremap - ,cnoremap <expr> %% getcmdtype () == ':' ? expand ('%:h' ).'/' : '%%' nnoremap & :&&<CR> xnoremap & :&&<CR> cnoremap <C-j> <Down> cnoremap <C-k> <Up> cnoremap <C-h> <Left> cnoremap <C-l> <Right> cnoremap <C-a> <Home> cnoremap <C-e> <End> nnoremap <C-p> vnoremap <C-p> vnoremap <C-y> nnoremap <Leader> y yiwnnoremap <leader> q :cclose <cr> nnoremap <expr> j v:count ? 'j' : 'gj' nnoremap <expr> k v:count ? 'k' : 'gk' nnoremap <silent> <Space> @=(foldlevel ('.' )?'za' :"\<Space>" )<CR> nnoremap <silent> <Backspace> :nohl<CR> cmap w!! w !sudo tee >/dev/null %cmap v= vertical resize +5 <cr> cmap v- vertical resize -5 <cr> cmap s= resize +5 <cr> cmap s- resize -5 <cr>
自动命令 自动命令是Vim中特有的,指的是在某些事件发生后自动执行的命令,一般以autocmd
开始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 autocmd BufReadPost * \ if line ("'\"" ) > 1 && line ("'\"" ) <= line ("$" ) | \ exe "normal! g`\"" | \ endif command! -nargs=+ Cppman silent! call system ("tmux split-window cppman " . expand (<q-args> )) autocmd FileType cpp nnoremap <silent> <buffer> K <Esc> :Cppman <cword> <CR> autocmd BufNewFile *.cpp,*.c ,*.h,*.hpp 0 r ~/.licenseautocmd BufNewFile,BufFilePre,BufRead *.qss set filetype =cssautocmd FileType vim set foldmethod=marker
小结 Vim的选项很多,我们需要根据自己的习惯和使用场景做出调整。快捷键和自动命令有着极高的自由度,我们在日常使用过程中需要随时留意哪些操作是可以通过配置快捷键和自动命令进行改善的,这样我们使用Vim才会越来越顺手,玩出自己的精彩