陪你度过漫长岁月

技术总结《配置Vim》

本文主要介绍我自己的Vim配置(Ubuntu 16.04,主要用于写Python和C++)以及管理方案(如何将Vim配置快速部署到新机子上)。接下来首先介绍一款强大的Vim配置,然后介绍如何在该Vim配置的基础上添加更多插件,最后给出一个Vim配置管理方案

The ultimate Vim configuration

核心框架

The ultimate Vim configuration是一份强大的Vim配置,它使用了Pathogen作为插件管理器(关于Vim插件管理器的发展可以看这里),安装插件只需要把插件放到对应目录就好了(一般来说就是git clone)。按照指引安装完后,这份Vim配置的核心目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.vim_runtime
# default plugins & configurations
├── sources_forked
├── sources_non_forked
├── vimrcs
│ ├── basic.vim # general configurations
│ └── plugins_config.vim # plugin configurations
# custom plugins & configurations
├── my_plugins
├── my_configs.vim # may not exist
# installer
├── install_awesome_vimrc.sh

从以上目录结构可见,核心框架包含以下三部分

  • 自带插件
    • sources_forkedsources_non_forked中包含了自带的插件;
    • vimrcs中的
      • basic.vim包含插件无关的通用配置(e.g., 一个tab等于4个空格);
      • plugins_config.vim中包含了针对自带插件的配置。
  • 自定义插件
    • my_plugins是安装自定义插件的地方;
    • my_configs.vim则用于编写针对自定义插件的配置和插件无关的通用配置(值得注意的是,因为my_configs.vim在最后的~/.vimrc中是最后一个被引用的,因此假如它的配置与其他.vim有冲突的话,以my_configs.vim中的配置为准)。
  • 安装脚本
    • install_awesome_vimrc.sh包含修改~/.vimrc的代码。

使用方法

本节主要介绍自带插件的使用方法

  • 打开/关闭文件
    • ,nn:在Vim中打开目录树;
    • ,f:查看最近使用过的文件;
    • :W:以sudo权限保存文件;
    • gf:当光标在一个路径上时,打开该文件。
  • 编辑
    • gcc:注释选中的行;
    • $123 / $q / $e:为选中的内容添加不同的括号/引号;
    • Ctrl+s / Ctrl+x / Ctrl+p:多光标(同时选中多个相同的内容,重构的时候很有用);
      • 要实现这个功能,需要进行一些修改,参考这里。简单来说就是要在~/.bashrc中加上stty -ixon
    • + / _:在逻辑意义上扩展/收缩选中的内容(e.g., 变量,函数,类);
      • 要实现这个功能,需要再安装一些插件来告诉Vim怎么在逻辑意义上划分内容。以Python为例(参考这里),大概分为以下两步:
        1. vim-textobj-uservim-textobj-python下载到my_plugins
        2. my_configs.vim中加上以下代码。
1
2
3
4
5
6
call expand_region#custom_text_objects('python', {
\ 'af' :1,
\ 'if' :1,
\ 'ac' :1,
\ 'ic' :1,
\ })

更多插件

本节介绍如何在The ultimate Vim configuration的基础上,安装更多的插件,使Vim用起来更顺手。

  • SimpylFold
    • 功能:代码折叠插件,方便以不同层级去阅读代码;
    • 安装:下载到my_plugins文件夹中;
    • 使用:za / zm / zr
  • YouCompleteMe
    • 功能:代码补全插件,同时还提供跳转功能(变量/函数的定义),能够大幅提高阅读代码的速度。
    • 安装:跟指引,用install.py来装;
    • 使用(下面仅针对Python,C++还要进一步配置来告诉这个插件编译的flag是什么,参考这里
      • 自动补全装好就能用;
      • 代码跳转需要设置一下快捷键,参考这里。简单来说,就是将nnoremap <leader>jd :YcmCompleter GoTo<CR>加到my_configs.vim中,之后就可以通过,jd进行跳转了(跳转后可以用Ctrl+o返回)。

管理方案

用Vim的一个很大的motivation是通用性,也就是说在不同的机子上都能够用同一套顺手的IDE,这就对快速部署提出了要求。

下面介绍我自己的方案,大体来说分为以下步骤:

  1. The ultimate Vim configurationfork到自己的Github上;
  2. 通过git submodule add xxx来安装插件;
    • 之所以不用git clone是预防嵌套Git repository无法git push的问题。
  3. 每次更新完插件/配置后git push到自己的Github;
  4. 在一台新的机子上,用git clone --recursive从自己的Github上下载配置文件
    • --recursive表明要把submodule都下载下来
  5. 运行install_awesome_vimrc.sh安装Vim配置

References