这里只是简单地把exvim这个神器的doc文档搬运过来,个人比较喜欢从头至尾看下来。
项目地址:exvim
简介
exVim 是一个力求将 Vim 改良成集成编辑环境(IDE)的项目,exVim 在 Vim 中加入项目工程文件(.exvim)的概念, 通过使用 Vim 编辑项目工程文件 (.exvim) 触发 exVim 的插件, 从而让你能够在不同的工程中使用不同的 Vim 配置,插件配置, 甚至按需加载不同的插件. 总的来说, exVim 就是为了使 Vim 成为世界上最好用的 IDE。
更酷的是—我们能够使用exVim开发exVim((-_-)/)
功能
- 使用
.exvim
配置文件管理你的工程 - 通过单一命令更新工程。(更新的东西有 tags (自动补全用),cscoped-db (查找用),search-index, makefile, 等等)
- 工程文件存储位置(在位于你的工程目录下的‘./.exvim.your_project_name/’文件夹下)
- 通过你的
.exvim
配置文件为不同的通过加载不同的插件配置 - 更好的插件管理,避免繁杂的插件导致vim的臃肿杂乱
- 通过工程窗口浏览和操作你的工程文件
- 提供健全的类,变量和函数跳转(当然也有误差的)
- 支持工程范围内的全局搜索
- 支持自定义全局搜索引擎(用户可以使用 grep,idutils 甚至自己开发的搜索引擎)
- 提供强大的全局搜索结果过滤功能
- 可以生产类的集成图
- 增强版的 quick-fix 窗口
- 整合了流行实用的vim插件
exVim 是怎么工作的呢?
通过 your_project_name.exvim
文件进行编辑和保存你的工程配置,然后使用 Vim 打开它。
在启动 Vim 后,exVim 将会解析这个文件,并且将这些设置应用于你的工程。
常用的工程配置都包含:
- Vim 的窗口布局(何处打开插件窗口,初始化时打开的窗口,最后退出时候的窗口布局等)
- 文件和文件夹的过滤机制
- 工程中所需要使用的插件及其插件相关配置
- 外部工具,比如 grep,idtuils(查找), ctags(补全及函数,宏列表使用), cscope(查找)等
- 针对本工程的外部工具的设置
- 自定义的扩展设置
- 其他(未知的探索才是最刺激的)
exVim 必须确保工程文件由 your_project_name.exvim
解析生成, 保存在某处位于你的工程目录下的 ./.exvim.your_project_name/
文件夹中.
此目录下的文件都是为了使你的工程保持的干净,并且更好的使用外部工具。
这些工程文件主要包括如下内容:
- 全局搜索索引及结果(由 idutils 生成)
- tags(标签,标记,标注等)
- 关系图
- 错误信息
- 临时文件
- 其他
exVim 启动后,使用 :Update
命令,exVim将可以帮助你更新上面的文件。
exVim是怎么整合vim插件的呢?
exVim 旨在想通过 纯粹的Vim脚本 实现更多更强大的功能。
为了避免重复造轮子,我们精心挑选在Vim社区中经受时间考验的vim插件,但是现有插件还是不能满足我们的要求,对于这些缺失
的功能,我们认为我们能够做的更好,所以我们开发它,并将其进行整合放在 GitHub 的 exVim organization
下面为我们收集,整理和开发 Vim 插件的一些标准:
- 只使用 Vim 脚本进行插件的开发
- 遵循 Unix 哲学:仅做好一件事情
- 尽可能少的依赖
- 高质量的,高性能的代码
- 积极的社区
- 能够被多种插件管理插件进行使用,如 Vundle,pathogen
想知道更详细的插件信息,请参考插件
安装
安装必备
下载/更新exVim
注意事项
安装exVim将不会覆盖你已经存在的Vim环境,这个仓库所包含的文件,变化,仅仅运行在它自己
的文件夹。
通过提供的shell脚本osx/mvim.sh
,它将会不破坏你现有的vim设置而运行exVim自己的环境设置。
这意味这你可以预览,尝试,及测试exvim,并且决定后面替换或者结合你的VIM。
注意事项:
对于Linux和苹果用户,如果你从downloads页面下载
exVim包,你可以忽略步骤1。
如果你从下载下载完整的exVim包,则可以忽略步骤1和2.
对于Windows用户,你可以下载“exVim Windows
安装包”, 如果你做了,那么你可以忽略本节。
Mac上的下载/更新
-
克隆仓库至你的目的地:
bash git clone https://github.com/exvim/main
-
执行'osx/install.sh' 脚本:
bash cd main/ sh osx/install.sh
注意:
osx/install.sh
仅仅更新main/
文件夹里面的vim插件。
并不会覆盖你的~/.vimrc
,~/.vim/
,不用担心哦!
当你运行了这个脚本后,main/
文件夹会变成一个exVim的开发环境!
-
预览exVim
sh osx/mvim.sh your/project/path/foobar.exvim
**注意:**你需要确定"mvim"命令在你的终端环境中是有效的。为此,执行"mvim"并查看
结果。如果无"mvim"命令,你应该没有安装MacVim或者你没有使 "mvim"作为默认命令。
你可以 http://code.google.com/p/macvim/. 从下载MacVim, 解压下载的包裹,找到
mvim文件,并且将它放到 /usr/local/bin(执行下面命令).cp mvim /usr/local/bin
Linux下的安装/更新
如果你从下载页面获取exVim主要的包,你可以忽略步骤1。
如果你从下载页面获取exVim完整包,你可以忽略步骤1和2。 -
克隆仓库至你的里面目的地(执行下面命令):
git clone https://github.com/exvim/main -
执行"unix/insall.sh"脚本:
cd main/
sh unix/install.sh注意:
unix/install.sh
仅仅更新main/
文件夹里面的vim插件。
并不会覆盖你的~/.vimrc
,~/.vim/
,不用担心哦!
当你运行了这个脚本后,main/
文件夹会变成一个exVim的开发环境! -
预览exVim:
sh unix/gvim.sh your/project/path/foobar.exvim
Windows下的下载/更新
1.确保vim命令在你的cmd窗口是可以运行的。为此,需要在cmd窗口执行vim命令,并且查看
结果。如果没有,可能你没有安装gvim或者你没有将gvim安装目录放到你的'PATH'环境里。
你可以下载gvim安装包,下载页面为:下载。 -
参考文档Vundle for Windows
设置Git和Curl。 -
下载exVim工程从git或者zip file. 并解压它到一个理想目录,比如
D:\exVim
。
git clone https://github.com/exvim/main
-
进入exVim文件夹,执行
install.bat
批处理文件
C:\>cd exVim C:\exVim>call windows\install.bat
执行此文件后,你的D:\exVim
文件夹会成为一个exVim的开发环境。
注意: 安装完成后可能需要重启电脑才能够使某些外部工具生效. -
预览exVim:
C:\exVim>call windows\gvim.bat "d:\your\project\path\foobar.exvim"
安装exVim
如果你喜欢exVim,并且想直接运行它而不是通过预览命令,你可以使用下面的俩个选项:
选择1(推荐):获取exVim并替换你当前的vim
建议你下载exVim至~/exVim
目录。编辑你的vimrc文件,在Max/Linux下默认的是~/.vimrc
,
在windows下是C:\Users\your_name\_vimrc
。
在你的vimrc文件中,仅仅需要写:
let g:exvim_custom_path = '~/exvim/' source ~/exvim/.vimrc
现在你就可以直接运行exVim.
选择 2: 替换你当前的vim
为了替换你当前vim版本至exVim,你可以运行如下命令脚本:
`# for mac user
sh osx/replace-my-vim.sh
# for linux user
sh unix/replace-my-vim.sh
`
如果你是windows用户,你可以运行下面的批处理脚本在当前命令窗口
`D:\exVim>call windows\replace-my-vim.bat
上面的命令主要会做如下事情:
- 用exVim的配置文件'.vimrc'替换
~/.vimrc
- 拷贝
.vimrc.plugins
至~/.vimrc.plugins
. - 拷贝并重命名
vimfiles/
至~/.vim/
.
注意事项: 在windows下,exVim的.vimrc
还会重写运行路径的设置,以便它搜索
~/.vim
文件夹而不是~/vimfiles
。
安装外部工具(可选但重要)
在我们使用exVim之前,我必须安装一些外部工具,以便于exVim更强大。
默认的,exVim集成了:
- cTags ( for ex-tags, ex-symbol )
- id-utils ( for ex-gsearch )
- cscope ( for ex-cscope )
这些外部工具能够在.exvim
工程配置文件关闭。为了使解析结果和这些外部工具协同工作,
exVim还需要其他,比如:
- gawk
- sed
所以我们强烈推荐你安装这些工具前阅读 getting start with exVim.
Mac
Mac用户能够使用 Homebrew 安装他们, 跳至下载 页面,然后输入Max章节的相关命令。
**注意事项:**如果你已经下载了XCode的命令行工具包,你可能有一个旧版本的cTags。
你需要人为用Homebrew's 下载包将其替换掉。
Linux ( Ubuntu, … )
Ubuntu用户可以使用apt-get
命令安装,跳至 下载页面,
参考Mac章节,然后使用apt-get
命令替换掉brew
命令即可!
Windows
Windows用户可以使用预编译的二进制包进行安装. 我已经提供下载。
下载并解压这些文件,将它们放到你的理想目录,比如C:\Users\Foobar\Bin
, 然后添加这个目录到你的环境变量PATH
中,并确保他们在命令行窗口都是可以运行的。
注意: 一般安装这些二进制包,并加入到PATH
后可能需要重启才能够生效.
安装Powerline字体(可选)
exVim默认是打开poweline字体支持的。为了使它工作,你必须在你的系统上安装Powerline字体。
我们强烈推荐DejaVuSansMono字体,仅仅需要 下载DejaVuSansMono-for-powerline.zip,
然后解压,手动安装.ttf
文件。
你也可以挑选其他powerline-font字体 Lokaltog/powerline-fonts
如果你认为没有一个字体让你满意,你也可以拼凑自己满意的字体
fontpatching
开始
我们假设你已经完全安全了 exVim. 如果没有,请移至 安装。
生成 .exvim 工程文件
进入你的当前工作工程的根目录,比如:~/foo/bar/foorbar/
。生成 .exvim 工程文件在这个目录(Mac下执行的命令如下):
如果在 Windows 下,则可能是类似于下面的情况:
如果你检查你的工程目录,此目录下会存在一个隐藏文件夹,其命名为 .exvim.foobar
。
这个文件夹包含所有的 foobar.exvim
工程在使用中需要的工程配置文件。
注意事项: 你能够创建多个*.exvim
文件在一个工程中。这就方便你为了不同的目的应用
使用不同的设置。
创建工程树
将光标移至左边的工程窗口 按下 <leader>R
[1],
你将通过ex-project窗口看见你的工程文件,如下所示:
你可以通过*.exvim
文件包含或者排除第一层目录。为了达到上述目的,你需要打开*.exvim
文件,找到包含folder_filter +=
的行,然后设置它的选项。
比如:
这里我选择了 exclude
模式,并且过滤掉此工程目录下的 \build
, \_log
, 和
\_ext
文件夹。当你完成此编辑,执行 :w
命令保存 .exvim
文件,这个操作会触发
exVim 刷新你的工程设置。
切换光标至你的 ex-project 窗口,然后通过 <leader>R
[1] 重组你的工程树。
更新工程
通过执行 :Update
命令,你将会更新 exVim 工程(如下所示):
注意事项: Windows 用户将会看到一个弹出黑呼呼的窗口,然后刷出一串文字,就是
说明 exVim 在解析你的工程配置文件了,用于生成一些辅助文件。
默认的,exVim 将会使用如下工具剖析你的工程:
- cTags
- id-utils
- cscope
- …
然后会生成一些文件保存在 .exvim.foobar/
文件夹下供 exVim 使用。这些文件将会供 exVim 插件使用,主要有:
- ex-project
- ex-gsearch
- ex-symobl
- ex-tags
- NERDTree
- AutoComplPop
- …
一旦上述工作你完成,exVim 将会成为一个强有力的编程及分析工具,它会孜孜不倦的服务于你的工程。
注意事项: 当你改变你的工程后,你应该需要再次手动的去执行:Update
命令,
exVim使用静态的方式分析工程,它不会检测你的改变,这是由于我们认为性能是重要的,
并且根据我们的经验,手动执行:Update
也不是很糟。
实用命令
现在你已经掌握了 exVim 基础,下面让我们快速测试一些功能:
命令 | 用处 |
---|---|
<leader>gg | 全局搜索当前光标下的单词,并将结果展示在ex-gsearch窗口 |
<leader>] | 全局搜索当前光标下的单词,并将结果展示在ex-gsearch窗口 |
<leader>sg | 列出所有的当前单词的定义及声明,并将结果展示在ex-symbole窗口。 |
<leader>sg | 列出所有的当前单词的定义及声明,并将结果展示在ex-symbole窗口。 |
:GS <word> | 命令行全局搜索 |
在 ex-gsearch, ex-symbol 窗口,又可以通过 Vim 的 /
命令搜索一个模式段,并且通过
<leader>r
过滤搜索结果。记住,你可以在任意的 ex-plugin 窗口使用上面的命令,这
就意味着:
- 你能够在 ex-project 全局搜索一个单词
- 你能够在 gsearch 结果中列出 symbols 列表
- 你能够在 ex-symbol 窗口跳至一个tag
- …
仅仅使用它们自在的过滤和定位你的最终结果。
更多关于 exVim 插件细节的介绍请阅读 插件. 你也可以查看:
ex-project,
ex-gsearch,
ex-symbol,
… 获取每个插件的详细信息,和它们的配置。
脚注
- 这里
<leader>R
的意思是按下键'\'
;, 紧接着按下大写的R
.
vim推荐第三方插件使用<leader>
(默认.\
)开始你的操作,并且vim中的操作
是大小写敏感。
工程窗口
exVim默认使用ex-project浏览工程文件。
你可以通过按下<ctrl-Tab>
将工程窗口切换至NERDTree窗口。你也可以设置.exvim
文件中的
project_browser=nerdtree
将NERDTree作为你的默认的工程浏览窗口。
*_注意: *_最新的配置好像已经不能通过<ctrl-tab>
进行切换了, 需要用户自己配置,而且工程
窗口也没有提供打开和关闭的快捷键, 参考快捷键如下:
-工程窗口打开和关闭快捷键: nnoremap <unique> <silent> <F3> :EXProjectToggle<cr>
-NERDTree打开和关闭快捷键: nnoremap <unique> <silent> <F2> :NERDTreeToggle<cr>
当你打开exVim工程时,你将会看到:
**注意:*怎么打开exvim工程呢?就是用你的vim打开一个.exvim类型的文件.
构建工程浏览树
在开始章节,我已经展示了如何使用ex-project插件构建工
程树。基本上只需要将你的光标移至工程窗口,然后按下<leader>R
即可。
ex-project将会构建如下所示的工程树:
刷新当个文件夹
有时候,你仅仅改变一个文件夹的文件,但是使用<leader>R
将会构建整个工程,有点大才小用,这时候我们
可以将光标移至你改变了的文件夹名上,然后按下<leader>r
,此时,它仅仅会刷新你光标下的文件夹。
过滤文件夹
ex-project允许你在构建工程树时包含或者排除子目录。
exVim主要通过.exvim
实现此功能。打开你的your-project.exvim
, 找到folder_filter_mode
和folder_filter
项.、
fo2lder_filter_mode
有'include'和'exclude'俩个值。 folder_filter
可以是以,
隔开的
工程子目录的文件夹名。
建议你的工程子目录是: bin, src, tests, core, examples 和 docs.
如果你希望构建的工程树里面仅仅包含src和core,你只需要将选项设置成如下:
folder_filter_mode = include
folder_filter += src,core
`
如果你希望构建的工程树里面包含除了_bin_和_test_之外的目录,你可以设置为:
folder_filter_mode = exclude folder_filter += bin,test
注意事项:
1,逗号后面不能有空格;
2,为了使你设置的选项工作,需要保存设置,然后将光标移至工程窗口,重新构建。
过滤文件
你可以使用your-project.exvim
文件中提供的file_filter
选项。file_filter
接受以,
隔开
的文件名后缀。
比如,如果你只希望展示以_.lua_, .c, _.h_为后缀的文件,你只需要将file_filter
设置为如下即可:
file_filter += lua,c,h
file_filter
也接受以__EMPTY
命名的无后缀的文件,比如:
file_filter += __EMPTY__,lua,c,h
这将会将类似于LICENSE, README, Makefile, … 的文件添加到你的工程树里。
注意事项:
1,逗号后面不能有空格;
2,最好每个工程都明确指明此项,如果不指明可能会发生一些错误;
3,为了使它工作,同样需要保存并且重新构建。
需要获取更多关于文件及文件夹过滤的信息,可以阅读Config .exvim.
文件夹的折叠
你可以将光标移至一个文件夹名所在列,通过重复按下<Enter>
折叠和打开一个文件夹, 如下所示。
你也可以在工程窗口使用vim内置的折叠快捷键,比如:
- 使用
zO
和zM
打开和折叠整个工程。 - 使用
zo
和zc
打开和折叠当前文件夹。 - 使用
zk
和zj
移至俩个折叠的中间。
工程窗口内光标的移动
最基本的,你可以使用h
,j
,k
,l
和 arrow keys
在工程窗口移动。ex-project插件也提供了
<ctrl-k>
和 <ctrl-j>
俩个快捷键用于在俩个文件夹间快速移动。
你应该已经注意到了,ex-project使用 {
和 }
作为它的折叠标志:
这意味着你可以使用折叠跳转命令及快捷键:
- 将你的光标移到折叠的开始或者结束处, 然后按下
%
就可以匹配折叠 - 使用
[{
和]}
可以跳至上一个或者下一个折叠
编辑窗口的使用
编辑文件
当你在工程窗口的文件上按下<enter>
时,ex-project将尝试在编辑窗口打开文件。你也可以通过按下
<shift-enter>
将编辑窗口分割成俩个进行文件的编辑。
打开文件浏览器
当在工程窗口的文件夹下按下<shift-enter>
时,ex-project将会使用系统自带的文件浏览器,并在里面打开
当前文件夹。这当你想在一个目录中操作一些文件时是非常有用的。
定位你当前的文件
如果你正在编辑一个文件,然后试图定位在工程窗口的位置,可以按下<leader>fc
。这个操作将引起
ex-project搜索当前编辑文件,并将光标移至它。
创建新文件
想在工程窗口创建一个新文件,可以将光标移到一个文件或者文件夹下,然后按下o
, ex-project将会帮你
创建一行,如下所示:
输入文件名,按下<enter>
键,将在编辑窗口打开。编辑,然后使用:w
保存,将会创建一个新文件。
创建一个新文件夹
创建一个文件夹比创建文件复杂多了。首先你需要将光标移动到一个已经存在的文件夹下。这样ex-project才会
理解你要在那个文件下创建一个新文件夹。做完上面的步骤后,按下O
(大写的o),ex-project将会要求你输入
文件夹名:
当你输入名字并且按下enter键确认后,ex-project将会直接在选定的文件夹下创建一个新目录。
使用NERDTree
ex-project能够和NERDTree完美的工作。将光标移动到你的工程窗口,然后按下<ctrl-tab>
,工程窗口将会
自动切换至NERDTree。更帅的是,<leader>fc
依旧能够使用。切换回去的命令也是按下ctrl-tab>
。
*_注意: *_最新的版本好像不能切换!
.exvim 工程间的切换
你可能有许多个.exvim
文件在你的工程里, exVim支持他们之间动态的切换, 通过打开不同.exvim
文件,
并且通过:w
显示保存此文件,将会切换到新的工程。
全局搜索
exVim使用ex-gsearch进行全局搜索。它也在必要
时候和id-utils创建的管道协同工作。总之,当你使用:Update
后,exVim将会生成被
ex-gsearch使用的ID文件。
*注意事项: * 如果不能搜索,首先看你这个ID文件是否已经生成!
查找文本
ex-gsearch有俩个主要的方式可以在你的工程中
搜索文本。
<leader>gg
: 将会搜索光标下的单词。:GS <word>
: 将会搜索<word>
或包含<word>
的文本:GSW <word>
:将会搜索完整的<word>
搜索结束后,ex-gsearch将会在全局搜索窗口列出搜索结果。选中搜索项,按下<enter>
键,编辑窗口将会跳至对应处,你可以通过按下****按键关闭搜索窗口!
*_注意: *_自己修改这个关闭窗口的快捷键,如下:
call exgsearch#register_hotkey( 2, 1, 'q', ":EXGSearchClose<CR>" , 'Close window.')
过滤
ex-gsearch 将会展示如下所示的搜索结果:
无论如何,有时这里会有很多的结果,我们可能希望过滤它们。es-gsearch允许我们使用Vim
的搜索模式,比如/
,?
等等(更多的可以查看vim的搜索相关的帮助文档)。在你确认vim的
搜索模式后,你就可以使用ex-gsearch的过滤命令在搜索窗口过滤出正确的结果。
每个搜索结果都可以分为文件部分和文本部分,ex-gsearch针对不同的过滤目的提供了不同
的过滤方法:
命令 | 用途 |
---|---|
<leader>r | 移除搜索结果中文本部分不包含vim搜索模式中所包含的。 |
<leader>d | 移除搜索结果中文本部分包含搜索模式包含的。 |
<leader>fr | 移除搜索结果中文件部分不包含vim搜索模式中所包含的。 |
<leader>fd | 移除搜索结果中文件部分包含搜索模式包含的。 |
比较酷的是,你可以使用这种方法一边又一边的过滤,直到结果是你想要的为止。例如:
- 测试
:GS test
, 获取关于test
的搜索结果。 - 我们理想中的结果只是
test foobar
。所以我们在搜索结果窗口中使用vim的/
模式搜索test foobar
. - 使用
<leader>r
过滤它。 - 我们只想过滤文件testXXX.js。再一次在已经过滤的结果中使用vim的
/
搜索test\*.js
. - 使用
<leader>fr
过滤它. - …
做完这一切后你就会获取最终结果了。
小窍门
- 搜索单词
<leader>gg
和:GS
命令都将会搜索包含或者等价于此单词的文本。有时候你只想搜索此单
词,此时,你可以使用Vim的搜索模式\<word\>
在过滤命令中。但是exvim给你提供了更快捷
的方法,将光标移动到搜索标题那里,按下gd
,vim将会自动将光标下的单词放入\<
和\>
中间作为搜索模式进行单词搜索。
- 获取上一次/下一次搜索结果
ex-gsearch的搜索结果窗口仅仅是一个vimbuffer。每次你搜索或过滤它都会使它重新记录并
生成撤销历史。你可以使用u
和<ctrl-r>
获取上次或者下次的搜索结果。
问题
已知问题#2和#3展示了id-utils在windows下面工作时候的问题。
当我使用使用 :GS 搜索文本"foo::bar"时,它什么都没有显示.
当你使用文本,比如"foobar.h","foo::bar"和"foo.bar()",你没有获取到结果,但是你又100%确定这单词是包含在你的代码中。
原因可能是ex-gsearch仅仅接受words,这个就意外着你不能在你的:GS
命令中包含',',
'.'甚至空格。
为了获取完整的"foo::bar"模式,我们建议你首先使用":GS foo"。然后使用ex-gsearch的过滤命令进行过滤以获取最终结果。
标记与符号
Vim的标记系统对于我们是非常有用的。使用强大ctags工具,我们能够在vim中分析
代码生成tags标记。
exVim通过采用 ex-tags 和 ex-symbol
插件进行改善。exVim通过:Update
命令生成tags。
选择标记
在vim中可以使用<ctrl-]
和:ts tag-name
跳转到对应tags。ex-tags
提供同样的办法但是却不同的命令—<leader>]
和:TS tag-name
。
你可以认为他们是原版的装饰版。
例如,假设我们想列出dlmalloc的定义与声明,我们输入:ts dlmalloc
,vim将会
给我们展示如下内容:
然后,我们可以输入对应的编号选择,或者输入<Esc>
取消它。
在ex-tags ,我们输入 :TS dlmalloc
,然后Vim 将会展示:
这时,你可以向上或向下移动光标,并通过''选择。
符号
符号是标记的集合。通过exVim的:Update
命令,再通过ctags生成tags文件后,它将会读
tags,提取tag进入符号文件。这个符号文件被 ex-symbol
用于快速的搜索。
当你忘记精确的tags单词时,符号将会非常有用,它将会帮助你在tags名称表中搜索,并允许
你通过类似于Global Search的过滤方法过滤结果。
符号列表
ex-symbols 提供四个不同的办法在符号窗口列举tags:
命令 | 用途 |
---|---|
<leader>ss | 列举所有的symbols |
<leader>sq | 打开symbol窗口,并显示最后一次的symbols列表 |
<leader>sg | 使用当前光标下的单词作为搜索tag,列出所有匹配项 |
:SL <your-tag> | 使用<your-tag> 作为搜索tag,列出所有匹配项 |
过滤
ex-symbols 将会列出搜索结果,类似下图:
如果你通过<leader>ss
,这里将会有太多的结果。ex-symbol 设计了类似于 Global Search
的过滤命令。
ex-symbol允许我们使用Vim的搜索命令,比如/
, ?
等等(更多信息请:help search-commands).
当你确认Vim的搜索模式后,你可以使用ex-symbol的过滤命令移除不想在symbol窗口显示的
结果。
命令 | 用法 |
---|---|
<leader>r | 移除symbol窗口中不包含Vim搜索模式的项 |
<leader>d | 移除symbol窗口中包含Vim搜索模式的项 |
更酷的是,你可以一边又一遍的过滤这个结果,直到剩下足够少结果用于选择。
确认搜索
通过按下<Enter>
你将会选择ex-symbol的搜索。默认的,ex-symbol对所选符号使用:ts
命令。
在ExVim中,如果ex-tags被安装,则使用:TS
.
小技巧
*在任何地方使用 <leader>sg
, <leader>gg
和<leader>]
*
全局搜索命令 <leader>sg
, <leader>gg
和 <leader>]
能够用于Vim中的所有buffer。
这个就意味着他们不仅仅能够用于编辑窗口,也能够用于插件窗口。
例如:
通过 :GS foobar
执行搜索后. 在你的 "foobar" 结果窗口:
- 你能过选择一个单词,通过
<leader>gg
再次搜索 .2. 通过<leader>]显示一个tag
- 通过
<leader>sg
显示symbol.
在你的symbols列表中
- 你能够确认一个选择
- 你能够移至一个symbol,然后通过
<leader>gg
搜索它
exVim所有的插件一起很好的协同工作。在windows下不用担心,当你做完全局的
ex-commands后,它们将会自动的关闭。
使用<leader>sg
或 :SL <your-tag>
获取类成员
当你在一个类名上面使用<leader>sg
或:SL <your-tag>
时,它将会为你显示此类及其成员。当你想查看一个类的成员函数及变量时,是非常有用的。但是请记住,ex-symbol并不能够智能为你显示继承关系。
下面是我在一个C#工程中,使用<leader>sg
获取"exSprite"类时的结果:
使用 <leader>sg
或 :SL <your-tag>
在不同的类中获取成员
不像在一个类中浏览成员,你也可以使用 <leader>sg
和 :SL <your-tag>
在不同的类成员中得到相同的
定义。
例如,在一个c++工程中,你可以输入:SL push_back
, 它将会为你显示不同类中的"push_back"函数。
_使用完整symbol跳转替代<leader>]
_
As we know <leader>]
will list all possible tags defines and delcarations of the word under your cursor.
That means you can't expect <leader>]
list "ex::Array::push_back" since it is three words in Vim.
地球人都知道的,我们可以通过<leader>]
列出当前光标下的单词所有可能的tags定义和声明。这
意味着你不能指望 <leader>]
列出"ex::Array::push_back",因为它在 Vim 中是有三个字。
这里有俩个办法解决此问题:一个是输入完整的定义 :TS ex::Array::push_back
;二,我们在ex-symbol中选择它。它将会使用完整的symbol作为你的:TS
搜索模式。
类继承视图
exVim 将会允许用户生成指定类的类继承图。这是由 ex-hierarchy 插件完成的.
当运行:Update
命令后,exVim将会生成继承文件。这个文件将会从你的ctags生成信息里面提取继承信息。它记录你工程中类的继承关系。
ex-hierarchy 插件在你输入一个类时将会解析这个继承文件,它将会生成一个Graphviz点格式文件,然后使用Graphviz画一个.png格式的图片。
目前, ex-hierarchy 支持c++,jvava ,python等等。
下面是一张在ex2D中exPlane
类继承图:
显示类继承图
ex-hierarchy有三个命令用于打印和显示类继承图:
:HV <class>
: 将会显示<class>
的子类和父类.2.:HVP <class>
: 将会<class>
的父类.:HVC <class>
: 将会<class>
的子类.
让我们以上面的图片作为例子。上面的图片是由:HV exPlane
命令生成的。当你使用:HVP exPlane
时,结果将如下所示:
:HVC exPlane
命令的结果将是:
你也可以使用 <leader>hv
键绑定用于运行:HV
命令用于生成当前类的继承关系图:
注意: 生成的图片保存在 .exvim.your-project/hv.png
, exVim 将尝试使用你默认的图片浏览器打开它。
配置.exvim
exVim 使用 ex-vimentry 插件来创建和设置一个项目。
ex-vimentry 插件会将 .exvim 结尾的文件里的配置应用在你的项目中。
.exvim文件的语法
默认选项
folder_filter_mode (option)
选项:
- include(备注:需要包含的文件夹)
- exclude(备注:需要排除的文件夹)
folder_filter_mode
告诉exvim在 folder_filter
中使用哪种模式
folder_filter (array)
folder_filter
的值为文件夹。它会按照 folder_filter_mode 里的设置来读取文件夹,即加载
或者排除哪些文件夹。
示例:
当你将filter设置为:
folder_filter_mode = include
folder_filter += foo,bar
仅仅叫做foo或者bar的文件夹会在你的 ex-project 窗口中显示。
当你将 filter mode 设置为:
folder_filter_mode = exclude
folder_filter += foo,bar
叫做foo或bar的文件夹不会在 ex-project 窗口中显示
这个选项也影响如下插件:
- ex-project* NERDTree
- ex-config
- id-utils ( generate id-lang-autogen.map )
- ctags
file_filter (array)
file_filter
的值是文件类型。它表示你希望在 exVim 项目中看到的文件类型。
示例:
file_filter += c,cpp
filter 使 exVim 接受后缀为 ".c .cpp" 的文件
file_filter
也接受 __EMPTY__
的值,它表示文件没有后缀
file_filter += __EMPTY__,c,cpp
filter 也接受没有后缀的文件,比如:
LICENSE, README, Makefile, …
这个选项影响如下插件:
- ex-project
- NERDTree
- ex-config
- id-utils ( generate id-lang-autogen.map )
- ctags (TODO)
默认情况下,如果这个选项是空的,那么 id-lang 会使用在 tools/idutils/
的 id-lang.map
来创建 ID。当这个选项有被设置,ex-config 会在 .exvim.project/
文件夹下创建 id-lang-autogen.map
并且会使用它代替 id-lang.map
file_ignore_pattern (array)
file_ignore_pattern
的值为文件名。并且与该值匹配的所有文件将在 exVim 中被忽略
示例:
file_ignore_pattern += useless.txt,*.min.js,_OLD_*.cpp
会使得 useless.txt
、所有以 min.js
结尾的文件、以 _OLD_
开头的 cpp 文件在 exVim 中被忽略。
注意你唯一能使用的通配符是 *
enable_restore_bufs (bool)
当开启时,exVim 会存储你所有打开过文件的缓存在 .exvim.your.project/restore_info
中。
当你下次打开这个 exVim 项目时,它会将文件还原到最后一次存储的状态。
Post Init
当 exVim 解析完 .exvim
文件后,它会调用 g:exvim_post_init
函数(如果存在的话)。你可以在你的.vimrc
文件中自定义这个函数已实现自己的其他配置。
这是一个例子 reference教你如何
在你的脚本中使用这个函数
Multiple .exvim files
你可以在一个项目中拥有多个 .exvim
文件,这个选项允许你在一个项目中运用不同的配置。
配置 .vimrc
exVim 为用户提供4种不同的 .vimrc: .vimrc
, .vimrc.plugins
, .vimrc.plugins.local
,.vimrc.local
.
首先被载入的文件是 .vimrc,我们都熟悉它。在 .vimrc 配置你的 vim 之前,它会在同一个目录检查是否存在 .vimrc.plugins
然后载入它。这是 exVim 插件的默认设置。在 .vimrc.plugins
被运行后, .vimrc.plugins.local
会被载入。在它之后,.vimrc
才开始使用自己的设置,在最后,它会检查并载入 .vimrc.local
.vimrc
.vimrc
的结构可以分为以下几部分:
-
setup encoding
-
filetype off
-
load
.vimrc.plugins
if exists* deafult plugins settings
-
load
.vimrc.plugins.local
if exists* install your own plugins
- customise plugins
-
filetype on
-
general settings
-
visual settings
-
Vim UI settings
-
text edit settings
-
auto commands
-
key mappings
-
load
.vimrc.local
if exists* customise
- overwrite default settings
.vimrc.plugins
这是 exVim 插件的默认配置文件
.vimrc.plugins.local
你可以把你自己对插件的设置放在这个文件里,也可以安装插件(在这文件里),你可能会有如下疑问:
- 我们能否放在
.vimrc.plugins
? - 为什么我们需要
.vimrc.plugins.local
? - 为什么不使用
.vimrc.local
来代替它?
简单来说,.vimrc.plugins.local
是为了防止用户覆盖掉 .vimrc.plugins
, 并且,你可以保持 git 改变并加入自定义配置而不用担心 git 的 updates
我们默认使用 Vundle,它要求把插件管理脚本写在 filetype off 和 on 之间。这就是为什么我们使用 .vimrc.plugins.local
和 .vimrc.local
. 第一个确保插件代码在 filetype off 和 on 之间。
.vimrc.local
在 .vimrc.local
上你可以做很多事情,比如:
自定义你的字体:
自定义你的 vim-airline 主题:
<span class="k">au</span> <span class="nb">VimEnter</span> * exec <span class="s1">'AirlineTheme your_theme'</span>
关闭 vim-airline:
au VimEnter * exec 'AirlineToggle' " close vim-airline plugin
配色配置
exVim 的配色由三部分组成: 你自己的Vim配色, exVim 插件的语法高亮和插件的配色. 你可以按照以下步骤来定制你的配色:
安装你的配色
exVim 提供了三种方法安装你的自定义配色
方法1. 在 ex-colorscheme 中安装(推荐)
首选的方法是在 ex-colorschemes 中安装自己的配色, 这种方法仅仅需要你把自己的配色文件放到 vimfiles/bundle/ex-colorschemes/colors/
文件夹中. 请先确认你已经在 .vimrc.plugins
中有安装了 ex-colorschemes 插件
方法2. 在 Vim 颜色文件中安装
如果你不喜欢安装 ex-colorscheme 插件, 你可以像安装 Vim 插件一样安装配色. 即将你的配色文件放在 vimfiles/colors 文件夹中.
方法3. 通过 Vim 插件 Vundle 安装
方法2 不遵循 Vim 的插件管理结构. 所以我们可以使用 Vundle 或者 Pathogen 来安装我们自己的配色. 和 ex-colorschemes 一样, 安装你自己的插件, 把你的配色文件脚本放在里面然后上传至 Github, 然后再在 .vimrc.plugins.local
中用Vundle 安装
配置 exVim 插件语法高亮
exVim 使用 ex-aftercolor 插件来动态更新配色. ex-aftercolor 会在配色改变运行定义在其内部的配色代码, 从而实现动态改变配色的功能.
ex-aftercolor 会触发运行路径中 after/
文件夹的颜色脚本. 详细内容请参考 ex-aftercolor 项目.
exVim 把它自定义的脚本放在 vimfiles/bundle/ex-config/after/colors/
文件夹中, 默认情况下, 他支持 solarized 和 ex-lightgray 两种配色的动态改变.
为了自定义你自己的配色, 你必须创建一个和你的配色文件一样名字的文件在 after/colors
文件夹下. 你可以选择放在如下几个地方:
- vimfiles/bundle/ex-config/after/colors/ (如果你选择方法1建议选择这个)
- vimfiles/bundle/ex-colorschemes/after/colors/ (如果你选择方法1建议选择这个)
- vimfiles/after/colors/ (如果你选择方法2建议选择这个)
- your_own_color_bundle/after/colors/ (如果你选择方法3建议选择这个)
一旦你确定了放置位置并且创建了文件, 那么你可以参考 vimfiles/bundle/ex-config/after/colors/solarized.vim
或者
vimfiles/bundle/ex-config/after/colors/exlightgray.vim
, 沿用他们的代码来配置你自己的颜色.
如下是一个在 aftercolor 脚本中你可以配置的语法高亮清单:
Name | Usage or reference |
---|---|
exConfirmLine | Color of selected line in ex-gsearch, ex-symbol, ... window |
exTargetLine | Color of selected line in edit window |
ex-showmakrs Highlighting | Check `:help showmarks-highlighting` |
ex-easyhl Highlighting | Check `:help easyhl-highlighting` |
ex-project Highlighting | Check `:help exproject-highlighting` |
ex-gsearch Highlighting | Check `:help exgsearch-highlighting` |
ex-symbol Highlighting | Check `:help exsymbol-highlighting` |
自定义打开文件的行为
在ex-project中打开文件
在exvim中,你可以通过直接修改代码的形式自定义ex-project打开文件的行为.
主要通过编辑ex-project/autoload/exproject.vim
, 找到exproject#confirm_select
,添加你的代码.
在ctrlp中打开文件
ctrlp插件提供自定义的方式, 例子如下:
let g:ctrlp_open_func = { 'files': 'CustomOpenFunc' }
function! CustomOpenFunc(action, line)
echomsg a:line
let filetype = fnamemodify( a:line, ':e' )
" echomsg filetype
" silent echohl None
if filetype == 'mp3'
let playmp3cmd = 'mpg123'
execute "silent !" .playmp3cmd.' '.a:line
return
elseif filetype == 'png'
let imagecmd = 'gthumb'
execute "silent !" .imagecmd.' '.a:line
return
elseif filetype == 'jpg'
let imagecmd = 'gthumb'
execute "slient !" .imagecmd.' '.a:line
return
else
" Use CtrlP's default file opening function
call call('ctrlp#acceptfile', [a:action, a:line])
endif
endfunction
插件
用Vim工作了几年后,exVim团队在选择插件上有了一个很好的尝试。我们从vim社区里仔细的选择插件,同时
我们也开发自己的插件。对于那些作者已经停止更新的插件,我们fork下来然后修改使得他与exVim兼容。
这篇文章会告诉你exVim默认使用了哪些插件,我也建议你阅读在vim社区里查找插件
,因为它会教你如何在vim社区里里搜索插件。
概述
插件管理
Vundle需要你在.vimrc
中指定插件的地址,然后用命令:PluginInstall
安装插件,在运行命令后,
Vundle会检查插件然后用Git下载最新版(意味着你电脑也必须装有Git并且主程序在path下)。你也
不运行命令:PluginInstall
而自己下载插件,这样的话,你就像pathogen一样管理插件
Pathogen比Vundle要早出现,在管理插件上它也非常NICE。Pathogen需要你自己下载插件到指定目录。下
载完后,你只需要在.vimrc
中添加一条简单的脚本来使它加载插件。
我不使用NeoBundle所以不介绍关于它的。
Vimball是最老的插件管理插件。它并如上面几个插件那样出色。我是为了不让vim新手不过多的关注这个
插件而介绍他的,他的文件由*.vba
构成。
我的选择
Vundle和Pathogen都是非常好的作品。对于Vundle,你需要在‘.vimrc’中写更多的脚本来指定你想安装的
插件,然后剩下的事情它自己处理;对于Pathogen,你仅仅需要在.vimrc
中添加一行,但是你得为每个插件
自己运行Git或者zip文件。在exVim中我选择Vundle插件但是提供pathogen支持。
这是一些讨论这些的文章:
- http://jameslaicreative.com/moving-up-upgrading-from-pathogen-to-vundle/
- http://rmitc.org/2013/04/modern-vim-plugin-management-pathogen-vs-vundle/
- http://ryanpcarney.com/technologblog/goodbye-pathogen-hello-neobundle
状态栏
上面每一个插件都能使你的Vim状态栏更漂亮。Powerline需要python支持。vim-airline是则不需要
MiniBufExpl是一个像标签一样展示打开的每个文件的一个较老的插件。它已经停止更新很多年了
我列出的一个是Techlivezheng forked的版本。他修复了一些BUG并使它更好用。
我的选择
自从vim-airline仅用vim脚本编写后,他在exVim的插件中就不可缺少了
快速打开文件、缓存、MRU
我仅仅使用过ctrlp,它工作的非常好。所以我选择ctrlp. unite看起来不错,它的作者说unite是一
个与ctrlp有不同特性的插件
Git操作
vim-fugitive是一个和git配合的非常好的插件。他用命令帮你完成git托管,diff或者其他任务
vim-gitgutter会把你git文件和正在编辑的文件进行比较并且实时展示他们的不同,我非常喜欢这个idea但是
很少用到这个功能。在vim-fugitive中我用:Ddiff
来实现这个功能。我把这个功能做成了一个选项而不是直
接集成。
vim-gist是一个上传或者block到Git的插件。
撤销管理
他们都在能在窗口中展示vim撤销记录。
我的选择
undotree更好用。当你编辑文件时他实时更新,在代码结构和BUG上也更好。
文件浏览
NERDTREE在vim中是一个真正的文件浏览器。它像一个本地文件浏览器一样浏览文件盒文件夹,它也提供
设置你不想显示的文件的选项
ex-project是一个仅仅关注exVim工程窗口的插件。他从.exvim
文件中读取文件过滤设置,然后创建工程
文件列表
我的选择
他们两个在exVim中都工作的很好。我使用NERDTRree来编辑不在工程中的文件。但对于工程文件,ex-project
工作的更好,它可以在插件窗口中直接创建文件和文件夹,并且提供设置希望显示和隐藏文件的选项
当前文件的标签预览
TODO
注释
NERDCommenter不需要filetype,它工作的更好
代码自动补全
neocomplete是neocomplcache的一个新版本,但是它需要vim已+lua选项编译。它提供更快的函数补全,但
是它不是纯粹的vim脚本,许多人选择neocomplcache
Youcompleteme看起来不错,它自己介绍说是vim中最快的自动补全插件。但是它也不是纯粹的vim脚本
vim-autocomplpop 是一个很老的vim插件。很遗憾作者没有把它放在Git.所以我做了fork版本
fork version
我的选择
我发现在某些情况下neocomplcache工作的很慢。所以我还是使用vim-autocomplpop
代码片段
没有测试他们。
一些不错的提供代码片段插件的仓库:
- https://github.com/spf13/snipmate-snippets
- https://github.com/scrooloose/snipmate-snippets
- https://github.com/honza/vim-snippets
语法检查
Syntasic是一个非常好的插件,它使用你当前语言的lint来检查你的代码
编码检测
Autofenc有多种方法来配置编码
FencView mainly supports detection of encodings for asian languages.
Fencview主要提供ASIAM语言的编码检测
更好的文本编辑
vim-easymotion是一个vim鼠标移动命令b
,f
,e
,t
的强大增强插件
vim-surround帮助你更加简单的添加 (
,{
,[
,"
,```,…符号
tabular是一个帮你用像=
,,
这种符号来对齐一些文本的插件。当你在编写json或者有许多变量的代码
时非常有用
showmarks帮助你显示vim中的书签标记
visincr帮助你按顺序填写数字,在编写代码时非常有用
matchit增强vim的%
操作
Largefile允许你使用简单的规则打开较大的vim文件
网页开发
HTML
emmet-vim是一个强大的html辅助编写插件
vim-indent-guides能显示你文件的标签。我仅仅在编写html时才用这个插件,所以我把它列在这儿
JavaScript, CoffeeScript, …
vim-javascript包括在编写javascript时的缩进,语法高亮功能
vim-jsbeautify包括html,css,javascript缩进和语法高亮功能。我没用它所以没有建议
vim-coffee-script includes the indent, syntax highlight for editing CoffeeScript.
vim-coffee-script包括了Coffeescript的缩进,语法高亮
JSON
vim-json provides indent, syntax highlight for editing JSON file.
vim-json提供了编写JSON文件时的缩进,语法高亮
Markdown
他们都很好的支持markdown的缩进,语法高亮和文件类型检测
我的选择
我使用vim-markdown,没其他原因,github粉
CSS
vim-less提供LESS的语法高亮
vim-css-color会用相对应的颜色来显示CSS颜色属性值,但是在编辑大CSS文件时比较慢
C-lang Developer
CRef
C函数的辅助插件