for anyone who need this
vim 是一个高度可定制化的,文本编辑软件。因此,其个性化配置来说,并不适合所有人。但仍然有一定的借鉴意义。
本vimrc配置文件,是我多年使用vim软件积累所得;主要是自己的一些使用习惯和积累下来的大众化插件。
在2016年初的时候,我引入了vim-Bundle的管理插件的方式,升级了自己的vim管理插件的方式,并替换、更改了部分常用插件。
同时,将自己编写的部分插件,也融入到了这种新的vim插件管理方式中去。
特点有:
-
持久的guifont管理。通过自己的font.vim管理。本次修改之后,可以在下次启动的时候重新载入字体设置。 同时,快捷键
<A-+>,<A-->可以进行快速的字体大小调整; -
我习惯于用
<A-">,<A-'>等等 来快速输入,成对的标点;为此,我编写了 pairpunct.vim 插件。 主要提供了英文(含cpp,c等编程语言)的标点成对输入;以及中文如“”的快速输入;使用的时候,形如:
au FileType c,java,d \ call pairpunct#Bind_punct_complete()| \ call pairpunct#PairAdd_english_style()
对于中文标点,则可以使用
call pairpunct#PairAdd_chinese_style()即可。 -
为了与成对标点的快速输入配合,我还增加了插入模式的快速光标移动快捷键,作为配合。以方便地, 跳到成对标点符号的右侧;
如
i_A-l; 此外还有i_A-h,i_A-j,i_A-k。分别表示光标向右、向左、向下、行上移动一个字符。 -
此外,还有
system.vim插件,以方便地从(g)vim中,呼叫出文件系统浏览器、shell/cmd窗口,等等。 另外,该插件还附带有nerdtree_plugin/插件,可以支持在NERDTree窗口中,通过回车键, 执行文件系统浏览器的打开光标行文件夹。以及,用系统打开方式打开光标行所在文件。 -
为了方便编写cpp程序,以及,用cmake管理工程,我还额外配套了一个二进制工具:
gensketch.vim和vim脚本simple-cmake.vim;分别用来自动创建.gitignore;批量创建cpp的头文件和实现文件; 以及,批量创建cmake工程,或者qt工程文件。这些,都是基于模板来创建的。 -
自定义text(.txt)文本插件;我将text文本文件,重新设计为,以
*前缀为标题行标志的文件, 同时支持:CC快速生成大纲的方式,以支持进行快速章节跳转。并自定义了一些快捷功能,以方便中文文本文档的编辑。
备注 用到的vim语句:
'<,'>Collect ^Plugin\ '\zs.\{-}\ze'
'<,'>s/^\d\s\+\(.\+\)$/- [\1](https:\/\/github.com\/\1)/ge-
sarrow104/Vundle.vim
相比原版,修改了一下,对于本地rep插件的管理方式。 -
Valloric/YouCompleteMe
基于clang的,C/C++编程语言,补全神器。另外,还整合了,C#,python, golang等语言的补全环境。 -
scrooloose/syntastic
实时语法检查支持;支持C/C++等语言; -
valloric/MatchTagAlways
增强的符号、区块配对高亮。 -
majutsushi/tagbar
大纲视图;同样支持多种语言。 -
fatih/vim-go.git
golang开发环境;同样,由YCM整合。 -
LucHermitte/vim-refactor
vim源码重构插件;以上三个插件LucHermitte/lh-vim-lib,LucHermitte/lh-tags,LucHermitte/lh-dev,是本插件的基础库。 -
mattn/emmet-vim
emmet风格的,html标签,批量快速插入插件。 -
SirVer/ultisnips
增强的代码片段 -
Shougo/vimproc.vim
异步调用基础插件; -
idanarye/vim-vebugger
调试工具;继承多种调试器;比如GDB。依赖于Shougo/vimproc.vim -
myusuf3/numbers.vim
增强型行号显示。 -
WinterXMQ/escalt.vim
源自狐狸的escape序列插件。针对终端使用。 -
sarrow104/font.vim
字体自动管理调整的插件——适用于 gvim;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/include-complete.vim.git
C/C++头文件补全插件——支持过滤掉实现.c/.cpp文件;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/index.vim
.idx文件索引语法;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/fencview.vim.git
vim-scripts.org上的fencview插件备份。快速调整并查看文件的编码。 -
sarrow104/toggle.vim.git
快速切换vim某些状态,比如高亮/搜索;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/txt.vim.git
增强的text语法,自带大纲;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/system.vim.git
快速打开shell或者file-explorer;自带nerdtree支持;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/pairpunct.vim.git
快速输入成对标点。并快捷修改引号、括号;支持中英文,两种风格(全角,半角);依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/make.vim.git
makefile文件的补全,以及模板插件;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/tags.vim.git
ctags和cscope索引文件快速管理;依赖于sarrow104/util.vim.git,sarrow104/msg.vim.git -
sarrow104/gensketch.vim.git
基于外置模板的,批量文件生成工具(可生成目录树),使用外部工具; -
sarrow104/simple-cmake.vim.git
生成简单的CMakeLists.txt文件的工具。 -
tomasr/molokai.git
某vim颜色主题。 -
Yggdroot/indentLine
显示代码缩进级别的插件;需要随时计算,可能有些慢 -
ArkBriar/vim-qmake
qmake语法 -
richq/vim-cmake-completion
cmake补全 -
rhysd/vim-clang-format
基于clang-format的自动C/C++源码格式化插件 -
vim-utils/vim-man
方便的,vim方式 的manpage查看插件;要点:高亮,跳转 -
vim-scripts/dbext.vim
sqlstuff -
vim-scripts/SQLComplete.vim
sqlstuff -
scrooloose/nerdtree
最流行的 树形文件夹 浏览利器 -
Xuyuanp/nerdtree-git-plugin
git状态自动更新在NERDTree窗口 -
tpope/vim-fugitive
git命令行工具,整合到vim中 -
vim-airline/vim-airline
基于python的,vim状态栏、tab高亮显示,整合解决方案。 -
dyng/ctrlsf.vim
全文搜索;基于ack, ag or pt等工具。 -
lilydjwg/fcitx.vim.git
fcitx输入法兼容插件。进出vim插入模式的时候,自动调整中英文。 -
vim-scripts/mru.vim.git
most recent uese file list. -
dimasg/vim-mark
高亮自定义文本 -
xolox/vim-session
回话管理;(相比内建机制,本插件兼容tagbar,nerdtree等常用插件) -
qpkorr/vim-renamer
批量,快速的,vim方式,重命名工具。 -
Kris2k/A.vim
切换.h/.c文件 -
edsono/vim-matchit
if ... else跳转 -
tpope/vim-speeddating
<C-a>,<C-x>方式,沿用到表示日期的字符串。 -
aur-archive/vim-stlrefvim
stl的 vim-help -
vim-scripts/CRefVim
c-runtime-api的 vim-help -
easymotion/vim-easymotion
增强型,光标快速定位——”指哪打哪“ 类似浏览器alt + 数字 调整到具体widget的快速跳转功能 -
will133/vim-dirdiff
目录比较工具; -
ctrlpvim/ctrlp.vim
按名称,快速路径搜索特定文件。 -
rking/ag.vim
整合命令行工具ag的vim插件。
vim插件的管理方式,大致分为三个阶段:
-
手动管理阶段
基于
$vim文件夹目录的层级结构,手动下载vim插件包,并复制到对应的文件夹中。插件,一般也是一个目录结构的资源形式,通常用压缩包进行手动安装。这有一个麻烦,往往需要依赖第三方解压软件,而且,用户还可能弄错解压目的路径。
-
vimball安装脚本,半手动管理阶段vimball是一种vim本身支持脚本打包模式,在用vim打开该vimball(.vba)文件后,再vim:so %,即可将该插件,正确安装。经过时间的积累,第三方
vim插件越来越多,上述两种方式,其本质,都是将原本分开的插件包,重新放置到$vim文件夹中。 就好比linux中,C语言头文件一样,通常都是在/usr/include/下面 —— 具体,那个头文件,分属于哪个软件库,一般人是没法一眼就分清楚的。$vim插件,沿用这种管理方式,也必然导致插件之间的耦合,管理的混乱,冲突之后,不方便找出干扰,等等。 -
&rtp( 动态 runtimepath 路径) 省心的管理方式vim搜索脚本,有一个特性,就是它会依次搜索vim内部变量&rtp中的路径,并且按照$vim中,文件夹目录的层级关系来搜索。 就是说,如果动态管理这个&rtp变量,就可以达到,动态管理vim插件的能力 —— 同时,不同插件,分属于自己的 插件根目录,还能方便进行插件管理。同时,
github仓库的流行,也让这种管理方式变得容易。利用
vim这种动态载入特性的脚本,大概有pathogen,vundle,neobundle等等。它们的功能大同小异,都是将存放于github上的vim插件, 通过git命令行工具,下载到$VIM/bundle/插件名这样的独立的路径下;并将这个路径,动态添加到&rtp中。 区别在于,更多协议的支持,比如从http://vim-scripts.org/下载插件并自动管理;或者,支持更细节的插件管理设置。这样,动态启用、禁用某插件,就变得可能。而不像
前 git时代,只能手动删除某插件的所有文件,或者再手动添加回去……
Q: 如何让 NERDTree 插件可以使用 vim-devicons 图标字体?
A: 请参考 https://github.com/chxuan/vimplus 中,sh按照脚本中描述,进行操作。
Q: 为什么在安装 vim-devicons 插件之后, NERDTree 中只有部分图标字体正常显示,而相当部分是乱码“中文”?
A: 可能是设置了 guifontwide 属性的原因;vim-devicons 所用字体,会与部分中文字体混淆;
此时需要执行 :set guifontwide= ,清空 gfw 值即可。
Q: 为什么我的 vim 在终端下,没有 gvim 版本,颜色丰富好看?
A: 终端下,颜色支持有限,比如,windows 下的 cmd window,前景色,背景色,各支持8种。vim 默认只使用8种颜色,必然单调。
不过,可以根据终端的实际种类,设置具体的 t_Co 值,以支持尽可能丰富的颜色。比如,xterm 可以支持 256 种颜色。