vim-project
vim-project
软件版本:
ubuntu10.04
Linux version 2.6.32-42-generic
VIM - Vi IMproved 7.2
project-1.4.1
目录:
1. 简介
2. 使用
2.1 首次启动
2. 2 分析 .vimprojects
2.3 一些操作
3. 配置
4. 不足
5. 参考资料
1. 简介
名称: | project |
下载地址: | |
安装: |
将下载下来的 project.vim 拷贝到 $HOME/.vim/plugin ; |
帮助: | :help project |
project 插件的作用就是帮助用户以项目的形式管理源码。启动并配置好 project 后,就会在 [g]vim 的左边生成一个项目列表,列出项目中所有指定类型的文件,在文件名上按 Enter 键即可打开文件。我们甚至可以通过修改 $PATH 环境变量对整个项目进行编译。见下图:
图 1
2. 使用
2.1 首次启动
启动 vim 后输入 :Project ,就会看到左边出现项目列表,如果还没有项目,列表为空。
在常规模式下输入 \C (斜杠+大写C)创建项目:
Enter the Name of the Entry: ProjectName (项目名称)
Enter the Absolute Directory to Load: ProjectPath (项目路径)
Enter the CD parameter: . (CD 指打开该项目(包括项目下的文件)后, vim 将进入的路径,“.” 指的是当前项目路径)
Enter the File Filter: (筛选源文件,只显示符合条件的)
顺利的话,你会在项目列表中看到如图1的文件列表。光标移到项目窗口中输入 :w 保存后,该项目配置默认存储在 ~/.vimprojects 中。
2. 2 分析 .vimprojects
插件 project 的默认项目文件就是 ~/.vimprojects ,里面存储了各个项目的配置。图1的项目配置如下所示:
1 cbreak=~/test/project/cbreak CD=. filter="*.c *.h" { 2 inc=inc { 3 print.h 4 } 5 libs=libs { 6 } 7 out=out { 8 TAR=TAR { 9 } 10 obj=obj { 11 } 12 } 13 src=src { 14 cbreak.c 15 prj_test.c 16 } 17 }
就这样看,理解起来可能有点困难。我们来看一下项目的入口格式:
project_entry ::= <Description>={projpath} [{options}] { [ filename ] [ project_entry ] }
<Description>:项目名,与后面的“=”不能有空格;
{projpath}:项目路径,可使用环境变量。如果路径有相对路径,插件会根据项目的父目录及其上层目录等层次建立路径,但最外层的项目入口必须是绝对路径。可以使用空格,但必须使用转意符 “\”;
{options} :可以是下面的一项或者几项, 但必须放在同一行上.
CD={path}
in={filename}
out={filename}
filter="{pat}"
flags={flag}
CD:表示项目在选中一个文件时 Vim 将要进入的目录。
in:进入文件缓冲时执行指定的 Vim 脚本。
out:退出文件缓冲时执行指定的 Vim 脚本。
filter:过滤符,过滤剩下指定类型的文件。如果子项目中没有指定过滤符,将承继夫项目的过滤符。
flags:标志位,为某个折叠指定某些特性。详见 project.txt 。
注意,项目之间支持层叠关系。项目下的各个目录,其实都是一个子项目。
默认情况下,所有项目都存储在 .vimprojects 中,但是我们也可以指定自己的项目文件,启动命令为:
:Project prj_filename
2.3 一些操作
启动 project 插件后,相对应的就会支持一些命令。在常规模式下输入(注意区分大小写):
\r 根据项目过滤符更新折叠处的文件。
\R 递归执行 \r 。
\c 创建一个项目。但不包括指定目录下的子目录。
\C 递归执行 \c,包括指定目录下的所有子目录。
<Return> 打开文件;打开或关闭折叠。
<S-Return> Shift+Return
\s 同 <Return> 打开文件,打开文件时水平分割窗口。
\S 加载所有文件到当前窗口,当前窗口会被水平分割显示所有文件。
<C-Return> Ctrl+Return
\o 打开指定文件到一个窗口中,并且关闭所有其它窗口,
<M-Return> Alt+Return
\v 仅仅打开文件,光标仍然保留在项目列表中。
<CTRL-Up>
\<Up> 移动文本或者折叠到当前光标的上一行。
<CTRL-Down>
\<Down> 移动文本或者折叠到当前光标的下一行。
\i 在状态栏中显示光标所在折叠的完整参数以及继承参数。
\I 在状态栏中显示文件的完整路径。
\l 加载当前项目层的所有文件到到当前 vim 中。在加载的过程中,任何按键都导致停止。
\L 加载当前项目以及子项目中的文件到当前 vim 中。谨慎使用。
\g 在当前项目层执行 grep 。
\G 在当前项目层及子项目执行 grep 。
<F12> 当在变量 g:proj_flags 中使用了标志位 'g' 时, 该键用来切换打开和关闭项目窗口.
其它操作参见 project.txt 。
3. 配置
在 ~/.vimrc 文件中添加:
let g:proj_flags="icmsStg"
i 设置后,当选择打开一个文件时会在命令行显示文件名和当前工作路径。
c 设置后,在项目窗口中打开文件后会自动关闭项目窗口。
m 在常规模式下开启 |CTRL-W_o| 和 |CTRL-W_CTRL_O| 映射,使得当前缓冲区成为唯一可见的缓冲区,但是项目窗口仍然可见。
s 设置后将在项目窗口中使用语法高亮。
S 设置后将在更新和创建项目时启用排序。
g 设置后会将切换打开和关闭项目窗口映射到 <F12> 上。
t 设置后将在按空格 <space> 或鼠标右击 <RightMouse> 时候进行原窗口和加宽窗口之间的切换。
其它标志详见 project.txt 。
4. 不足
我尝试过大部分的功能之后,发现有这几个问题:
1. 如果项目中有新建目录,就需要在对应的项目中手动添加子项目, \r 和 \R 都不支持目录的自动更新。
2. 如果存在路径 path/out/obj ,在我选择打开该目录下的文件时会报错,说没有 path/out/out 这个目录,但仍然成功打开指定文件。
3. 如果一次性递归生成一个比较大的项目,需要的时间非常长。
5. 参考资料
[1]. VIM之Project 项目管理工具
[2]. VIM-Project Plugin