注:本文来自k-vim9.0的README.md,k-vim更新9.1后的readme去除了很多详细操作说明,故有此文,以下均为转载内容。
k-vim
VERSION: 9.0
LAST_UPDATE_TIME: 2015-05-02
本次更新: 更强大的搜索, 快速运行等
详细 更新日志
目标
Just a Better Vim Config. Keep it Simple.
0. 保持简单
1. 结构划分良好, 中文注释
2. 高度可配置修改
3. 一键安装少折腾
4. 更加符合直觉的键位操作(*)
适用人群:
PS: 服务器端不带插件k-vim
的简化版本(curl直接设置vimrc即可), 有需要可以直接安装vim-for-server
k-vim使用说明
-
最好能熟练使用原生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
-
安装依赖包
# ctags, ag(the_silver_searcher)
2.1 系统依赖
# ubuntu
sudo apt-get install ctags
sudo apt-get install build-essential cmake python-dev #编译YCM自动补全插件依赖
sudo apt-get install silversearcher-ag
# centos
sudo yum install python-devel.x86_64
sudo yum groupinstall 'Development Tools'
sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo yum install the_silver_searcher
# mac
brew install ctags
brew install the_silver_searcher
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
-
可能遇到的问题:
- 编译自动补全YouCompleteMe(耗时略长, 但绝对值得)
cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer
有任何问题见YCM文档
这个插件需要Vim 7.3.584,所以,如果vim版本太低,需要编译安装
vimrc中配置,如果不习惯,可以去掉,相关参考
到vimrc中修改colortheme,可以使用molokai(用惯sublimetext2的童鞋很熟悉)
默认配置的是solarized dark主题
想要修改终端配色为solarized可以参考 这里
依赖 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更新, 可能需要重编译, 否则自动补全可能失效)
删除插件
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,可以注解
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 运行当前文件(quickrun)
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)
13. `,zz` 代码折叠toggle
插件部分
基础
-
必装,用于管理所有插件
命令行模式下管理命令:
:BundleInstall install
:BundleInstall! update
:BundleClean remove plugin not in list
-
建议安装,静态语法及风格检查,支持多种语言
修改了下标记一列的背景色,原有的背景色在solarized下太难看了…..
演示
自动补全
-
必装,强烈推荐(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 自动补全会弹提示
ctrl+j 上一个
ctrl+k 下一个
ctrl+n 上一个
ctrl+p 下一个
<tab> 使用片段 -> expand to codes
,us 编辑对应文件类型的代码片段
演示
-
必装,输入引号,括号时,自动补全
对python的docstring 三引号做了处理(只处理""", '''暂时没配,可以自己加)
演示
附:同类插件 kana/vim-smartinput
-
快速编码
-
必装,另一个大大提升效率的地方,快速批量加减注释[会自动补一个空格]
[d] shift+v+方向键选中(默认当前行)
-> ,cc 加上注释
-> ,cu 解开注释
-> ,c<space> 加上/解开注释
-> ,cy 先复制再注解, p可以粘贴未注释前的代码
演示
附:注释还有其他两种插件可选tcomment 和tpope/vim-commentary
-
必装,很给力的功能,快速给词加环绕符号,例如引号, 注意(括号, 左括号会加空格, 右括号不会)
repeat进行增强,'.'可以重复使用命令 (ys=you surround)
[d]
cs"'
"Hello world!" -> 'Hello world!'
ds"
"Hello world!" -> Hello world!
ysiw"
Hello -> "Hello"
yss"
Hello world -> "Hello world"
cst"
<a>abc</a> -> "abc"
veeS"
hello world -> "hello world"
ys$" 当前到行尾, 引号引住
演示
-
-
将代码行最后无效的空格标红
-
将代码,或者json等, 根据表达式符号进行对齐,具体见例子 examples
[sd] 可以选中多行,不选中默认操作当前行
,a= 对齐等号表达
,a: 对齐冒号表达式(json/map等)
,a<space> 首个空格对齐
,a2<space> 第二个空格对齐
,a*<space> 所有空格依次对齐
同类插件 tabular
快速移动
-
必装,效率提升杀手锏,跳转到光标后任意位置
easymothion主要用于快速查找跳转, 今天看了支持jk快速跳转(支持多字母搜索跳转不过我认为太重了)
配置(我的leader键配置 let g:mapleader = ',')
,, + w 跳转
,, + fe 查找'e',快速跳转定位到某个字符位置
,,j 快速决定移动到下面哪行(比用行号/j移动快)
,,k 快速移动到上面哪行
,,l 本行, 向后快速移动
,,h 本行, 向前快速移动
,,. 重复上一次easymotion命令
演示
-
必装
% 匹配成对的标签,跳转
-
必装, 快速打标签, 随时跳回标签位置(修复python自动去除空白函数和该插件冲突的问题)
m[a-zA-Z] 打标签
'[a-zA-Z] 跳转到标签位置
'. 最后一次变更的地方
'' 跳回来的地方
m<space> 去除所有标签
快速选中
-
视图模式下可伸缩选中部分,用于快速选中某些块
演示(直接取链到其github图)
-
多光标批量操作
[sd]
ctrl + m 开始选择
ctrl + p 向上取消
ctrl + x 跳过
esc 退出
演示(官方演示图)
文本对象扩展
- 自定义文本对象 kana/vim-textobj-user.git
后面几个扩展对象的依赖
更多其他扩展,见 wiki
PS: 特希望有一个扩展支持 '' "" [] {} ()
- 行文本对象 kana/vim-textobj-line
增加文本对象: l
- 缩进文本对象 kana/vim-textobj-indent.git
增加文本对象: i
相同缩进属于同一块,对python很有用
- 文件文本对象 kana/vim-textobj-entire.git
增加文本对象: e
功能相关
-
文件搜索,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 搜索光标下单词对应函数
-
解决了重构代码时需要修改多处的问题
光标移动到单词, 按\ 进入全局搜索
进入左侧后的操作:
回车/o, 打开
t - 在tab中打开(建议)
T - Like t but focus CtrlSF window instead of opened new tab.
q - Quit CtrlSF window.
-
git插件, 编辑文件时进行一些diff操作,例如diff
不是很习惯,所以用的次数太少,目前和现有配置快捷键有冲突,尚未解决
[sd]
,ge = git diff edit[gd被ycm占用了]
没有配置其他快捷键,可以参照github,自己增加修改映射
-
git,在同一个文件内,通过标记和高亮,显示本次文件变更点
[sd]
,gs = show diff status [gd被ycm占用了]
-
编辑文件时光机
附:同类插件 mbbill/undotree
显示增强
-
之前使用powerline, 用airline替换, powerline的配置注释,需要的自行解开
演示
-
演示
显示增强-主题
-
经典主题,目前我使用的,看起来舒服
-
用sublime text2的同学应该很熟悉, 另一个主题,可选,偶尔换换味道
-
另一款经典主题
默认值提供solarized和molokai主题,其他主题需自行配置安装
快速导航
-
必装,开启目录树导航
[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时, 保持nerdtree一致
Just one NERDTree
-
必装, 多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
演示
官方视频
-
必装,标签导航,纬度和taglist不同, taglist的替代者
tagbar针对而一些语言的文档https://github.com/majutsushi/tagbar/wiki
注意:之前版本有装taglist,决定用tagbar替代,taglist的配置注解未删除,需要的自行打开
演示
语言相关- 需要自定义编辑确认是否保留(默认打开)
-
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只能保存和打开时检查语法错误的不足
演示
-
Golang
Go语言自动补全Blackrush/vim-gocode
安装gocode之后 ,配置这个插件
`which gocode` (add $GOPATH/bin to you $PATH)
另一个插件[觉得太过庞大没有使用,golang开发者可以配置试用下] fatih/vim-go 介绍
-
Markdown
plasticboy/vim-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
Glench/Vim-Jinja2-Syntax
jinja2 语法高亮
-
Ruby
可以参考tpope的插件列表,很多跟ruby相关
tpope/vim-rails 未配置
nelstrom/vim-textobj-rubyblock
这个有坑, 暂未搞定
tpope/vim-endwise 未配置,自动加end
-
PHP
spf13/PIV 未配置
arnaud-lb/vim-php-namespace 未配置
-
非语言语法高亮
evanmiller/nginx-vim-syntax 未配置
Update Log
详细 更新日志
version: 9.0
1. 新增依赖ag(the_silver_searcher)
安装 [the_silver_searcher](https://github.com/ggreer/the_silver_searcher#installing)
具体见文档
2. 引入 thinca/vim-quickrun
2.1 以message的方式展示, 同原先的F10行为, 按回车过掉消息
2.2 F10 运行 / ,r 运行
2. 引入dyng/ctrlsf.vim, 类似 sublimetext的全局搜索
2.1 依赖于ag的全局搜索
2.2 将光标挪到单词, 快捷键\ - 进入全局搜索, 移入分屏界面, o/t/T/q操作
3. 代码折叠
3.1 <leader>zz 折叠/打开所有代码toggle(本次新增配置)
3.2 za 当前光标所在区域折叠toggle(vim默认的)
4. syntastic语法检查
4.1 修正语法检查错误高亮, 精确到具体错误单词
4.2 开启python的pep8, 允许忽略某些warning, vimrc.bundles: line 40
4.3 <leader>s 打开当前文件所有语法错误列表(新增配置)
5. easymotion
5.1 <leader><leader>. 重复上一次easymotion命令, 更高效(新增配置)
6. 修改RainbowParentheses, 防止黑色括号出现
7. 修改vim-expand-region快捷键
7.1 v 扩增选中范围
7.2 V 缩小选中范围
8. 新增主题tomorrow
TODO
- 语言插件集合, 语法增强 https://github.com/sheerun/vim-polyglot
Contributors
thx a lot. 可以给我提pull request:)
查看详情 git-contributors
Inspire
-
vimrc文件布局vimrc+vimrc.bundles
配置方式参考 maximum-awesome
-
install.sh 参考spf13-vim
的bootstrap.sh
spf13-vim
-
插件管理使用Vundle
-
自动补全 YCM
-
插件挑选 VimAwesome
Resources
链接
Donation
如果你认为对你有所帮助, You can Buy me a coffee:)
------------------------
The End!
wklken (凌岳/pythoner/vim党预备党员)
Email: wklken@yeah.net
Github: https://github.com/wklken
Blog: http://www.wklken.me
2013-06-11 于深圳