有没有一个适用于Vim的好用的Subversion插件?

13

我一直在使用 NetBeans 等 IDE 工具,它有一个很好的版本控制插件。当我有多个项目并同时进行工作时,我可以通过高亮选择特定的项目进行提交,而将其他项目排除在外。此外,提交框允许我轻松地排除不需要提交的文件。但我没有找到 Vim 的相应插件。

我已经使用了 Nerdtree,虽然在项目导航方面很好用,但它无法显示哪些文件夹/文件已被修改。而在 NetBeans 中,它会在受影响的树路径旁边显示蓝色/绿色图标。

还有其他我喜欢 GUI 的功能,但我不会在这里列出。

我真的想转换到 Vim,但这阻止了我。请问是否有人能建议一个类似的 Vim 插件?

更新:由于这是 3 年前提出的问题,我已经停止使用 Subversion 一段时间,并开始使用 Git。我正在与 Vim 一起使用的插件具有 Git 支持(Fugitive)(参考链接)


不了解 Vim 插件,但是 Eclipse 有一个很好的类似 Vim 的编辑器插件(vrapper - vrapper.sourceforge.net)。 - guido
我不相信存在一个插件,可以在nerdtree中突出显示已更改的文件。虽然有一些插件可以使在vim内容易地比较两个版本之间的差异。猜想你可能不想要那个。 - giltanis
6个回答

8

只需使用适当的shell命令(如svn commit,svn update等)。为vim编写一个SVN插件并没有太大意义。您甚至可以从vim中运行shell命令。例如:

:! svn update

虽然我不确定在SVN的情况下这会带来任何显著的优势。

如果我想"作弊"并查看图形目录结构,有时我会在Eclipse中打开Subclipse - 但实际上完全没有必要。

要开始使用vim,只需在安装了vim的计算机上打开终端并执行:

vimtutor

您很快就能上手使用。


1
这就是正确的思考方式。在IDE世界中,你必须下载插件才能做任何事情。而在Vim世界中,你需要学习命令并将其绑定到一个命令上。 - Josh
我已经有一段时间没有使用svn了(迁移到git),但你可能需要运行两个提交命令 - 每个目录一个。否则,可能有一种方法可以用一个命令提交两个目录。没有必要提交根目录并明确排除其中一个子目录(除非当然这样做更容易)。 - mattkelly
1
@James 你说得对,我忘记了。不过看起来你可以列出你想提交的目录。参见这个帖子:https://dev59.com/XHI_5IYBdhLWcg3wHvU5 - mattkelly
2
如果您的两个项目位于不同的目录中,您是否可以提交这两个目录而不是要排除的那个目录呢?例如:$svn commit -m“提交project1和project3但不包括project2”./project1 ./project3 - digitaljoel
2
@James Lin:类似于 $svn commit -m "test" $(ls | grep -v anything_but_this_file) 的东西。 - bhinesley
显示剩余5条评论

5
以下是几个与subversion相关的vim插件,尽管它们都不能给你想要的完整的类IDE集成体验。由于git本质上更加灵活,因此可以做更多的事情。如果您好奇的话,fugitive是一个非常不错的插件: http://vimcasts.org/blog/2011/05/the-fugitive-series/ 但是,重点是,以下是一些可能有助于您特定请求的插件以及一些更一般的插件:
  • Sandbox: http://www.vim.org/scripts/script.php?script_id=2468。它不完全符合你的要求,但你可以用它来达到同样的目的。每当你想查看仓库的状态并选择性地提交文件时,你可以执行Sandbox命令并按照说明操作。脚本确实说“仅限Linux”,但你没有提到你使用的操作系统,所以如果你在Windows上,我不知道它是否能正常工作。
  • VCSCommand: http://www.vim.org/scripts/script.php?script_id=90。这个插件为你提供了差异、特定文件的日志、责备、还原和其他一些功能。界面由命令或映射组成。
  • svn_commit: http://www.vim.org/scripts/script.php?script_id=1451。一个非常小的脚本,它“记住”了最后一次提交的消息,因此如果你取消提交以添加/删除文件,你不必再次输入它。

再次强调,你可能无法获得所需的集成。Vim非常灵活,但某些IDE功能很难在其中实现。我能想到一个可能的解决方案,但需要一段时间来编写和测试才能正常工作。对此感到抱歉,但你要么适应使用命令行客户端,如@mattkelly建议的那样,要么考虑使用外部程序来处理提交,遵循@romainl的建议。


4

我建议使用VCSCommand。它自带方便的映射,并且可以与svn、git和hg一起使用。但是,它并没有一个真正的“GUI”界面;我认为你不会找到很多面向vim的资源提供这样的功能。


2

首先,我完全支持@matkelly的回答:你不需要任何插件就可以在VIM中使用SVN。

作为一个狂热的vim用户,我想给出一些关于如何将vim作为IDE与subversion集成的指针。我刚刚拍摄了几张我的vim屏幕截图,这样你就可以看到实际效果。

我是从eclipse背景转过来的。虽然现在我主要在Fedora工作站上用VIM编码。但我仍然会在某些任务中使用eclipse,比如Mylyn / Tasktop集成(通过Planning Perspective),它与subversion和bugzilla集成,帮助我编写特定于任务的提交消息。

在VIM中,为了轻松地与SVN(以及一般的shell任务)交互,你需要知道一些快捷键:

我使用以下命令获取我目前正在工作的文件的日志:

:!svn log -l3 %

'

'%'是一个特殊的快捷方式,它会被当前文件路径替换。上述命令列出了此当前文件的最后3条日志消息。

你猜这个命令是做什么用的?

'
:!svn diff %

'%:h'可以让你得到当前文件所在的目录:

:!svn status %:h

顺便提一下,对于想要从GUI-IDE转换到vim,并且在浩瀚的项目文件中难以导航的新手,请注意以下几点:

我推荐使用NERDTree插件,它可以打开类似IDE的目录树并将您当前的文件定位在树中。它仅在我需要删除、复制、移动文件或设置当前工作目录时才有用。但是,如果我只想从成百上千个项目文件中找到特定的文件,我只需输入:

:find Inventory.pm

酷的事情是,我可以部分键入文件名并按[ TAB ],这样就会为我展开文件名!如果有多个匹配项,它会简单地迭代列表,直到我找到自己想要的。
这是我的编码会话的第一个命令,我CD到我的项目根文件夹(因为 vim 的 "path" 设置为 '。' ), 启动 VIM 并输入 :find 文件名。我使用过的没有 GUI IDE 能以如此快的速度完成这个任务。然后,如果我想浏览我的项目文件夹,我只需按 F10 ,这映射到 NERDTreeFind,并使用 jklm VIM 命令导航目录结构。
当我在 VIM 中打开多个缓冲区(文件)时,我使用“Buffer Explorer”轻松导航打开的缓冲区。
当我在 VIM 中输入方法或某个关键字时,我键入“CTRL-N”,这将打开标记列表(我已经通过 cron 设置了 exuberant ctags)。
“Tag List”插件也是必须的,它会打开当前缓冲区中的函数/方法列表,定位您当前所在的方法,并将焦点放在它上面。 VIM Screenshot1 VIM Screenshot2

1

0
对于简单的任务,您应该遵循mattkelly的建议:
:!svn co path/to/repo .
:!svn add .
:!svn commit -m 'first commit'
:!svn update

然而,把文件操作留给专门设计的工具可能更有意义。

WindowsMac OS XLinux都有SVN文件浏览器插件可用。它们足够强大,可以轻松处理大多数情况。

如果你需要处理真正复杂的情况,你是否考虑过像RapidSVNSmartSVN等专门的图形化工具?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接