VIM插件及使用技巧

插件

插件管理使用Vundle

通用

  • NerdTree

    shift + i可切换显示隐藏文件

  • ack

    可进行全局搜索
    https://github.com/mileszs/ack.vim

  • YouCompleteMe

    https://github.com/ycm-core/YouCompleteMe

    mac下如何安装:

    1. 安装macvim

      参照https://stackoverflow.com/questions/21012203/how-can-i-install-macvim-on-os-x

       $ brew update
       $ brew install vim && brew install macvim
       # 这样执行vim的时候会运行macvim
       $ brew link macvim
      
    2. vim安装

      我采用vundle管理插件, 在.vimrc下添加:

       Plugin 'Valloric/YouCompleteMe'
      

      执行PluginInstall

    3. 将相关语言的补全编译进去

      例如我要支持go语言的补全, 则要执行:

       # 进入包
       $ cd ~/.vim/bundle/YouCompleteMe
       # 编译go
       $ ./install.py --go-completer
      

      如果是其他语言, 参照文档, 例如要支持c语言, 还需要安装cmake, 运行install.py时加不同的参数

  • comment
    注释
    https://github.com/scrooloose/nerdcommenter

  • ale和pylint

    这两个包可以检查代码规范 在~/.vimrc里加上: Plugin 'dense-analysis/ale' PluginInstall即可安装
    pylint用pip安装, ale即可自动调用pylint
    还需要安装pylint-venv, 这样就能在虚拟环境里面检查
    ~/.pylintrc可以自定义配置, 详细配置参照https://github.com/PyCQA/pylint/blob/master/pylintrc, 例如:

      [MASTER]
    
      # Python code to execute, usually for sys.path manipulation such as
      # pygtk.require().
      init-hook=
          try: import pylint_venv
          except ImportError: pass
          else: pylint_venv.inithook()
        
      [FORMAT]
        
      # Maximum number of characters on a single line.
      max-line-length=120
        
      [MESSAGES CONTROL]
      disable=R0201,R0914,R0915,E1101,C0115,R0903
        
      [DESIGN]
        
      # Maximum number of arguments for function / method
      max-args=15
    

    也可以不用pylint, 用别的代码检查fixer, 比如black, ale支持很多, 具体参照ale文档

Python

  • vim-sort

    可对python import进行排序
    https://github.com/fisadev/vim-isort
    使用过程中如果提示No isort python module detected, you should install it,是因为pip和vim对应的版本不一样,参照这里解决:
    https://github.com/fisadev/vim-isort/issues/14

  • 语法检查

    推荐python-modesyntastics, 不推荐flake8, 各种兼容版本问题

    安装参照文档

    配置参照这里:

      ""syntax checker
      " python-mode和syntastics. pathogen安装
      let g:pymode_python = 'python3'
      let g:pymode_options_max_line_length=120
      let g:pymode_lint_cwindow = 0
      execute pathogen#infect()
      syntax on
      let python_highlight_all=1
      set statusline+=%#warningmsg#
      set statusline+=%{SyntasticStatuslineFlag()}
      set statusline+=%*
      let g:syntastic_always_populate_loc_list = 0
      let g:syntastic_auto_loc_list = 0
      let g:syntastic_check_on_open = 0
      let g:syntastic_check_on_wq = 1
      let g:syntastic_python_checkers = ['pylint']
    

    我们看到上面配置的最后一句, python检查用到呃是pylint, pylint需要安装, 安装之后我们可以像配置vim一样修改配置, 创建~/.pylintrc文件, 内容示例, 详情参照https://gist.github.com/sblask/7302860:

      [FORMAT]
      # Maximum number of characters on a single line.
      max-line-length=120
    
      [MESSAGES CONTROL]
      # 取消检查no self use
      disable=R0201
    

tips

  • 取消搜索高亮 :nohl
  • 将已有tab转换为空格 :retab
  • 复制或者剪切时, 计算行数?
    6yy6dd是复制或者剪切6行 如果行数较多, 我们不太能第一时间就肉眼看到有多少行, 用行号来相减? 太麻烦了吧! 我们用下面的命令来解决:
    1. 在正常模式下, 在要复制的第一行mk标记
    2. 移动到要复制的最后一行
    3. 按下y'k(y, 单引号, k)标记
    4. 在复制的目的地按p即复制过去了 同样的, d'k是剪切
  • 将当前窗口移动到新tab页
    Ctrl-W Shift-T
  • 替换
    • 替换称换行
      :%s/\ /\r/g 将空格全部替换成换行
  • 在新tab页打开buffer文件(已打开的文件)
    • ls列举出当前buffer列表和编号
    • :tab sb <buffer编号>
      或者tab sb之后tab键来选择