特别说明:我的vim配置主要参考啦https://github.com/wklken/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
-
最好能熟练使用原生vim各类操作之后, 再来使用插件扩展
-
fork
一份(需要的话顺带star
关注更新), 然后参照安装步骤进行安装, 可以根据自身习惯进行自定义修改 -
目前主要关注后端
python
,golang
以及将要入坑的ruby
, 偶尔写写js/jquery
, 但是主体配置基本是通用的. 可以根据语言体系自己加配置(vimrc.bundles) -
插件不是越多越好, 二八定律
-
欢迎大家推荐好用的资源, 不限于插件/主题/ppt/文章/视频等, 也希望大家能一起完善这份配置
你遇到的问题,一定别人也遇到了
- 首先明确问题, 可以用
二分法
排查出问题的插件或配置语句 - 确认按照文档步骤执行的操作
- 如果是对应插件的问题, 请到插件github主页查看文档及issues
- google大法
- 提issues
后面图片有点多,展示有点慢,截得不是很专业,耐心看完:)
solarized主题
molokai主题
-
clone到本地,配置到linux个人目录(如果是从linux_config过来的,不需要clone)
git clone https://github.com/wklken/k-vim.git
-
安装依赖包
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.1 进入目录 # 注意原先装过的童鞋, 重装时,不要到~/.vim下执行(这是软连接指向k-vim真是目录),必须到k-vim原生目录执行 cd k-vim/ 3.2 执行安装 # 会进入安装插件的列表,目前30+个插件,一一安装是从github clone的,完全取决于网速, 之后会自动编译 YCM, 编译失败的话需要手动编译, 见第4步 sh -x install.sh
-
可能遇到的问题: vim 安装要支持Python,否则自动提示功能会不起作用。 未安装python支持异常信息: YouCompleteMe unavailable: requires Vim compiled with Python 2.x support UltiSnips requires py >= 2.7 or any py3 检查: vim --version | grep python +cryptv +linebreak +python +viminfo -cscope +lispindent -python3 +vreplace 安装: ./configure -h | grep python --enable-pythoninterp=OPTS Include Python interpreter. default=no OPTS=no/yes/dynamic --enable-python3interp=OPTS Include Python3 interpreter. default=no OPTS=no/yes/dynamic --with-python-config-dir=PATH Python's config directory --with-python3-config-dir=PATH Python's config directory [book@localhost vim74]$ ./configure --prefix=/opt/vim
-
编译自动补全YouCompleteMe(耗时略长, 但绝对值得) cd ~/.vim/bundle/YouCompleteMe ./install.sh --clang-completer
如果手动安装了clang和llvm,需要修改下面文件,则可编译过: vim third_party/ycmd/cpp/ycm/CMakeLists.txt 将if ( USE_CLANG_COMPLETER AND NOT USE_SYSTEM_LIBCLANG AND NOT PATH_TO_LLVM_ROOT AND NOT EXTERNAL_LIBCLANG_PATH ) 中的代码全部注释掉 然后设置set ( PATH_TO_LLVM_ROOT "/opt/llvm-3.6.2" )即可
有任何问题见YCM文档
这个插件需要Vim 7.3.584,所以,如果vim版本太低,需要编译安装
- 相对行号
vimrc中配置,如果不习惯,可以去掉,相关参考
- 配置主题
到vimrc中修改colortheme,可以使用molokai(用惯sublimetext2的童鞋很熟悉)
默认配置的是solarized dark主题
想要修改终端配色为solarized可以参考 这里
- Go语言不能自动补全/tagbar
依赖 gotags和 gocode, 需要安装配置好, 并->
$GOPATH
->$PATH
,which
命令能正确返回which gotags which gocode
-
Javascript不能自动补全
vimrc.bundles
中marijnh/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'
-
其他问题: 键位/展现等存在问题, 使用
二分法
缩小范围, 排查到问题根源, 修改配置
-
-
安装/卸载/更新插件:
安装新插件
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
ctrl+l 最近使用两个tab之间切换
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 新起一行,上面
基础
-
####插件管理 gmarik/vundle
必装,用于管理所有插件 命令行模式下管理命令:
:BundleInstall install :BundleInstall! update :BundleClean remove plugin not in list
-
####多语言语法检查 scrooloose/syntastic
建议安装,静态语法及风格检查,支持多种语言
修改了下标记一列的背景色,原有的背景色在solarized下太难看了…..
演示
自动补全
-
####代码自动补全 Valloric/YouCompleteMe
必装,强烈推荐(YCM是我目前用到的最好的自动补全插件)
这个插件包含了以下几个插件功能,所以不需要装下面:
clang_complete AutoComplPop Supertab neocomplcache jedi(对python的补全)
敲两个字符后弹出提示, 支持各语言标准库补全
快捷键:
ctrl+n 选择下一个补全 ctrl+p 选择上一个补全 回车 选中 ,jd 跳转到函数定义, 分屏打开一个buffer(非常有用!!!!!!!!!) ,gd 跳到声明位置, 仅 filetypes: c, cpp, objc, objcpp, python 有效(比较少用)
演示(官方截图)
-
####代码片段快速插入 SirVer/ultisnips +honza/vim-snippets
必装,效率杀手锏,快速插入自定义的代码片段, 高效必备
YCM 自动补全会弹提示
ctrl+n 上一个 ctrl+p 下一个 <tab> 使用片段 ,us 编辑对应文件类型的代码片段
演示
-
####引号配对补全 Raimondi/delimitMate
必装,输入引号,括号时,自动补全
对python的docstring 三引号做了处理(只处理""", '''暂时没配,可以自己加)
演示
附:同类插件 kana/vim-smartinput
-
####html/xml标签配对补全 docunext/closetag.vim
快速编码
-
####快速注释 scrooloose/nerdcommenter
必装,另一个大大提升效率的地方,快速批量加减注释[会自动补一个空格]
[d] shift+v+方向键选中(默认当前行) -> ,cc 加上注释 -> ,cu 解开注释 -> ,c<space> 加上/解开注释 -> ,cy 先复制再注解, p可以粘贴未注释前的代码
演示
附:注释还有其他两种插件可选tcomment 和tpope/vim-commentary
-
####快速编辑 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"
演示
-
####去行尾空格 bronson/vim-trailing-whitespace
将代码行最后无效的空格标红
[sd] ,空格 去掉当前行末尾空格
-
####赋值语句代码对齐 junegunn/vim-easy-align
将代码,或者json等, 根据表达式符号进行对齐,具体见例子 examples
[sd] 可以选中多行,不选中默认操作当前行 ,a= 对齐等号表达 ,a: 对齐冒号表达式(json/map等) ,a<space> 首个空格对齐 ,a2<space> 第二个空格对齐 ,a*<space> 所有空格依次对齐
同类插件 tabular
快速移动
-
####位置跳转Lokaltog/vim-easymotion
必装,效率提升杀手锏,跳转到光标后任意位置
easymothion主要用于快速查找跳转, 今天看了支持jk快速跳转(支持多字母搜索跳转不过我认为太重了)
配置(我的leader键配置 let g:mapleader = ',')
,, + w 跳转 ,, + fe 查找'e',快速跳转定位到某个字符位置 ,,j 快速决定移动到下面哪行(比用行号/j移动快) ,,k 快速移动到上面哪行 ,,l 本行, 向后快速移动 ,,h 本行, 向前快速移动
演示
-
####符号匹配跳转vim-scripts/matchit.zip
必装
% 匹配成对的标签,跳转
-
####mark跳转 kshenoy/vim-signature
必装, 快速打标签, 随时跳回标签位置(修复python自动去除空白函数和该插件冲突的问题)
m[a-zA-Z] 打标签 '[a-zA-Z] 跳转到标签位置 '. 最后一次变更的地方 '' 跳回来的地方 m<space> 去除所有标签
快速选中
-
####区块伸缩 terryma/vim-expand-region
视图模式下可伸缩选中部分,用于快速选中某些块
[sd] + 增加选中范围(+/=按键) _ 减少选中范围(_/-按键)
演示(直接取链到其github图)
-
####多光标选中编辑 vim-multiple-cursors
多光标批量操作
[sd] ctrl + m 开始选择 ctrl + p 向上取消 ctrl + x 跳过 esc 退出
演示(官方演示图)
文本对象扩展
-
自定义文本对象 kana/vim-textobj-user.git
后面几个扩展对象的依赖
更多其他扩展,见 wiki
PS: 特希望有一个扩展支持 '' "" [] {} ()
-
行文本对象 kana/vim-textobj-line
增加文本对象: l
dal yal cil
-
缩进文本对象 kana/vim-textobj-indent.git
增加文本对象: i
相同缩进属于同一块,对python很有用
dai yai cii
-
文件文本对象 kana/vim-textobj-entire.git
增加文本对象: e
dae yae cie
功能相关
-
####搜索 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中打开该文件
演示
插件: 当前文件快速函数搜索:tacahiroy/ctrlp-funky
解决问题:使用tagbar当函数比较多的时候,移动耗时较长,使用快速搜索快很多
,fu 进入当前文件函数搜索 ,fU 搜索光标下单词对应函数
-
####git 常用操作 tpope/vim-fugitive
git插件, 编辑文件时进行一些diff操作,例如diff
不是很习惯,所以用的次数太少,目前和现有配置快捷键有冲突,尚未解决
[sd] ,ge = git diff edit[gd被ycm占用了]
没有配置其他快捷键,可以参照github,自己增加修改映射
-
####git状态 airblade/vim-gitgutter
git,在同一个文件内,通过标记和高亮,显示本次文件变更点
[sd] ,gs = show diff status [gd被ycm占用了]
-
####文件时光机 sjl/gundo.vim
编辑文件时光机
[sd] ,h 查看文件编辑历史
附:同类插件 mbbill/undotree
显示增强
-
####状态栏增强 bling/vim-airline
之前使用powerline, 用airline替换, powerline的配置注释,需要的自行解开
演示
-
####括号上色高亮 kien/rainbow_parentheses.vim
演示
显示增强-主题
-
####altercation/vim-colors-solarized
经典主题,目前我使用的,看起来舒服
-
####tomasr/molokai
用sublime text2的同学应该很熟悉, 另一个主题,可选,偶尔换换味道
默认值提供solarized和molokai主题,其他主题需自行配置安装
快速导航
-
####目录树 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 可以在右侧分屏打开
演示
-
####目录树tab增强 jistr/vim-nerdtree-tabs
选装, 多个tab时, 保持nerdtree一致
Just one NERDTree
-
####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
演示
官方视频
-
####Tag majutsushi/tagbar
必装,标签导航,纬度和taglist不同, taglist的替代者
注意:之前版本有装taglist,决定用tagbar替代,taglist的配置注解未删除,需要的自行打开
[sd] <F9> 打开
演示
语言相关- 需要自定义编辑确认是否保留(默认打开)
-
####Python
语法高亮python-syntax
使用Python建议安装,python语法高亮,就是python.vim,在github,有维护和更新
虽然这个的作者推荐使用syntastic,但是这个插件对于pythoner还是很需要的
因为有一个特牛的功能,fly check,即,编码时在buffer状态就能动态查错标记,弥补syntastic只能保存和打开时检查语法错误的不足
演示
-
####Golang
Go语言自动补全Blackrush/vim-gocode
安装gocode之后 ,配置这个插件
`which gocode` (add $GOPATH/bin to you $PATH)
另一个插件[觉得太过庞大没有使用,golang开发者可以配置试用下] fatih/vim-go 介绍
-
####Markdown
markdown语法,编辑md文件
-
####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颜色展示
-
####Jinja2
jinja2 语法高亮
-
####Ruby
可以参考tpope的插件列表,很多跟ruby相关
tpope/vim-rails 未配置 tpope/vim-endwise 未配置,自动加end
-
####PHP
spf13/PIV 未配置
-
####非语言语法高亮
详细 更新日志
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移动快捷键
thx a lot. 可以给我提pull request:)
查看详情 git-contributors
-
vimrc文件布局
vimrc+vimrc.bundles
配置方式参考 maximum-awesome -
install.sh 参考
spf13-vim
的bootstrap.sh
spf13-vim -
插件管理使用Vundle
-
自动补全 YCM
-
插件挑选 VimAwesome
You can Buy me a coffee:) link
The End!
wklken (凌岳/pythoner/vim党预备党员)
Email: [email protected]
Github: https://github.com/wklken
Blog: http://www.wklken.me
2013-06-11 于深圳