vim configuration

Posted by chunyang on February 28, 2015
TAGS: #vim

作为在linux下的程序猿,如果不知道如何使用vim,那其实不算是一个真正的程序猿(前提是不在图形化界面的环境中)。但是vim是那种学习曲线比较陡峭的工具,只有你真正的长时间去化时间学习vim的命令你才可以真正的去了解,让vim称为神的编辑器。

这篇文章主要是想总结一下自己在vim使用过程中的一些基本的方法,一来是作为自己的借鉴;而来是也为让其它需要的人得到帮助。

" normal configurations
set nu " show line number
set tabstop=4 shifwidth=4
set expandtab
set autoindent
filetype plugin indent on
syntax on
set hlsearch " highlight search
" set backup extension and directory
set backupext=.bak
set backupdir=~/Backup
iabbrev @@ wxxx@xxx.com " quick insert eamil info

上面只是做一些基本的设置,接下来介绍几款比较实用的插件,这些插件让vim真正的强大起来。

supertab

supertab是一款自动补全的vim插件,其实不用这个插件我们通过使用c-n, c-p也可以自动补全,但是这个插件提高了效率。但是该插件有个缺点,即当我们真正需要输入tab时,却不可以,除非我们在前面是空格或者一行其实位置处。这里有一个方法:c-v, tab, c-v告诉vim接下来的输入直接作为输入,不需要做任何解析。

air-line

这个插件和vim-powerline很相似,但是作者说这个插件是更加轻量级,而且不依赖其它。这个插件的功能是让vim的状态栏的功能更加丰富。它可以显示文件名字,显示函数名字,存在一些警告信息等。具体的内容大家可以在github上找到。

indent-line

当程序变得庞大起来时,往往对齐成了问题,特别是对于python这种对于对齐要求十分严格的脚本。indent line是让对齐可视化。开发插件的作者利用了vim的新特性(vim7.3版本及以上)。对于平常的一些需求,我们可以通过如下命令来实现:

set list

这样我们tab就会显示成\^I,我们可以通过更加细化的设置,将tab设置成我们想要的符号:

set listchars=tab:>,trail:-

tab会被显示成>-,尾部多余的空白字符会显示成-

tagbar

tagbar和taglist功能很类似,不过功能更强大。它可以将程序文件中的函数声明、类、宏定义等归纳出来,并且显示成侧边栏。我们可以使用c-w,右,来选择这个窗口,然后快速在函数声明之间切换。这里有一些小的快捷方式:

nmap <F8> :TagbarToggle<CR>
  • gd 局部查找变量
  • [[ ]] 在函数定义体之间内移动
  • gf 在include位置打开对应的文件名字

ctags

vim的高版本是自带ctags,我们只需要在对应目录下使用如下命令:

ctags -R ./

然后在.vimrc配置文件中使用如下方式:

set tags=./tags; 

注意刚才的分号后面是由空格的,这个是让vim在当前目录中找不到ctags文件时,向上递归查找。

Nerdtree

方便打开其它目录的文件。

nmap <F5> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1 " Show hidden file

新的切分窗口打开

移动鼠标选中文件,按下 s 按键即可

开启拼写检查

set spell spelllang=en_us
hi clear SpellBad
hi SpellBad cterm=underline
hi clear SpellRare
hi SpellRare cterm=underline
hi clear SpellCap
hi SpellCap cterm=underline
hi clear SpellLocal
hi SpellLocal cterm=underline

使用 Plug 来管理

首先要先安装 vim-plug 这个插件,然后就可以使用它来安装其它插件

call plug#begin('~/.vim/plugged')

Plug 'preservim/nerdcommenter'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'prabirshrestha/vim-lsp'

call plug#end()

执行 :PlugInstall 会安装相关的插件

Python 语法检测,自动跳转

Plug 'neoclide/coc.nvim', {'branch': 'release'}

:CocInstall coc-pyright

" for vim-lsp
if executable('pyls')
    " pip install python-language-server
    au User lsp_setup call lsp#register_server({
        \ 'name': 'pyls',
        \ 'cmd': {server_info->['pyls']},
        \ 'allowlist': ['python'],
        \ })
endif

function! s:on_lsp_buffer_enabled() abort
    setlocal omnifunc=lsp#complete
    setlocal signcolumn=yes
    if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
    nmap <buffer> gd <plug>(lsp-definition)
    nmap <buffer> gs <plug>(lsp-document-symbol-search)
    nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
    nmap <buffer> gr <plug>(lsp-references)
    nmap <buffer> gi <plug>(lsp-implementation)
    nmap <buffer> gt <plug>(lsp-type-definition)
    nmap <buffer> <leader>rn <plug>(lsp-rename)
    nmap <buffer> [g <plug>(lsp-previous-diagnostic)
    nmap <buffer> ]g <plug>(lsp-next-diagnostic)
    nmap <buffer> K <plug>(lsp-hover)
    inoremap <buffer> <expr><c-f> lsp#scroll(+4)
    inoremap <buffer> <expr><c-d> lsp#scroll(-4)

    let g:lsp_format_sync_timeout = 1000
    autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
    " refer to doc to add more commands
endfunction

augroup lsp_install
    au!
    " call s:on_lsp_buffer_enabled only for languages that has the server registered.
    autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END

本文完