如何在VIM中处理大型项目
如何在VIM中处理大型项目
我有一个有很多层级文件夹的大型项目。有些文件的名称相同,根据文件夹名称它们的功能不同。例如:
/admin/action1.php /action1.php
第一个文件是用于管理任务的,第二个文件是用户访问的。
Vim 的标签和缓冲区很快就会变得混乱,很难操作。
我使用的插件有:
NERDTree
CtrlP
MiniBuffExplorer
我在Windows上使用的是gVim,像YouCompleteMe这样的插件不可行。
- NerdTree - 在大型项目中来回移动文件夹太笨重
- CtrlP - 你必须一直通过输入名称来查找你要找的东西
- MiniBuffExplorer - 有太多的文件,在屏幕上占用太多空间,很难找到任何东西
- Vim-Session - 为项目打开保存选项卡/窗口
如您在图片中可以看到的,有太多的标签,难以记住哪个标签对应代码的哪个部分。MiniBuffExplorer 帮助不大。
所以我的问题是,您如何在Vim中处理大型项目以保持组织有序,最好按照功能或代码部分进行组织。有没有一种简洁的方法?
是否有一种可以对缓冲区或标签进行分组的方法,例如:
Migrations Seeds Admin Controllers Admin Views Config
如何在Vim中处理大型项目
在处理大型项目时,我们可能会遇到一些问题。下面是解决这些问题的方法:
1. 使用标签(Tabs)来组织窗口,而不是将其视为文件代理。标签是工作空间,允许您按照自己的喜好组织窗口。您可以通过以下方式创建一个“Migration”标签:
:tabnew | lcd path/to/Migration
在该标签中创建的所有窗口都将继承“Migration”工作目录,每个`:e`、`:sp`、`:vs`甚至`:vim`命令都将从该工作目录开始。这还将使NERDTree和netrw默认显示您本地工作目录的内容。
2. 使用CtrlP的路径模式来匹配整个路径,而不仅仅是文件名。这样可以显著提高CtrlP的速度。您可以通过以下方式启用路径模式:
fbruse
在上面设置的标签中,CtrlP的建议将被限制在“Migration”目录中,从而使其更快速。但是请注意,CtrlP在处理大型项目时可能会变慢,所以请确保阅读完整的文档。
3. 当您只有少量缓冲区时,始终显示已打开缓冲区列表可能是一个好主意。但是,像标签一样,这种方法并不适用于大型项目。最好的做法是在需要切换缓冲区时显示该列表,这样可以节省屏幕空间并提高效率。
4. 请注意,虽然可以定义窗口本地的参数列表,但据我所知,无法定义窗口本地的缓冲区列表。由于参数列表总是泄漏到缓冲区列表中,并且缓冲区列表是全局的,所以无论您在哪个标签中,缓冲区命令始终处理相同数量的缓冲区。因此,标签的通用性受到了限制。
5. 文件并不是处理大型项目的非常好的隐喻,因为您必须记住一个复杂的符号-文件映射,而实际上您的程序是由函数、类、数组、变量等组成的,而不是文件。使用标签(`:help tags`)是跳转到项目中不同部分的非常方便的方法。您可以通过以下方式在项目中跳转:
:tag foo :tag bar:ptag /baz
CtrlP的`:CtrlPTags`命令使得这一过程变得更加有趣。
总之,标签(Tabs)在大型项目中的导航是我最喜欢的技术,我通常不使用标签或窗口。如果使用纯文件作为参考,我建议尝试使用CtrlPTags和NerdTree的书签功能来提高效率。
注:标签导航是我最喜欢的导航方式,我通常不使用标签或窗口。我正在使用vim-session插件,但更改标签名称并不会保存。当我恢复会话时,所有更改都会丢失。我喜欢您关于使用CtrlPTags的想法,我将尝试实施它,而不是仅仅使用文件作为参考。NerdTree有一个书签功能,所以您可以标记主要文件夹并快速访问它们。您可以通过以下命令配置NerdTree以始终显示书签列表:
let NERDTreeShowBookmarks=1
在这段对话中,提到了使用gVim for Windows和插件YouCompleteMe的问题。下面的内容解释了为什么YouCompleteMe无法使用以及如何解决这个问题。
首先,对话中提到YouCompleteMe不是一个选项。然而,这个说法是错误的。在此之后,提到了检查另一个答案的链接,该答案解释了如何在Windows中使用YouCompleteMe。然后,提到了尝试过YouCompleteMe但无法使其工作的经历,以及在Mac上运行良好的情况。在接下来的对话中,提到了尝试使用另一个版本的vim和编译的YCM插件,但在启动Vim时出现了错误信息"YouCompleteMe unavailable: ycm_core too old, PLEASE RECOMPILE ycm_core"。
对此,对方表示你显然做错了什么,问你是否确定在PATH环境变量中有libclang.dll。此外,建议阅读另一个答案中的"Common Pitfalls"部分。
问题的出现是因为YouCompleteMe在Windows中无法正常工作,并且可能由于缺少libclang.dll或其他常见错误导致。解决这个问题的方法是确保在PATH环境变量中有libclang.dll,并阅读相关答案中的常见问题部分。
文章整理如下:
在这段对话中,提到了使用gVim for Windows和插件YouCompleteMe的问题。下面的内容解释了为什么YouCompleteMe无法使用以及如何解决这个问题。
首先,对话中提到YouCompleteMe不是一个选项。然而,这个说法是错误的。在此之后,提到了检查另一个答案的链接,该答案解释了如何在Windows中使用YouCompleteMe。然后,提到了尝试过YouCompleteMe但无法使其工作的经历,以及在Mac上运行良好的情况。在接下来的对话中,提到了尝试使用另一个版本的vim和编译的YCM插件,但在启动Vim时出现了错误信息"YouCompleteMe unavailable: ycm_core too old, PLEASE RECOMPILE ycm_core"。
对此,对方表示你显然做错了什么,问你是否确定在PATH环境变量中有libclang.dll。此外,建议阅读另一个答案中的"Common Pitfalls"部分。
问题的出现是因为YouCompleteMe在Windows中无法正常工作,并且可能由于缺少libclang.dll或其他常见错误导致。解决这个问题的方法是确保在PATH环境变量中有libclang.dll,并阅读相关答案中的常见问题部分。