vim 折腾了很久了, 好像有必要写一写我的 vim 配置.
大概就按照 vimrc 的顺序, 只挑一些好玩有趣的来讲好了. 完整的还是去 github 上看吧:
话说... 语法高亮非常悲催因为 highlight.js
不支持 vimscript 怎么办..
写了一个 hexo 插件: hexo-tag-vimhighlight,
现在可以用 vim 高亮代码了. 谢谢 @Alick Zhao 同学告知 vim 内置的 2html.
Vundle¶
vundle
是一个插件管理器. 可以自动 clone, update 插件.
文件头先把 vundle 加入 runtimepath 中, 然后加载一堆 bundle. 注意filetype
要在 bundle 全部载入之后再开启,
否则 bundle 中的ftdetect
会失效.
我比较 BT 的装了 70 个左右的插件, 但是我觉得它们都能用得着.. 而且毕竟有一半左右都是不同语言的 syntax 文件,
因为接触的奇怪语言比较多吧..
Fix Environment¶
Tmux 使用了xterm-keys
之后, 会使得 vim 无法接收C-Up
一类的按键.
对 0-9a-zA-Z 重置 Alt 键的 keycode, 否则在我的环境下Alt-
的快捷键无法使用.
用来用去还是默认配色最舒服, 尽管有些看烦了, 但是改了改颜色其实就很好.
另外 VimDiff 的时候背景色太刺眼去掉看着舒服.
把类名作为 C 中的类型匹配出来, 看着舒服一些. 另一个匹配函数的我用了一段时间就注释掉了.
Powerline
配置. 用的是一个自定义的主题.
修改主要是把 NORMAL,INSERT 这些弄简单了, 否则占的空间太大.
光标快要到边缘时翻页
第一行是搜索的 'very magic mode', 具体区别可看帮助文档:he magic
; 第二行是在 visual 模式下搜索
History¶
所有的 cache, backup 全部放在~/.vimtmp/
. 开启persistent_undo
, 退出后回到一个文件仍然能够进行 undo.
Basic Maps¶
键绑定若不是 prefix-free, 则可能出现歧义, 设置歧义等待时间.
因为Esc
后可跟 xterm keycode.
ttimeoutlen 不设为 0 的话可能导致很多机器上Esc
速度慢, 非常不爽.
老按Esc
键退出 insert 不够方便 (vim 默认也支持用C-C
实现Esc
的功能).
ps: XServer 下可以利用 xcape 将Caps Lock
映射到Esc
上, 要方便的多了.
用分号代替冒号输命令, 会上瘾的
fix 一些常见的 typo
SudoWrite 是 sudo.vim 提供的功能,
以往要是不小心用普通权限打开了 root 文件, 都只能先 save to /tmp, 再用 root 恢复.
这个 vimscript 替你做了这件事.
禁用掉一些讨厌的东西:
visual mode 下用 I, A 命令时, 自动转为 block visual mode. 很实用:
Clipboard¶
都是一些小技巧吧:
Cursor Movement¶
使用 accelerated-jk, 在按住 jk 翻页时加快速度.
另外, accelerated-smooth-scroll
可以让C-D
, C-U
翻页时有滚动效果, 这样翻完更容易找到光标.
搜索时把当前结果置于屏幕中央并打开折叠:
easymotion
可以精确快速跳转到屏幕内任意指定字符处.
通常情况下C-U, C-W
删除行, 词后无法撤销, 非常郁闷. 可以用这个 map:
打开文件时恢复到上次编辑的位置:
光标一次移动行数较多时自动打开 cursorline, 使得用户更容易找到光标.
但这个在编辑大文件的时候对速度影响比较大.
Auto Fill Brackets¶
这是一个不少人不喜欢的功能.. 但是配的合适的话, 个人觉得还是有效率提升:
这两个函数实现的功能是, 按左括号时, 判断右边字符, 满足一定条件时补全右括号.
按右括号时看左边是否是对应的左括号.
About Chinese¶
输入中文标点时自动替换:
将中文标点及一些其他符号替换为 下使用的格式
离开 insert 时将输入法切为英文, 进入时若光标下字符是中文则切输入法 (仅适用于 fcitx):
我写的中文搜索插件 PinyinSearch,
按照首字母搜索中文
Some Small Functions¶
删除行末空格
Extract/Inline Variable, 在 IDE 中很常见, 最初在 rails 社区流行的功能.
自动更新文件头处的修改时间, 文件名.
将当前正在编辑但未保存的文件与已保存的做 diff
复制当前文件, 备份当前文件:
光标在链接上时打开浏览器
一些常用功能: 切换是否 wrap line, 刷新屏幕, 清空搜索高亮, 在字典里查当前单词.
Completion¶
找了一个英语词典, C-X
C-K
补全单词.
补全神器 YCM
是一个补全引擎, 自身提供了 C/C++/C#/Python 的 semantic completion, 非常靠谱, 同时作为一个引擎,
可以与其他补全插件合作.
YCM 配置很轻松, 就是编译稍麻烦.
由于要对付一些乱七八糟的文件类型, 我还是保留了
neocomplcache.
对于 nginx/tmux/shell/vimscript 这些文件, neo 都有默认的关键字支持, 而 ycm 对此无能为力.
虽然 YCM 自带 jedi, 但是原装的 jedi 有参数列表 popup.
重命名功能也很好.
写 Java 需要 eclipse 补全, eclim 可以在 vim 中调用 eclipse 的补全方法,
java 语法垃圾太多, 没有补全几乎无法工作, eclim 大大提高了工作效率.
为了跟 ycm 配合, 将 eclim 的补全方法配置成 omni 即可.
sparkup
是快速插入 html 标签的, 跟以前的一个 zencoding
用法差不多但是功能更强. 虽然我不怎么写 html.
具体的配置有些长, 就不贴了.
Programming¶
编辑新文件时根据扩展名生成 scaffolds, 包括文件头 (时间, 作者, 文件名), 文件编码, 常用库等.
这个比较无聊也不贴了...
编译相关的东西. Make () 在没有 Makefile 时就调用 make 命令. FindMakefile () 会一直向上级找 Makefile (有的时候
Makefile 会藏得很深..). 对不同文件类型设了 makeprg, 包括 dot, gnuplot 可以实现运行自动预览了.
对于 , 加了很多乱七八糟的映射. 以及用了
Latex-Box.
不过还是自己写的部分用的顺手.. 尤其是几个常用环境加了很多 scaffolds
Latex-Box 支持将一个环境变为 text-objects, 也比较好用. 具体的太多了, 有 80 行, 也不贴了..
我使用 make 构建 tex 文档, mupdf 做阅读器, 下面这条配置可在保存时自动编译并刷新 mupdf, 这个很爽的.
当然如果你用 evince 之类的话, 自己就会刷新..mupdf 虽然快, 兼容性稳定性还是差一些.
对于 C/C++, 高亮一些我常用的自定义类型和标准库类型.
编辑 Java 文件时, 也高亮一些常用类型, 看着舒服多了:
编辑 shell 脚本自动chmod +x
打开 doc, pdf, javaclass 文件
Other Plugins¶
fswitch 的功能是
a.vim 的超集,
是一个用来切换 C++ 源文件 / 头文件的好东西. 我写 C++ 的习惯一般会开 include 目录, 因此修改它的搜索路径.
tpope 的 surround
应该是必备了.
evervim
使得 vim 下可以用 markdown 编辑 evernote, 又一个 windowsonly 的东西被替代了.
它需要读取 evernote api key
colorv
可以打开一个调色盘, 看当前高亮的颜色或查找其他颜色的 code. 把它的 cache 也放到 vimtmp 下
NerdCommenter
添加注视很方便, 但是默认键绑定不习惯. 常用的键绑定其实只有两个所以自己 wrap 了一下.
expand-region
visual mode 下向外根据预定规则寻找 text-object 扩展选择范围.
MultipleSearch
允许多个关键词一起搜索, 用不同颜色高亮. 星号搜光标下单词.
grep.vim
, 一般只用在项目中递归 grep 的功能.
ctrlp
查找东西极为方便. 可以跳转文件, 跳转 buffer, 跳转 mru.
rainbow_parentheses
使得匹配的层叠括号被不同颜色高亮, 确实能看的清楚一点.
对 xml, js, css, html 的 beautify. 使用了 js-beautify,
基于 node 的 beautify 引擎.
indentLine,
在缩进处利用 conceal 功能实现标注, 免得缩进多了看不见. 与list
功能配合使用更佳. 我为这个项目提交过一个 commit..
tag 浏览使用友好的 tagbar,
文件管理使用 NERDTree.
将修改历史展示成树状供撤销, gundo
也是必备插件了.