您如何仅使用VIM管理大型项目(数百个文件)?
我个人开始在任何规模较小的项目中都遇到问题。
- 有什么方法可以快速“归档”,最好是使用名称补全?
- 在另一个文件中时,与“转到类定义”相同
我有点了解VIM的所有基础知识,因此使用它来编写脚本或快速编辑某些源代码没有问题。但是当我不得不在文件之间导航时,这对我来说真的很麻烦。
您如何仅使用VIM管理大型项目(数百个文件)?
我个人开始在任何规模较小的项目中都遇到问题。
我有点了解VIM的所有基础知识,因此使用它来编写脚本或快速编辑某些源代码没有问题。但是当我不得不在文件之间导航时,这对我来说真的很麻烦。
NERDTree
Answers:
我喜欢简单的解决方案,目前我最喜欢的导航方式是:
添加 ~/.vimrc.local
set path=$PWD/**
然后在编辑器中键入此文件,以在当前工作目录(pwd)中的任何位置查找文件
:find user_spec.rb
您也可以在文件名上使用制表符补全来查找多个选项,这使TextMate转换非常满意。
vim .
在执行命令之前也尝试过:/
我结合使用NERDTree(目录侧边栏),FuzzyFinder Textmate(类似于TextMate的CMD + T的文件)和Sessions(:h会话)来帮助我处理大型项目。
我建议使用一些会话帮助程序插件。我会提到我用的东西,但是我还不满意。只是Google的“ vim会话”。
使FuzzyFinder Textmate起作用要注意的一件事是,它取决于FuzzyFinder插件的旧版本,特别是v2.16。更高的东西会出错。但这绝对是值得的麻烦。虽然它没有名称fro/time/actionsphp
补全,但是它的搜索很聪明,因此如果我搜索它,它将拉出文件apps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(括号表示匹配的文件)。这使得挑选仅由其文件夹名称唯一的文件变得非常容易。
以及无价的ctags和各种相关的命令。我也离不开项目插件,它允许您将与项目相关的感兴趣的文件放在单独的窗格中。我不记得自定义了多少设置,但是如果我想打开一个名为Debug.c的源文件,请点击:
<F12> " Opens the project pane
/De " Searches for "De", which is likely to be enough to find Debug.c or possibly Debug.h
<ENTER> " Opens the selected file and closes the project pane
然后,我经常这样做:
:vsp " Vertically split the window
<F12> " Reopen project pane
# " Search back to find previous entry with the same name (to find
Debug.h if I was on Debug.c: my headers are in Headers/ and
my source is in Source/, so the headers come earlier in the list
than the source). I use * to go the other way, obviously.
<ENTER> " Open the header file in the other window and close the project window.
通过这个相对较短的序列,我可以垂直拆分打开任何文件及其标题。由于项目插件窗口只是一个文本文件,因此可以通过使用Vim的搜索功能来完成操作。
vim
从源文件的根目录打开,并扩展path
选项以在其中包括所有子目录。
例如set path+=/usr/include/c++/**
对于C ++标头和set path+=**
您的源目录。
然后,这带来了以下众多可能性。
1)按名称或部分内容打开文件
:find file_name
您可以:find
可靠地使用自动完成和通配符扩展。您键入名称,它将找到名称。这与语言无关,我确定你会喜欢的。
2)导航到cusror下的文件:
如果您想使用文件路径,例如#include "project/path/classA.h
。
gf or gF - go to file under cursor.
Ctrl--6返回到gf
或之后的最后一个光标位置gF
3)API查找并导航到API位置
[i
或[I
可用于在不离开工作空间的情况下在光标下查找单词的功能签名。[<Tab>
实际去申报。使用Ctrl-6返回上一个位置。
无需扩展path
,您就可以开始通过:Ex
命令导航文件,然后导航并打开文件。我NerdTree
比这更喜欢。
尽管我有点希望有人能指出一个更好的解决方案,以便我可以学到一些东西,但是只要扩展树,NERDTree就能很好地获取具有名称补全的特定文件。当我需要获取文件时的命令如下所示:
,d / foo.pyo(其中foo.py是文件名)
,d打开树,/进入搜索模式,文件的名称(或部分名称,或正则表达式,或其他),然后o打开。
当然,如果键入的文件名不足或重复,则可能必须多次击“ n”次。
我承认使用NERDTree这样的感觉有点像是在破解,尽管到目前为止它已经深入我的肌肉记忆中,我什至没有考虑它。
当然我也使用ctags,但是它们仅在光标附近有函数并且需要在另一个文件或其他文件中获取其定义时才有用。很多时候,我说“确定,我现在需要处理功能x”,并且需要导航到另一个文件,而附近没有ctags真正有用的引用。
我正在使用我的两个插件:
<c-w><m-down>
默认情况下插入的标记选择器。您可能需要查看著名的标签列表插件。两者都需要我的viml库lh-vim-lib。
尝试SourceCodeObedinece。我开发的这个用于处理C ++ 1Gb源文件的项目。
我与0scan配对使用。