/vimrc

vim config

Primary LanguageVim Script

k-vim

VERSION: 8.0

LAST_UPDATE_TIME: 2014-10-02

本次更新: 更为强大的tab操作/更全面的自动补全

详细 更新日志

目标

Just a Better Vim Config. Keep it Simple.

0. 保持简单
1. 结构划分良好, 中文注释
2. 高度可配置修改
3. 一键安装少折腾
4. 更加符合直觉的键位操作

适用人群:

有一定基础的 vimer

PS: 服务器端不带插件k-vim的简化版本(curl直接设置vimrc即可), 有需要可以直接安装vim-for-server

k-vim使用说明

  1. 最好能熟练使用原生vim各类操作之后, 再来使用插件扩展

  2. fork一份(需要的话顺带star关注更新), 然后参照安装步骤进行安装, 可以根据自身习惯进行自定义修改

  3. 目前主要关注后端python, golang以及将要入坑的ruby, 偶尔写写js/jquery, 但是主体配置基本是通用的. 可以根据语言体系自己加配置(vimrc.bundles)

  4. 插件不是越多越好, 二八定律

  5. 欢迎大家推荐好用的资源, 不限于插件/主题/ppt/文章/视频等, 也希望大家能一起完善这份配置

疑问解决步骤

你遇到的问题,一定别人也遇到了

  1. 首先明确问题, 可以用二分法排查出问题的插件或配置语句
  2. 确认按照文档步骤执行的操作
  3. 如果是对应插件的问题, 请到插件github主页查看文档及issues
  4. google大法
  5. 提issues

后面图片有点多,展示有点慢,截得不是很专业,耐心看完:)



截图

solarized主题

solarized

molokai主题

molokai



安装步骤

  1. clone到本地,配置到linux个人目录(如果是从linux_config过来的,不需要clone)

     git clone https://github.com/wklken/k-vim.git
    
  2. 安装依赖包

     2.1 系统依赖
    
     # ubuntu
     sudo apt-get install ctags
     sudo apt-get install build-essential cmake python-dev  #编译YCM自动补全插件依赖
    
     # centos
     sudo yum install python-devel.x86_64
     sudo yum groupinstall 'Development Tools'
    
     # mac
     #brew install ctags
    
    
     2.2 使用Python
     sudo pip install pyflakes
     sudo pip install pylint
     sudo pip install pep8
    
     2.3 使用Javascript
     # 安装jshint和jslint,用于javascript语法检查
     # 需要nodejs支持,各个系统安装见文档 https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
    
     #ubuntu
     sudo apt-get install nodejs npm
     sudo npm install -g jslint
     sudo npm install jshint -g
    
     #mac
     brew install node
     npm install jshint -g
     npm install jslint -g
    
  3. 安装

     3.1 进入目录
     # 注意原先装过的童鞋, 重装时,不要到~/.vim下执行(这是软连接指向k-vim真是目录),必须到k-vim原生目录执行
    
     cd k-vim/
    
     3.2 执行安装
     # 会进入安装插件的列表,目前30+个插件,一一安装是从github clone的,完全取决于网速, 之后会自动编译 YCM, 编译失败的话需要手动编译, 见第4步
    
     sh -x install.sh
    
  4. 可能遇到的问题:

    • 编译自动补全YouCompleteMe(耗时略长, 但绝对值得)

        cd ~/.vim/bundle/YouCompleteMe
        ./install.sh --clang-completer
      

    有任何问题见YCM文档

    这个插件需要Vim 7.3.584,所以,如果vim版本太低,需要编译安装

    • 相对行号

    vimrc中配置,如果不习惯,可以去掉,相关参考

    • 配置主题

    到vimrc中修改colortheme,可以使用molokai(用惯sublimetext2的童鞋很熟悉)

    默认配置的是solarized dark主题

    想要修改终端配色为solarized可以参考 这里

    • Go语言不能自动补全/tagbar

    依赖 gotagsgocode, 需要安装配置好, 并-> $GOPATH -> $PATH, which命令能正确返回

     which gotags
     which gocode
    
    • Javascript不能自动补全 vimrc.bundlesmarijnh/tern_for_vim默认没有打开, 需要打开安装插件, 需要依赖nodejs&npm, 具体见文档 tern_for_vim

    • Macvim

        安装最新mac vim ,可以正常打开
      
        需要sudo
        mv /usr/bin/vim /usr/bin/vim.bk
        ln -s /usr/local/bin/mvim /usr/bin/vim
      
        在.bashrc/.bash_profile中加入
            alias vi='mvim -v'
            alias vim='mvim -v'
      
    • 其他问题: 键位/展现等存在问题, 使用二分法缩小范围, 排查到问题根源, 修改配置

  5. 安装/卸载/更新插件:

    安装新插件

     1. vimrc.bundles中配置对应插件
         Bundle 'xxx/xxxx'
     2. 命令行模式,执行:
         :BundleInstall
    

    更新插件(注意如果YCM更新, 可能需要重编译, 否则自动补全可能失效)

     命令行模式,执行:
     :BundleUpdate
    

    删除插件

     1. vimrc.bundles中注释或删除对应插件bundle配置行(行首加一个双引号)
     2.命令行模式,执行: (会物理上删除插件文件)
         :BundleClean
    


自定义快捷键

注意, 以下 `,` 代表<leader>
1. 可以自己修改vimrc中配置,决定是否开启鼠标

set mouse-=a           " 鼠标暂不启用, 键盘党....
set mouse=a            " 开启鼠标

2. 退出vim后,内容显示在终端屏幕, 可以用于查看和复制, 如果不需要可以关掉
   好处:误删什么的,如果以前屏幕打开,可以找回....惨痛的经历

set t_ti= t_te=

3. 可以自己修改vimrc决定是否使用方向键进行上下左右移动,默认打开,可以注解
hjkl  上下左右

map <Left> <Nop>
map <Right> <Nop>
map <Up> <Nop>
map <Down> <Nop>

4. 上排F功能键

F1 废弃这个键,防止调出系统帮助
F2 set nu/nonu,行号开关,用于鼠标复制代码用
F3 set list/nolist,显示可打印字符开关
F4 set wrap/nowrap,换行开关
F5 set paste/nopaste,粘贴模式paste_mode开关,用于有格式的代码粘贴
F6 syntax on/off,语法开关,关闭语法可以加快大文件的展示

F9 tagbar
F10 运行当前python

5. 分屏移动

ctrl + j/k/h/l   进行上下左右窗口跳转,不需要ctrl+w+jkhl

6. 搜索
<space> 空格,进入搜索状态
/       同上
,/      去除匹配高亮

(交换了#/* 号键功能, 更符合直觉, 其实是离左手更近)
#       正向查找光标下的词
*       反向查找光标下的词

优化搜索保证结果在屏幕中间

7. tab操作(重点推)
ctrl+t 新建一个tab

(hjkl)
,th    切第1个tab
,tl    切最后一个tab
,tj    下一个tab
,tk    前一个tab

,tn    下一个tab(next)
,tp    前一个tab(previous)

,td    关闭tab
,te    tabedit
,tm    tabm

,1     切第1个tab
,2     切第2个tab
...
,9     切第9个tab
,0     切最后一个tab

,tt 最近使用两个tab之间切换
(可修改配置位 ctrl+o,  但是ctrl+o/i为系统光标相关快捷键, 故不采用)

8. buffer操作(不建议, 建议使用ctrlspace插件来操作)
[b    前一个buffer
]b    后一个buffer
<-    前一个buffer
->    后一个buffer


9. 按键修改
Y         =y$   复制到行尾
U         =Ctrl-r
,sa       select all,全选
,v        选中段落
kj        代替<Esc>,不用到角落去按esc了

,q     :q,退出vim

ctrl+n    相对/绝对行号切换
<enter>   normal模式下回车选中当前项


更多优化:
    1. j/k 对于换行展示移动更友好
    2. HL 修改成 ^$, 更方便在同行移动
    3. ; 修改成 : ,一键进入命令行模式,不需要按shift
    4. 命令行模式 ctrl+a/e 到开始结尾
    5. <和> 代码缩进后自动再次选中, 方便多次缩进, esc退出
    6. 对py文件,保存自动去行尾空白,打开自动加行首代码
    7. 交换#/*号功能,#号为正向查找,*反向
    8. `w!!`强制保存, 即使readonly
    9. 去掉错误输入提示
    10. 交换`和', '能跳转到准确行列位置
    11. python/ruby 等, 保存时自动去行尾空白
    12. 统一所有分屏打开的操作位v/s[nerdtree/ctrlspace] (特殊ctrlp ctrl+v/x)

废弃:
t         新起一行,下面,不进入插入模式
T         新起一行,上面


插件部分

基础

  1. ####插件管理 gmarik/vundle

    必装,用于管理所有插件 命令行模式下管理命令:

     :BundleInstall     install
     :BundleInstall!    update
     :BundleClean       remove plugin not in list
    
  2. ####多语言语法检查 scrooloose/syntastic

    建议安装,静态语法及风格检查,支持多种语言

    修改了下标记一列的背景色,原有的背景色在solarized下太难看了…..

    演示

    syntastic

自动补全

  1. ####代码自动补全 Valloric/YouCompleteMe

    必装,强烈推荐(YCM是我目前用到的最好的自动补全插件)

    这个插件包含了以下几个插件功能,所以不需要装下面:

     clang_complete
     AutoComplPop
     Supertab
     neocomplcache
     jedi(对python的补全)
    

    敲两个字符后弹出提示, 支持各语言标准库补全

    快捷键:

     ctrl+j 选择下一个补全
     ctrl+k 选择上一个补全
    
     ctrl+n 选择下一个补全
     ctrl+p 选择上一个补全
     回车    选中
     ,jd  跳转到函数定义, 分屏打开一个buffer(非常有用!!!!!!!!!)
     ,gd  跳到声明位置, 仅 filetypes: c, cpp, objc, objcpp, python 有效(比较少用)
    

    演示(官方截图)

    ycm

  2. ####代码片段快速插入 SirVer/ultisnips +honza/vim-snippets

    必装,效率杀手锏,快速插入自定义的代码片段, 高效必备

    YCM 自动补全会弹提示

     ctrl+j 上一个
     ctrl+k 下一个
    
     ctrl+n 上一个
     ctrl+p 下一个
     <tab>  使用片段 -> expand to codes
     ,us    编辑对应文件类型的代码片段
    

    演示

    ultisnips

  3. ####引号配对补全 Raimondi/delimitMate

    必装,输入引号,括号时,自动补全

    对python的docstring 三引号做了处理(只处理""", '''暂时没配,可以自己加)

    演示

    delimitmate

    附:同类插件 kana/vim-smartinput

  4. ####html/xml标签配对补全 docunext/closetag.vim

快速编码

  1. ####快速注释 scrooloose/nerdcommenter

    必装,另一个大大提升效率的地方,快速批量加减注释[会自动补一个空格]

     [d] shift+v+方向键选中(默认当前行)
         -> ,cc      加上注释
         -> ,cu      解开注释
         -> ,c<space> 加上/解开注释
         -> ,cy      先复制再注解, p可以粘贴未注释前的代码
    

    演示

    nerdcommenter

    附:注释还有其他两种插件可选tcommenttpope/vim-commentary

  2. ####快速编辑 tpope/vim-surround +tpope/vim-repeat

    必装,很给力的功能,快速给词加环绕符号,例如引号, 注意(括号, 左括号会加空格, 右括号不会)

    repeat进行增强,'.'可以重复使用命令

     [d]
     cs"'
     "Hello world!" -> 'Hello world!'
    
     ds"
     "Hello world!" -> Hello world!
    
     ysiw"
     Hello -> "Hello"
    
     yss"
     Hello world -> "Hello world"
    
     cst"
     <a>abc</a>  -> "abc"
    
     ys$" 当前到行尾, 引号引住
    

    演示

    surround

  3. ####去行尾空格 bronson/vim-trailing-whitespace

    将代码行最后无效的空格标红

     [sd] ,空格    去掉当前行末尾空格
    
  4. ####赋值语句代码对齐 junegunn/vim-easy-align

    将代码,或者json等, 根据表达式符号进行对齐,具体见例子 examples

     [sd]  可以选中多行,不选中默认操作当前行
         ,a= 对齐等号表达
         ,a: 对齐冒号表达式(json/map等)
         ,a<space>  首个空格对齐
         ,a2<space> 第二个空格对齐
         ,a*<space> 所有空格依次对齐
    

    同类插件 tabular

快速移动

  1. ####位置跳转Lokaltog/vim-easymotion

    必装,效率提升杀手锏,跳转到光标后任意位置

    easymothion主要用于快速查找跳转, 今天看了支持jk快速跳转(支持多字母搜索跳转不过我认为太重了)

    配置(我的leader键配置 let g:mapleader = ',')

     ,, + w  跳转
     ,, + fe  查找'e',快速跳转定位到某个字符位置
     ,,j      快速决定移动到下面哪行(比用行号/j移动快)
     ,,k      快速移动到上面哪行
     ,,l      本行, 向后快速移动
     ,,h      本行, 向前快速移动
    

    演示

    easy_motion

  2. ####符号匹配跳转vim-scripts/matchit.zip

    必装

    % 匹配成对的标签,跳转

  3. ####mark跳转 kshenoy/vim-signature

    必装, 快速打标签, 随时跳回标签位置(修复python自动去除空白函数和该插件冲突的问题)

     m[a-zA-Z]   打标签
     '[a-zA-Z]   跳转到标签位置
     '. 最后一次变更的地方
     '' 跳回来的地方
    
     m<space>    去除所有标签
    

快速选中

  1. ####区块伸缩 terryma/vim-expand-region

    视图模式下可伸缩选中部分,用于快速选中某些块

     [sd]
     + 增加选中范围(+/=按键)
     _ 减少选中范围(_/-按键)
    

    演示(直接取链到其github图)

    expand-region

  2. ####多光标选中编辑 vim-multiple-cursors

    多光标批量操作

     [sd]
     ctrl + m 开始选择
     ctrl + p 向上取消
     ctrl + x 跳过
     esc   退出
    

    演示(官方演示图)

    multiple-cursors

文本对象扩展

  1. 自定义文本对象 kana/vim-textobj-user.git

    后面几个扩展对象的依赖

    更多其他扩展,见 wiki

    PS: 特希望有一个扩展支持 '' "" [] {} ()

  2. 行文本对象 kana/vim-textobj-line

    增加文本对象: l

     dal
     yal
     cil
    
  3. 缩进文本对象 kana/vim-textobj-indent.git

    增加文本对象: i

    相同缩进属于同一块,对python很有用

     dai
     yai
     cii
    
  4. 文件文本对象 kana/vim-textobj-entire.git

    增加文本对象: e

     dae
     yae
     cie
    

功能相关

  1. ####搜索 kien/ctrlp.vim

    文件搜索,ack/Command-T需要依赖于外部包,不喜欢有太多依赖的,除非十分强大, 具体 文档

     [sd] ,p  打开ctrlp搜索
     [sd] ,f  相当于mru功能,show recently opened files
    
     ctrl + j/k 进行上下移动
     ctrl + x/v 分屏打开该文件 [重要**]
     ctrl + t   在新tab中打开该文件
    

    演示

    ctrip

    插件: 当前文件快速函数搜索:tacahiroy/ctrlp-funky

    解决问题:使用tagbar当函数比较多的时候,移动耗时较长,使用快速搜索快很多

     ,fu   进入当前文件函数搜索
     ,fU   搜索光标下单词对应函数
    
  2. ####git 常用操作 tpope/vim-fugitive

    git插件, 编辑文件时进行一些diff操作,例如diff

    不是很习惯,所以用的次数太少,目前和现有配置快捷键有冲突,尚未解决

     [sd]
     ,ge   = git diff edit[gd被ycm占用了]
    

    没有配置其他快捷键,可以参照github,自己增加修改映射

  3. ####git状态 airblade/vim-gitgutter

    git,在同一个文件内,通过标记和高亮,显示本次文件变更点

     [sd]
     ,gs   = show diff status [gd被ycm占用了]
    

    gitgutter

  4. ####文件时光机 sjl/gundo.vim

    编辑文件时光机

     [sd] ,h  查看文件编辑历史
    

    附:同类插件 mbbill/undotree

显示增强

  1. ####状态栏增强 bling/vim-airline

    之前使用powerline, 用airline替换, powerline的配置注释,需要的自行解开

    演示

    airline

  2. ####括号上色高亮 kien/rainbow_parentheses.vim

    演示

    rainbow

显示增强-主题

  1. ####altercation/vim-colors-solarized

    经典主题,目前我使用的,看起来舒服

  2. ####tomasr/molokai

    用sublime text2的同学应该很熟悉, 另一个主题,可选,偶尔换换味道

默认值提供solarized和molokai主题,其他主题需自行配置安装

快速导航

  1. ####目录树 scrooloose/nerdtree

    必装,开启目录树导航

     [sd]
         ,n  打开 关闭树形目录结构
    
         在nerdtree窗口常用操作:(小写当前,大写root)
         x.......收起当前目录树
         X.......递归收起当前目录树
         r.......刷新当前目录
         R.......刷新根目录树
    
         p.......跳到当前节点的父节点
         P.......跳到root节点
         k/j.....上下移动
         K.......到同目录第一个节点
         J.......最后一个节点
    
         o.......Open files, directories and bookmarks
    
         s.......split上下分屏[原来是i, 改键]
         v.......vsplit左右分屏[原来是s, 改键]
    
         c.......将当前目录设为根节点
         q.......关闭
    

    nerdtree配合tab非常赞, i/s 可以在右侧分屏打开

    演示

    thenerdtree

  2. ####目录树tab增强 jistr/vim-nerdtree-tabs

    选装, 多个tab时, 保持nerdtree一致

    Just one NERDTree

  3. ####tab/buffer导航增强 vim-ctrlspace

    必装, 多buffer/多tab, 方便的查看列表, 操作, 切换, 与nerdtree/tabs完美配合, 很强大, 目前只使用基础功能, 后续根据需要再完善

    注意: 有些人的ctrl+space被占用的, 配一个leader快捷键(下面是默认配置)

       let g:ctrlspace_default_mapping_key="<C-Space>"
    

    (同时可以看看文档前面部分针对tab的快捷键)

       ctrl+<space> 得到当前tab的buffer列表
       j/k     上下移动
       回车     跳转到
       v/V     vsp分屏打开, v会进入对应文件, V会保留在ctrlspace区域
       s/S     sp分屏打开
    
       l       展示/关闭tab列表
           j/k 或 [/] 上下移动
           =   给tab命名
           -   Move the current tab to the left (decrease its number)
           +   Move the current tab to the right (increase its number)
           Backspace Go back to Buffer List
    
       L   Jump to Tab List in Search Mode
    
       esc/q   close the list
    

    演示

    ctrlspace

    官方视频

Vim-CtrlSpace 4.0 Demo

  1. ####Tag majutsushi/tagbar

    必装,标签导航,纬度和taglist不同, taglist的替代者

    注意:之前版本有装taglist,决定用tagbar替代,taglist的配置注解未删除,需要的自行打开

      [sd] <F9> 打开
    

    演示

    tagbar

语言相关- 需要自定义编辑确认是否保留(默认打开)

  1. ####Python

    Vim as a Python IDE, but much more than that!

    语法高亮python-syntax

    使用Python建议安装,python语法高亮,就是python.vim,在github,有维护和更新

    语法检查kevinw/pyflakes-vim

    虽然这个的作者推荐使用syntastic,但是这个插件对于pythoner还是很需要的

    因为有一个特牛的功能,fly check,即,编码时在buffer状态就能动态查错标记,弥补syntastic只能保存和打开时检查语法错误的不足

    演示

    pyflakes

  2. ####Golang

    Go语言自动补全Blackrush/vim-gocode

    安装gocode之后 ,配置这个插件

     `which gocode` (add $GOPATH/bin to you $PATH)
    

    另一个插件[觉得太过庞大没有使用,golang开发者可以配置试用下] fatih/vim-go 介绍

  3. ####Markdown

    plasticboy/vim-markdown

    markdown语法,编辑md文件

  4. ####HTML/JS/JQUERY/CSS

    jelera/vim-javascript-syntax js语法高亮 pangloss/vim-javascript 缩进等

    marijnh/tern_for_vim 配合ycm进行js/jquery自动补全,需要安装 tern_for_vim 并配置, 文档 ternjs

     cd ~/.vim/bundle/tern_for_vim && npm install
    

    maksimr/vim-jsbeautify js/html/css 格式化, 未配置

    nono/jquery.vim jquery高亮

    elzr/vim-json json高亮,未配置

    kchmck/vim-coffee-script coffeescript,未配置

    groenewege/vim-less less,未配置

    emmet zencoding,未配置

    gorodinskiy/vim-coloresque 配置 | vim-css-color 未配置 css颜色展示

  5. ####Jinja2

    Glench/Vim-Jinja2-Syntax

    jinja2 语法高亮

  6. ####Ruby

    可以参考tpope的插件列表,很多跟ruby相关

    tpope/vim-rails 未配置 nelstrom/vim-textobj-rubyblock

    这个有坑, 暂未搞定 tpope/vim-endwise 未配置,自动加end

  7. ####PHP

    spf13/PIV 未配置

    arnaud-lb/vim-php-namespace 未配置

  8. ####非语言语法高亮

    evanmiller/nginx-vim-syntax 未配置



Update Log

详细 更新日志

2014-10-02

version: 8.0

1. 修复YCM不能自动提示Ultisnips代码片段的问题
   重大问题, 生产力得到再次提升:)
   注意: 自定义snippets, 写错一个, 就会导致YCM不提示所有的snippets

2. tab增强
   2.1 新增tab操作快捷键, 详见文档
   2.2 增加插件 `jistr/vim-nerdtree-tabs`, 所有tab使用同一个nerdtree
   2.3 增加插件 `szw/vim-ctrlspace`, 更强大的buffer/tab操作-切换
   由于tab增强带来的影响:
   - 去掉了t/T新增一行的快捷键(低频操作, 后续可以考虑配置到其他键位)

3. 去除`minibuffer`插件
   配置还留着, 需要的自己解开, 但是ctrlspace其实可以完爆这个功能

4. 优化`scrooloose/nerdcommenter`配置
   注解加空格, 以及新增键位

5. 增加插件 `kshenoy/vim-signature`
   mark-跳转更加方便, 修复与保存自动去行尾空白功能的冲突

6. 对齐插件变更, 使用`junegunn/vim-easy-align` 替换掉 `godlygeek/tabular`

7. 增加插件 `jelera/vim-javascript-syntax`
   更丰富的javascript语法高亮

8. 去除插件 `gorodinskiy/vim-coloresque`
   这货有坑, 使用频率低 see issue https://github.com/wklken/k-vim/issues/49

9. 新增自定义snippets
   位置 ~/.vim/UltiSnips/

10. 修复YCM不能跳转到函数/类等定义处的问题
   ,jd/,gd

11. 重写README

12. easymothion
    增加快速hjkl移动快捷键

Contributors

thx a lot. 可以给我提pull request:)

查看详情 git-contributors

Inspire

  1. vimrc文件布局vimrc+vimrc.bundles配置方式参考 maximum-awesome

  2. install.sh 参考spf13-vimbootstrap.sh spf13-vim

  3. 插件管理使用Vundle

  4. 自动补全 YCM

  5. 插件挑选 VimAwesome

Resources

链接

Donation

You can Buy me a coffee:) link



The End!

wklken (凌岳/pythoner/vim党预备党员)

Email: wklken@yeah.net

Github: https://github.com/wklken

Blog: http://www.wklken.me

2013-06-11 于深圳