【问题标题】:Is there a nice subversion plugin for Vim?Vim 有一个不错的颠覆插件吗?
【发布时间】:2011-10-17 19:57:03
【问题描述】:

我使用像 NetBeans 这样的 IDE 已经有一段时间了。 NetBeans 有一个很好的版本控制插件。当我有多个项目并同时处理它们时,我可以通过突出它们来选择特定的项目来提交,而将其他项目排除在外。此外,提交框允许我轻松取出不需要的文件进行提交。我没有找到 Vim 的等效插件。

我用过 Nerdtree;虽然它有利于项目导航,但它不会告诉我哪些文件夹/文件已被修改。在 Netbeans 中,它会在受影响的树路径旁边显示一个蓝/绿图标。

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

我真的很想改用 Vim,但这阻止了我。谁能推荐一个类似的 Vim 插件?

更新:自从 3 年前提出这个问题以来,我已经停止使用颠覆并开始使用 GIT,我与 vim 一起使用的 plugins 具有 Git 支持(逃犯)

【问题讨论】:

  • 不知道 vim 插件,但是有一个不错的类似 vim 的 eclipse 编辑器插件(vrapper - vrapper.sourceforge.net)
  • 我不相信存在一个能突出显示已更改文件的 nerdtree 插件。不过,有一些插件可以更轻松地在 vim 中区分 2 个修订版。不过我猜你不希望这样。

标签: svn vim plugins


【解决方案1】:

对于简单的任务,你应该遵循 mattkelly 的建议:

:!svn co path/to/repo .
:!svn add .
:!svn commit -m 'first commit'
:!svn update

但是,将文件操作留给专门为此设计的工具可能更有意义。

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

如果您必须处理非常复杂的情况,您是否考虑过专用的图形工具,例如 RapidSVNSmartSVN 或其他?

【讨论】:

    【解决方案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 并且难以浏览数千个项目文件的新 vim 用户,这里有一些建议:

    我推荐 NERDTree 插件,它会打开一个类似 IDE 的目录树,并在树中定位您当前的文件。它仅在极少数情况下对我有用(删除、复制、移动文件或设置我当前的工作目录)。但如果我只想从项目的数百个文件中找到一个特定文件,我只需键入:

    :find Inventory.pm
    

    很酷的是,我可以输入部分文件名并点击 [TAB],这会为我扩展文件名!!!如果有多个匹配项,它会简单地遍历列表,直到找到我想要的那个。

    这是我的编码会话开始的第一个命令;我 CD 到我的项目根文件夹(因为 vim 的 'path' 设置设置为 '.'),启动 VIM 并输入 :find Filename。我使用过的任何 GUI IDE 都无法如此快速地完成此任务。然后,如果我想浏览我的项目文件夹,我只需按 F10,它映射到 NERDTreeFind,并使用 jklm VIM 命令来浏览目录结构。

    当我在 VIM 中打开多个缓冲区(文件)时,为了轻松导航打开的缓冲区,我使用“缓冲区资源管理器”。

    当我在 VIM 中输入方法或关键字时,我输入“CTRL-N”,这会打开标签列表(我通过 cron 设置了丰富的 ctags)。

    “Tag List”插件也是必须的,它打开当前缓冲区中的函数/方法列表,定位你当前所在的方法,并重点关注它。

    【讨论】:

      【解决方案3】:

      你可以试试 GitHub 上的插件,https://github.com/juneedahamed/svnj.vim

      【讨论】:

        【解决方案4】:

        我推荐 VCSCommand。它具有开箱即用的方便映射,并且可以与 svn、git 和 hg 一起使用。但是,它本身并没有真正的“GUI”。我不认为你会找到很多面向 vim 的资源。

        【讨论】:

          【解决方案5】:

          有一些用于 subversion 的 vim 插件,尽管它们确实没有一个能够为您提供您想要的完整的类似 IDE 的集成。 git 可以做更多事情,因为它本质上更灵活,而且,如果你好奇的话,fugutive 是一个非常好的插件:http://vimcasts.org/blog/2011/05/the-fugitive-series/

          但是,说到点子上了。以下是一些可能对您的特定请求有所帮助的插件以及更多一般性的插件:

          • 沙盒:http://www.vim.org/scripts/script.php?script_id=2468。它并不能完全满足您的要求,但您可以将其用于相同的目的。每当您想查看 repo 的状态并有选择地提交文件时,您可以执行 Sandbox 命令并按照说明进行操作。不过,该脚本确实说“仅限 Linux”。你没有提到你使用的是什么操作系统,所以如果你在 Windows 上,我不知道它是否能正常工作。
          • VCS 命令: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 的建议。

          【讨论】:

            【解决方案6】:

            只需使用适当的 shell 命令(svn commit、svn update 等)。为 vim 安装一个 SVN 插件真的没有意义。你甚至可以在 vim 中运行 shell 命令。例如:

            :! svn update
            

            虽然我不确定这在 SVN 的情况下会带来什么显着优势。

            如果我想“作弊”并查看图形目录结构,有时我会在 Eclipse 中打开 Subclipse - 但绝对没有必要这样做。

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

            vimtutor
            

            您很快就会启动并运行。

            【讨论】:

            • 就是这样,也是正确的思维方式。 @James Lin 在 IDE 世界中,您必须下载插件才能执行任何操作。在 Vim 世界中,您需要学习命令和/或将其绑定到命令。
            • 是的,我知道在 vim 中可以运行外部命令,但在这种情况下没有帮助。假设我有 3 个项目更改了代码,我有一张提交代码的票,即项目 1 和 3,要在一个修订版中一起提交代码更改,我必须在根文件夹上运行 svn commit,其中包括项目 2 发生变化,现在如何在提交列表中轻松取出项目 2 中的文件?
            • @James 你说得对,我忘了。但是,看起来您可以只列出您希望提交的目录。看到这个线程:stackoverflow.com/questions/1516188/svn-commit-specific-files
            • 如果你的两个项目在不同的目录中,你不能只提交这两个目录而不是你排除的那个吗?如 $svn commit -m "commit project1 and project3 but not project2" ./project1 ./project3
            • @James Lin:类似于$svn commit -m "test" $(ls | grep -v anything_but_this_file)
            猜你喜欢
            • 1970-01-01
            • 2016-10-19
            • 2011-03-07
            • 1970-01-01
            • 1970-01-01
            • 2011-01-14
            • 2011-08-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多