[搬运]exvim doc

这里只是简单地把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上的下载/更新

  1. 克隆仓库至你的目的地:
    bash git clone https://github.com/exvim/main

  2. 执行'osx/install.sh' 脚本:
    bash cd main/ sh osx/install.sh

注意:
osx/install.sh 仅仅更新main/文件夹里面的vim插件。
并不会覆盖你的~/.vimrc,~/.vim/,不用担心哦!
当你运行了这个脚本后,main/文件夹会变成一个exVim的开发环境!

  1. 预览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。

  2. 克隆仓库至你的里面目的地(执行下面命令):
    git clone https://github.com/exvim/main

  3. 执行"unix/insall.sh"脚本:
    cd main/
    sh unix/install.sh

    注意:unix/install.sh仅仅更新main/文件夹里面的vim插件。
    并不会覆盖你的~/.vimrc,~/.vim/,不用担心哦!
    当你运行了这个脚本后,main/文件夹会变成一个exVim的开发环境!

  4. 预览exVim:
    sh unix/gvim.sh your/project/path/foobar.exvim

    Windows下的下载/更新

    1.确保vim命令在你的cmd窗口是可以运行的。为此,需要在cmd窗口执行vim命令,并且查看
    结果。如果没有,可能你没有安装gvim或者你没有将gvim安装目录放到你的'PATH'环境里。
    你可以下载gvim安装包,下载页面为:下载

  5. 参考文档Vundle for Windows
    设置Git和Curl。

  6. 下载exVim工程从git或者zip file. 并解压它到一个理想目录,比如D:\exVim
    git clone https://github.com/exvim/main

  7. 进入exVim文件夹,执行install.bat批处理文件
    C:\>cd exVim C:\exVim>call windows\install.bat
    执行此文件后,你的D:\exVim文件夹会成为一个exVim的开发环境。
    注意: 安装完成后可能需要重启电脑才能够使某些外部工具生效.

  8. 预览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

上面的命令主要会做如下事情:

  1. 用exVim的配置文件'.vimrc'替换~/.vimrc
  2. 拷贝 .vimrc.plugins~/.vimrc.plugins.
  3. 拷贝并重命名 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-first-start

exvim-first-start-with-text

如果你检查你的工程目录,此目录下会存在一个隐藏文件夹,其命名为 .exvim.foobar
这个文件夹包含所有的 foobar.exvim 工程在使用中需要的工程配置文件。

注意事项: 你能够创建多个*.exvim文件在一个工程中。这就方便你为了不同的目的应用
使用不同的设置。

创建工程树

将光标移至左边的工程窗口 按下 <leader>R [1],
你将通过ex-project窗口看见你的工程文件,如下所示:
exvim-with-project-tree

你可以通过*.exvim文件包含或者排除第一层目录。为了达到上述目的,你需要打开*.exvim
文件,找到包含folder_filter +=的行,然后设置它的选项。

比如:

这里我选择了 exclude 模式,并且过滤掉此工程目录下的 \build, \_log, 和
\_ext 文件夹。当你完成此编辑,执行 :w 命令保存 .exvim 文件,这个操作会触发
exVim 刷新你的工程设置。

切换光标至你的 ex-project 窗口,然后通过 <leader>R[1] 重组你的工程树。

更新工程

通过执行 :Update 命令,你将会更新 exVim 工程(如下所示):

exvim-update-project

注意事项: 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,
… 获取每个插件的详细信息,和它们的配置。

脚注

  1. 这里<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-first-start-with-text

**注意:*怎么打开exvim工程呢?就是用你的vim打开一个.exvim类型的文件.

构建工程浏览树

开始章节,我已经展示了如何使用ex-project插件构建工
程树。基本上只需要将你的光标移至工程窗口,然后按下<leader>R即可。
ex-project将会构建如下所示的工程树:

ex-project-tree

刷新当个文件夹

有时候,你仅仅改变一个文件夹的文件,但是使用<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, examplesdocs.
如果你希望构建的工程树里面仅仅包含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>折叠和打开一个文件夹, 如下所示。

ex-project-folding

你也可以在工程窗口使用vim内置的折叠快捷键,比如:

  • 使用 zOzM 打开和折叠整个工程。
  • 使用 zozc 打开和折叠当前文件夹。
  • 使用 zkzj 移至俩个折叠的中间。

工程窗口内光标的移动

最基本的,你可以使用h,j,k,larrow keys在工程窗口移动。ex-project插件也提供了
<ctrl-k><ctrl-j>俩个快捷键用于在俩个文件夹间快速移动。

你应该已经注意到了,ex-project使用 {}作为它的折叠标志:

ex-project-foldmarker

这意味着你可以使用折叠跳转命令及快捷键:

  • 将你的光标移到折叠的开始或者结束处, 然后按下% 就可以匹配折叠
  • 使用 [{]} 可以跳至上一个或者下一个折叠

编辑窗口的使用

编辑文件

当你在工程窗口的文件上按下<enter>时,ex-project将尝试在编辑窗口打开文件。你也可以通过按下
<shift-enter>将编辑窗口分割成俩个进行文件的编辑。

打开文件浏览器

当在工程窗口的文件夹下按下<shift-enter>时,ex-project将会使用系统自带的文件浏览器,并在里面打开
当前文件夹。这当你想在一个目录中操作一些文件时是非常有用的。

定位你当前的文件

如果你正在编辑一个文件,然后试图定位在工程窗口的位置,可以按下<leader>fc。这个操作将引起
ex-project搜索当前编辑文件,并将光标移至它。

创建新文件

想在工程窗口创建一个新文件,可以将光标移到一个文件或者文件夹下,然后按下o, ex-project将会帮你
创建一行,如下所示:

ex-project-new-file

输入文件名,按下<enter>键,将在编辑窗口打开。编辑,然后使用:w保存,将会创建一个新文件。

创建一个新文件夹

创建一个文件夹比创建文件复杂多了。首先你需要将光标移动到一个已经存在的文件夹下。这样ex-project才会
理解你要在那个文件下创建一个新文件夹。做完上面的步骤后,按下O(大写的o),ex-project将会要求你输入
文件夹名:

ex-project-new-folder

当你输入名字并且按下enter键确认后,ex-project将会直接在选定的文件夹下创建一个新目录。

使用NERDTree

ex-project能够和NERDTree完美的工作。将光标移动到你的工程窗口,然后按下<ctrl-tab>,工程窗口将会
自动切换至NERDTree。更帅的是,<leader>fc依旧能够使用。切换回去的命令也是按下ctrl-tab>
*_注意: *_最新的版本好像不能切换!

.exvim 工程间的切换

你可能有许多个.exvim文件在你的工程里, exVim支持他们之间动态的切换, 通过打开不同.exvim文件,
并且通过:w显示保存此文件,将会切换到新的工程。

ex-project-multiple-exvim-files


全局搜索

exVim使用ex-gsearch进行全局搜索。它也在必要
时候和id-utils创建的管道协同工作。总之,当你使用:Update后,exVim将会生成被
ex-gsearch使用的ID文件。
*注意事项: * 如果不能搜索,首先看你这个ID文件是否已经生成!

查找文本

ex-gsearch有俩个主要的方式可以在你的工程中
搜索文本。

  1. <leader>gg: 将会搜索光标下的单词。
  2. :GS <word>: 将会搜索<word>或包含<word>的文本
  3. :GSW <word>:将会搜索完整的<word>

搜索结束后,ex-gsearch将会在全局搜索窗口列出搜索结果。选中搜索项,按下<enter>
键,编辑窗口将会跳至对应处,你可以通过按下****按键关闭搜索窗口!

*_注意: *_自己修改这个关闭窗口的快捷键,如下:
call exgsearch#register_hotkey( 2, 1, &#39;q&#39;, &quot;:EXGSearchClose<CR>&quot; , &#39;Close window.&#39;)

过滤

ex-gsearch 将会展示如下所示的搜索结果:

ex-gsearch-result

无论如何,有时这里会有很多的结果,我们可能希望过滤它们。es-gsearch允许我们使用Vim
的搜索模式,比如/,?等等(更多的可以查看vim的搜索相关的帮助文档)。在你确认vim的
搜索模式后,你就可以使用ex-gsearch的过滤命令在搜索窗口过滤出正确的结果。

每个搜索结果都可以分为文件部分和文本部分,ex-gsearch针对不同的过滤目的提供了不同
的过滤方法:

命令用途
<leader>r移除搜索结果中文本部分不包含vim搜索模式中所包含的。
<leader>d移除搜索结果中文本部分包含搜索模式包含的。
<leader>fr移除搜索结果中文件部分不包含vim搜索模式中所包含的。
<leader>fd移除搜索结果中文件部分包含搜索模式包含的。

比较酷的是,你可以使用这种方法一边又一边的过滤,直到结果是你想要的为止。例如:

  1. 测试:GS test, 获取关于test的搜索结果。
  2. 我们理想中的结果只是test foobar。所以我们在搜索结果窗口中使用vim的/模式搜索test foobar.
  3. 使用<leader>r过滤它。
  4. 我们只想过滤文件testXXX.js。再一次在已经过滤的结果中使用vim的/搜索test\*.js.
  5. 使用<leader>fr过滤它.

ex-gsearch-filter

做完这一切后你就会获取最终结果了。

小窍门

  1. 搜索单词

<leader>gg:GS命令都将会搜索包含或者等价于此单词的文本。有时候你只想搜索此单
词,此时,你可以使用Vim的搜索模式\<word\>在过滤命令中。但是exvim给你提供了更快捷
的方法,将光标移动到搜索标题那里,按下gd,vim将会自动将光标下的单词放入\<\>
中间作为搜索模式进行单词搜索。

  1. 获取上一次/下一次搜索结果

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-tagsex-symbol
插件进行改善。exVim通过:Update命令生成tags。

选择标记

在vim中可以使用<ctrl-]:ts tag-name跳转到对应tags。ex-tags
提供同样的办法但是却不同的命令—<leader>]:TS tag-name

你可以认为他们是原版的装饰版。

例如,假设我们想列出dlmalloc的定义与声明,我们输入:ts dlmalloc,vim将会
给我们展示如下内容:

ex-tags-ts

然后,我们可以输入对应的编号选择,或者输入<Esc>取消它。

ex-tags ,我们输入 :TS dlmalloc ,然后Vim 将会展示:

ex-tags-ts2

这时,你可以向上或向下移动光标,并通过''选择。

符号

符号是标记的集合。通过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 将会列出搜索结果,类似下图:

ex-symbol-window

如果你通过<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" 结果窗口:

  1. 你能过选择一个单词,通过<leader>gg再次搜索 .2. 通过 <leader>]显示一个tag
  2. 通过<leader>sg显示symbol.

在你的symbols列表中

  1. 你能够确认一个选择
  2. 你能够移至一个symbol,然后通过<leader>gg 搜索它

exVim所有的插件一起很好的协同工作。在windows下不用担心,当你做完全局的
ex-commands后,它们将会自动的关闭。

使用<leader>sg:SL <your-tag> 获取类成员

当你在一个类名上面使用<leader>sg:SL <your-tag>时,它将会为你显示此类及其成员。当你想查看一个类的成员函数及变量时,是非常有用的。但是请记住,ex-symbol并不能够智能为你显示继承关系。

下面是我在一个C#工程中,使用<leader>sg获取"exSprite"类时的结果:

ex-symbol-class-members

使用 <leader>sg:SL <your-tag> 在不同的类中获取成员

不像在一个类中浏览成员,你也可以使用 <leader>sg:SL <your-tag> 在不同的类成员中得到相同的
定义。

例如,在一个c++工程中,你可以输入:SL push_back, 它将会为你显示不同类中的"push_back"函数。

ex-symbol-different-class-members

_使用完整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搜索模式。

ex-symbol-different-class-members

ex-symbol-confirm-select

类继承视图

exVim 将会允许用户生成指定类的类继承图。这是由 ex-hierarchy 插件完成的.

当运行:Update命令后,exVim将会生成继承文件。这个文件将会从你的ctags生成信息里面提取继承信息。它记录你工程中类的继承关系。

ex-hierarchy 插件在你输入一个类时将会解析这个继承文件,它将会生成一个Graphviz点格式文件,然后使用Graphviz画一个.png格式的图片。

目前, ex-hierarchy 支持c++,jvava ,python等等。

下面是一张在ex2D中exPlane类继承图:

hv-explane

显示类继承图

ex-hierarchy有三个命令用于打印和显示类继承图:

  1. :HV <class>: 将会显示<class>的子类和父类.2. :HVP <class>: 将会 <class>的父类.
  2. :HVC <class>: 将会<class>的子类.

让我们以上面的图片作为例子。上面的图片是由:HV exPlane命令生成的。当你使用:HVP exPlane
时,结果将如下所示:

hvp-explane

:HVC exPlane 命令的结果将是:

hvc-explane

你也可以使用 <leader>hv 键绑定用于运行:HV 命令用于生成当前类的继承关系图:

注意: 生成的图片保存在 .exvim.your-project/hv.png, exVim 将尝试使用你默认的图片浏览器打开它。


配置.exvim

exVim 使用 ex-vimentry 插件来创建和设置一个项目。
ex-vimentry 插件会将 .exvim 结尾的文件里的配置应用在你的项目中。

.exvim文件的语法

阅读 ex-vimentry syntax.

默认选项

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 上你可以做很多事情,比如:

自定义你的字体:

au ! ex_gui_font " 移除旧的字体设置 set guifont =Consolas :h8 :cANSI " 设置你想要的字体 `

自定义你的 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 文件夹下. 你可以选择放在如下几个地方:

  1. vimfiles/bundle/ex-config/after/colors/ (如果你选择方法1建议选择这个)
  2. vimfiles/bundle/ex-colorschemes/after/colors/ (如果你选择方法1建议选择这个)
  3. vimfiles/after/colors/ (如果你选择方法2建议选择这个)
  4. your_own_color_bundle/after/colors/ (如果你选择方法3建议选择这个)

一旦你确定了放置位置并且创建了文件, 那么你可以参考 vimfiles/bundle/ex-config/after/colors/solarized.vim 或者
vimfiles/bundle/ex-config/after/colors/exlightgray.vim, 沿用他们的代码来配置你自己的颜色.

如下是一个在 aftercolor 脚本中你可以配置的语法高亮清单:

NameUsage or reference
exConfirmLineColor of selected line in ex-gsearch, ex-symbol, ... window
exTargetLineColor of selected line in edit window
ex-showmakrs HighlightingCheck `:help showmarks-highlighting`
ex-easyhl HighlightingCheck `:help easyhl-highlighting`
ex-project HighlightingCheck `:help exproject-highlighting`
ex-gsearch HighlightingCheck `:help exgsearch-highlighting`
ex-symbol HighlightingCheck `: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支持。

这是一些讨论这些的文章:

状态栏

上面每一个插件都能使你的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

代码片段

没有测试他们。

一些不错的提供代码片段插件的仓库:

语法检查

Syntasic是一个非常好的插件,它使用你当前语言的lint来检查你的代码

编码检测

Autofenc有多种方法来配置编码

FencView mainly supports detection of encodings for asian languages.
Fencview主要提供ASIAM语言的编码检测

更好的文本编辑

vim-easymotion是一个vim鼠标移动命令b,f,e,t的强大增强插件

vim-surround帮助你更加简单的添加 (,{,[,&quot;,```,…符号

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函数的辅助插件

Lua Developer

Go Developer

Syntax highlight

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值