vim折腾记

原因

公司机器自从安装了Mac Yosemite后,就略卡了,虽然配置挺OK。平时都用强大的phpstorm,这玩意确实非常棒。但是无奈卡,尝试着先换MacVim来写代码。

插件管理

使用Vim必不可少的是从海量的Vim插件中寻找适合自己的,那么这个时候对vim插件进行管理的插件就非常有必要了。

关于这3个插件管理器的区别可以参考这里:what are the differences between Vundle and NeoBundle?

按照发展的时间排序:pathogen -> vundle -> neobundle
当然了vundle和neobundle都在迅速的发展中,目前使用vundle来管理插件,相当的方便,具体的安装方法参数 上面的github地址,说的都非常清楚了。

插件搞起来

set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'kien/ctrlp.vim'
Plugin 'Raimondi/delimitMate'
Plugin 'scrooloose/nerdtree'
Plugin 'bling/vim-airline'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'rizzatti/dash.vim'
Plugin 'tomtom/tcomment_vim'
Plugin 'Yggdroot/indentLine'
Plugin 'jisaacks/GitGutter'
Plugin 'scrooloose/syntastic'
Plugin 'Valloric/YouCompleteMe'
Plugin 'majutsushi/tagbar'
Bundle 'ervandew/supertab'
Plugin 'git://repo.or.cz/vcscommand'
Plugin 'rking/ag.vim'
call vundle#end() " required
filetype plugin indent on " required

其他配置

【VIM通用设置】
"主题设置
colorscheme molokai
let g:molokai_original = 1
set guifont=DejaVu\ Sans\ Mono\ for\ Powerline:h12
"设置行号
set nonu
"
""自动缩进
set autoindent
"设置历史命令条数
set history=50
"
""总在 Vim 窗口的右下角显示当前光标位置
set ruler
"tab长度
set ts=4
set sw=4
set expandtab "开启Tab转空格的操作
set tabstop=4 "Tab表示成4个空格
"高亮行
set cursorline
"去掉左右边的滚动条
set guioptions-=L
set guioptions-=r
set showtabline=0
"实时搜索
set incsearch
set list lcs=tab:\|\
" .vimrc 自动编辑完载入
autocmd! bufwritepost .{,g}vimrc source % " 自动刷新
" 方便切换 splits
nmap <C-Tab> <C-w><C-w>
nmap <C-h> <C-w>h
nmap <C-l> <C-w>l
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
" 取消自动换行
set nowrap
" 自动保存相关设置
au FocusLost * silent! up " vim 窗口失去焦点时保存
au BufLeave * silent! up " vim buffer 切换时自动保存
set scrolloff=5 "光标碰到第五行、倒数第五行时就上下卷屏
set autoread "如果正在编辑的文件在打开后又有其他程序更新,则自动加载
"【插件】YouCompleteMe 配置
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
"【插件】UltiSnips 配置
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
"【插件】NERDTree 配置
nmap <silent> <C-B> :NERDTreeToggle<CR>
"【插件】ctags 配置
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let g:tagbar_ctags_bin = "/usr/local/bin/ctags"
"【插件】airline 配置
let g:airline#extensions#whitespace#enabled = 0
let g:airline_powerline_fonts = 1
let g:airline_theme = "molokai"
set encoding=utf-8
set laststatus=2
set encoding=utf-8
"【插件】tagbar 配置
let g:tagbar_autofocus = 1
let g:tagbar_autoclose = 1
nmap <silent> <C-N> :TagbarToggle<CR>
" 【插件】supertab 配置
let g:SuperTabDefaultCompletionType="context"
" 【插件】Ag 配置
" 配置Ag搜索忽略的目录和文件
let g:agprg='ag -S --nocolor --nogroup --column --ignore sitedata --ignore image --ignore "tags"'
" 【插件】CtrlP 配置
" 不限制CtrlP搜索文件的个数,默认为8000个好像
let g:ctrlp_max_files=0

几个插件的简单使用及注意点

  1. YouCompleteMe,在用vundle安装完成的时候,需要进入
    ~/.vim/bundle/YouCompleteMe/

目录,执行一下 install.sh,编译另外的一些依赖

  1. Ack, 需要另外安装ack这个代码搜索工具,可以用ag.vim替代
    brew install ack

安装,完成后,重启一下Vim,使用

:Ack 关键词

来搜索代码,注意要切换到特定的工作目录再进行搜索,不然文件太多,会很慢的

  1. UltiSnips,这个在安装完成后,可以使用
    :UltiSnipsEdit!

来查看所有的snipet文件的位置,然后打开编辑即可

  1. vcscommand, 这个插件整合了SVN的各种操作,需要注意的一点是,VCSLog查看日志的时候,显示出来的日志无法正确显示中文,
    解决方案如下:
    vim ~/.bash_profile

添加

export LANG=zh_CN.UTF-8

重新载入

source ~/.bash_profile

  1. marks,这个插件因为代码不在github上面,而是vimball的插件格式,所以需要另外安装

  2. tagbar,此插件需要安装ctags库,使用

    brew install ctags

安装,记得在vimrc里面绑定其下面的执行路径,具体路径请使用which ctags查看一下即可

let Tlist_Ctags_Cmd="/usr/local/bin/ctags"

安装完成后,记得到代码路径下执行

ctags -R

来生成ctags的文件,然后就可以在代码里面随心的使用:ctrl+[ 和 ctrl+o 方便的跳转到代码的定义了

  1. ag 代码搜索工具,与Ack一样,传说速度更快
    let g:agprg='ag -S --nocolor --nogroup --column --ignore sitedata --ignore image --ignore "tags"'

使用ignore参数,可以让ag.vim忽略特定目录和文件

不同文件使用不同的缩进

这个需求非常的常见,比如php使用Tab进行缩进,而html和js文件使用2个空格来进行缩进。

  1. 开启文件类型监听

    filetype plugin indent on
  2. 建立不同文件类型对应的配置文件

    mkdir -p ~/.vim/after/ftplugin/

首先创建存放目录,注意目录名字是ftplugin,表示file type plugin,不要看成ftp lugin 哈,
然后在目录下面创建,针对php, html, js 的配置文件

after
└── ftplugin
├── html.vim
├── javascript.vim
└── php.vim
1 directory, 3 files

示例配置文件如下所示

html.vim, 设置为缩进为2个空格且自动把Tab转换成两个空格

setlocal expandtab
setlocal shiftwidth=2
setlocal tabstop=2

php.vim, 设置为缩进Tab且自动,禁止把Tag转换成空格

setlocal noexpandtab
setlocal shiftwidth=2
setlocal tabstop=2

其它语言的配置也类似。