Larry’s Blog

Dotfiles::Vim 0.

| Comments

关于如何让生活变美好,每个人都有自己的努力方式。而我的努力方式之一就是不断完善自己开发过程中使用的工具,关注我 GitHub 的同学能发现我几乎每天都会更新我的 dotfiles. 最近觉得自己的配置已经接近我理想中的完美状态,所以决定写些文章记录一下,但愿会帮到一些初学者,或者能够收获更多的建议帮助我的 dotfiles 变得更加顺手与高效率,让我的生活更加美好一些。:-)

Brief

  • 安装有 Ruby 支持的 Vim

  • 配色方案及基本配置

  • Command-T.vim 插件:文件间快速切换的插件

0. 安装有 Ruby 支持的 Vim

首先,为什么要安装有 Ruby 支持的 Vim 呢?因为本文要介绍的 Command-T 插件依赖于 Ruby。如果你看到这里觉得还要再去重新安装一遍 Vim 觉得很麻烦的话,不妨先跳到后面介绍 Command-T 的部分。然后你就会发现花一点时间来做这件事是很值得的了。

使用 Ubuntu 的同学,可以 sudo apt-get install vim-nox. 「This package contains a version of vim compiled with support for scripting with Perl, Python, Ruby, and TCL but no GUI.」

使用 Mac 的同学,macvim 本身就是自带 Ruby 支持的。不过如果希望在 Terminal 中使用 Vim, 可以通过brew工具来安装。brew install https://raw.github.com/Homebrew/homebrew-dupes/master/vim.rb.

不过无论是在 Ubuntu 还是在 Mac 上,我更喜欢下载源码包自己来编译一份。

1
2
3
4
5
6
7
cd ~/Downloads/
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
tar jxvf vim-7.3.tar.bz2
cd vim73/
./configure –with-features=huge --enable-rubyinterp
make
sudo make install

在公司服务器上没有 root 权限的同学(比如在百度的同学),可以在 ./configure 时加上 --prefix= 选项,然后将自己设定的路径放在环境变量的最前,把 export PATH=~/foo/bar/:$PATH 放在 ~/.bashrc 里。

测试 Vim 是否有 Ruby 支持很简单,打开 Vim, 然后 :ruby 1. 如果没有 Ruby 支持,会提示Sorry, the command is not available in this version之类的,没有错误提示证明你的第0步已经完成了。

下文中任何 ~/.vimrc 中的内容你都不必一步一步手动修改,可以直接去我的 dotfiles 中取。我的 dotfiles 安装更是十分简单,就是一键操作,当然前提是你有安装 Ruby + Rake/Thor…

1. 配色方案及基本配置

关于 Vim 的配色方案,每个人都有不同的喜好。我一直都在使用 wombat256.vim这款 @leemars 推荐的 colorscheme。效果大概是这样的。

安装方法很简单,到这里下载 wombat256mod.vim, 然后将它放到 ~/.vim/colors/ 中。最后,在 ~/.vimrc 中添加以下两行:

1
2
set t_Co=256
colorscheme wombat256mod

下面简单列些基本配置,具体做什么用的都写在后面的注释里了。

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
syntax on                      " 语法高亮
set nocompatible               " 禁用 vi 兼容模式
set nu                         " 显示行号
set ruler                      " 会在状态栏中显示光标当前所在行及列
set nobackup                   " 禁止 vim 自动生成当前编辑文件的备份文件, 就是我们经常看到的以~结尾的文件
set fdm=marker                 " 设置 vim 折叠方式
set bs=2                       " 这个选项可以解决 backspace 失效的问题
set backspace=indent,eol,start " 使得 backspace 能删除任何符号
set diffopt+=iwhite            " vimdiff 时忽略空格改变

set tabstop=2                  " 一个Tab字符占2个空格的位置
set shiftwidth=2               " 每层缩进的空格数
set expandtab                  " 将输入的Tab自动展开成空格,使用Python的同学必设配置
set softtabstop=2              " 当开启了 expandtab 时,每次退格删除两个空格,避免针对Tab还要多次输入退格键
set autoindent                 " 自动缩进,即为新行自动添加与当前行同等的缩进
set cindent                    " 开启类似C程序的缩进

filetype plugin indent on      " 打开文件类型检测

set smartcase                  " 智能匹配搜索结果
set hlsearch                   " 高亮搜索结果

set laststatus=2               " 永远显示状态栏
" 设置状态栏显示格式,可参见上图。左侧显示文件路径,右侧显示文件类型、编码、及当前光标所在行列
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %l:%c\ \(%p%%\)%)

imap <c-c> <ESC>               " 编辑模式下,ctrl-c 可当 ESC 使用
imap jj <ESC>                  " 编辑模式下,jj 可当 ESC 使用,可以避免左手摆动较大幅度去按 ESC 键,提高编辑速度
map <C-k> <C-w><Up>            " ctrl-k 切换到上边窗口
map <C-j> <C-w><Down>          " ctrl-j 切换到下边窗口
map <C-l> <C-w><Right>         " ctrl-l 切换到右边窗口
map <C-h> <C-w><Left>          " ctrl-h 切换到左边窗口

基本的配置就这些。下面隆重介绍性感无比的 Command-T 插件。

2. Command-T.vim

0). 简介

在 Brief 介绍这款插件能够快速的在文件中跳转。怎么个跳转法呢?

通常情况下,如果我在编辑 a.rb 文件,这时想打开 b.rb 文件。大致有以下几种选择:

  1. vsp/sp 打开 b.rb, 但是如果 b.rb 不在当前路径,那我就不得不输入它的路径。

  2. 通过某种 FileBrowser 插件(比如 NERDTree, 以后会介绍)找到 b.rb 来打开,如果项目目录及文件过多,这种切换方式也很不灵活。

  3. 关掉 vim, 然后 vim ~/code/repo/foo/bar/b.rb打开。 ……

有了 Command-T, 一切都会非常简单……

1). 安装

command-t 官网 下载最新的 release 版本,或者到 vim.org 下载。下载到的文件是比较特殊的 .vba 格式,安装方式很简单。

首先vim command-t-1.4.vba, 然后在 vim 中 :so %。另外,command-t 还需要C扩展,所以需要进行下面的操作:

1
2
3
cd ~/.vim/ruby/command-t/
ruby extconf.rb
make

OK. 一切顺利的话,command-t 应该已经安装好了。

2). 配置

首先,需要配置 vim 的 leader 键。leader 键可以简单的理解为 vim 中快捷键的前缀符号,就像我们习惯的拷贝粘贴操作前缀符号为 Ctrl 一样。大多数人都会选择 , 作为 leader.

1
let mapleader=","

然后对 command-t 进行最简单的配置。

1
map <leader>f :CommandTFlush<cr>\|:CommandT<cr>

这样当我在 vim 的执行模式下,按下 ,f 就会打开一个文件列表,显示当前项目的所有文件。(当前项目即为你打开 vim 的目录) 如图所示。

打开后,输入字符就会缩小匹配的文件范围。command-t 支持文件名模糊匹配,比如 b.rb 在的路径为 app/controllers/reports/b.rb, 输入 appbrb 也能够找到。使用 Ctrl-j/Ctrl-k 可在列表中的文件进行切换,回车即可打开文件。

那么如果我想在我的 split window 下打开搜索的文件呢?也很简单,如果想垂直分屏的话,Ctrl-v 即可。但是水平分屏的快捷键是 Ctrl-s, 多少让使用putty/SecureCRT软件的同学有些尴尬(我最开始使用 command-t 还是在百度时每天使用 SecureCRT 远程登录服务器开发,所以碰到了此问题,Ubuntu/Mac 下的同学可以忽略此设置,直接使用 Ctrl-s 水平分屏即可),可以更改水平分屏的快捷键为 Ctrl-f.

1
let g:CommandTAcceptSelectionSplitMap=['<C-f>']

OK, 下面一个问题是,如果我想忽略所有某些文件时应该怎么设置呢?比如 .log 文件,C/C++ 项目编译产生的 .o 文件,图片文件等等等等。设置一下 wildignore 即可。

1
set wildignore+=*.o,*.log,*.obj,.git,*.jpg,*.png,*.gif,vendor/bundle,vendor/cache,tmp,public/download

最后一个问题,如果我想搜索指定文件夹下的文件呢?

1
2
3
4
5
6
7
8
9
10
11
cnoremap %% <C-R>=expand('%:h').'/'<cr>
map <leader>F :CommandTFlush<cr>\|:CommandT %%<cr>
map <leader>gv :CommandTFlush<cr>\|:CommandT app/views<cr>
map <leader>gc :CommandTFlush<cr>\|:CommandT app/controllers<cr>
map <leader>gm :CommandTFlush<cr>\|:CommandT app/models<cr>
map <leader>gh :CommandTFlush<cr>\|:CommandT app/helpers<cr>
map <leader>gl :CommandTFlush<cr>\|:CommandT lib<cr>
map <leader>gp :CommandTFlush<cr>\|:CommandT public<cr>
map <leader>gs :CommandTFlush<cr>\|:CommandT spec<cr>
map <leader>gg :topleft :vsplit Gemfile<cr>
map <leader>gr :topleft :vsplit config/routes.rb<cr>

通过以上配置,,F就是搜索当前文件所在目录下的文件(注意与,f的区别),,gm就是搜索app/models目录下的文件,,gg就是在垂直分屏窗口打开 Gemfile 文件,,gr就是在垂直分屏窗口打开 config/routes.rb 文件。你可以根据自己的项目需要来定义常用的文件搜索目录,我的这套是针对 Rails 的。

更多的配置可以参考我的 vimrc 中的 Command-T.vim 部分。

最后,IDE sucks, Vim Rocks!

下期预告: 史上最性感的自动补全插件 neocomplcache 以及史上最好用的终端工具 tmux.

附上 neocomplcache + tmux 截图。

Comments