Linux上的Subversion CLI默认文本编辑器

时间:2014-10-02 21:35:10

标签: linux svn text-editor command-line-interface

虽然不缺少有关如何设置Subversion命令行界面的文本编辑器的信息(例如,请参阅hereherehere),无法弄清楚我的本地系统从哪里获取文本编辑器信息。

在我的系统上,当我执行svn commit时,它会打开vim以提交提交消息。既然这就是我想要的,我从未真正考虑过它。这一直都很有效。但是,最近一位同事正在尝试提交,但由于错误说编辑器未设置而失败。我从来没有忘记设置编辑器,所以我对此非常困惑。

我正在运行Ubuntu 12.04,我已经从源代码编译并安装了Subversion CLI客户端版本1.8.10。在此之前,我使用的是与apt-get install subversion一起安装的任何Ubuntu的Canonical系统。

Using External EditorsSubversion Book部分说明了以下设置文本编辑器的可能性:

  1. - editor-cmd命令行选项
  2. SVN_EDITOR环境变量
  3. editor-cmd运行时配置选项
  4. VISUAL环境变量
  5. EDITOR环境变量
  6. 可能是Subversion库中内置的后备值(官方版本中没有)
  7. 我调查了这些地方,但没有找到如何在我的计算机上设置默认文本编辑器:

    1. 提交时未使用--editor-cmd选项
    2. SVN_EDITOR未设置环境变量
    3. editor-cmd未在我的~/.subversion/config/etc/subversion/config中设置。这两个文件都存在,但该行被注释掉了。
    4. VISUAL未设置环境变量
    5. EDITOR未设置环境变量
    6. 我正在下载the official repository,因此不应该有后备。
    7. 必须有另一个可以设置默认值的地方。有人知道吗?

      编辑:有人建议Subversion可能正在调用/usr/bin/editor,而这并未在我的同事的机器上设置。我发现/usr/bin/editor在我的系统和我的同事系统中设置相同。

5 个答案:

答案 0 :(得分:1)

当您直接下载源代码(并构建它 - 假设您已满足构建依赖项)时,您指定(或者您可以省略)默认的回退编辑器。通常在Ubuntu上使用类似的东西完成源代码构建(假设我已经从here提取/下载了subversion 1.8.10 源代码):

./configure
make
sudo make install

请注意,上面的./configure命令未指定任何选项。默认值将安装到前缀/ usr / local。在发出这些命令之前(在Ubuntu 12.04上),我运行了sudo apt-get build-dep subversion。然后我做了上面的命令来构建和安装。我确保选项1-5(在OPs问题中)不满意,然后尝试将更改提交到存储库。我得到了这个回复:

svn: E205007: Commit failed (details follow):
svn: E205007: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: E205007: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found

由于我没有删除官方的Ubuntu颠覆,我必须运行我的/usr/local/bin/svn以确保我使用的是我建造的那个。我本来可以使用sudo apt-get remove subversion删除官方版本以确保。

现在,如果运行这些命令来重建源:

make clean
./configure --with-editor=/usr/bin/editor
make
sudo make install

应该会发现,如果不满足选项1到5并且运行了这个版本的subversion,它应该默认运行/usr/bin/editor个点。在Ubuntu上将取决于使用的替代方案。

所以,当Ubuntu进行官方构建时,他们的后备编辑器来自哪里?我在这个link访问了12.04源代码库以进行颠覆。在右侧,我下载了 diff 文件subversion_1.6.17dfsg-3ubuntu3.4.diff.gz。我打开了Ubuntu使用和向下滚动的diff文件你可以发现他们使用这组./configure选项(标志):

  

confflags:= \         --prefix = / usr \         --libdir = $(libdir)\         --mandir = \ $$ {prefix} / share / man \         --with-apr = / usr \         --with-apr-util = / usr \         --with-neon = / usr \         --with-serf = / usr \         --with-berkeley-db = ::: db \         --with-sasl = / usr \          - with-editor = / usr / bin / editor \         --with-ruby-sitedir = / usr / lib / ruby​​ \         --with-swig = / usr \         --with-kwallet \         --with-侏儒-密钥环

粗体条目显示他们使用/usr/bin/editor作为后备。

我在Ubuntu 12.04上从源代码构建了subversion 1.8.10并得到了预期的行为。这表明了其中一种可能性:

  • 在其中一个系统上,实际上满足了选项1到5。
  • 使用--with-editor配置标志(直接或间接)构建了一个版本的subversion。回退将指向--with-editor配置标志设置为的任何内容。
  • 在其中一个系统上运行了错误版本的subversion。一种可能性是Ubuntu的官方颠覆实际上正在被使用。如果是这种情况,则构建为使用/usr/bin/editor作为后备。
  • 在您的某个系统上,您有svn的别名(或等效的),用于指定编辑器。例如,~/.bashrc~/.bash_profile/etc/bash.bashrc等启动脚本中将指定别名。

答案 1 :(得分:0)

试试这个:

update-alternatives --display editor

答案 2 :(得分:0)

我认为在Linux和其他类Unix系统上指定它的正常方法是设置VISUAL环境变量(对于GUI编辑器)或EDITOR变量(对于在终端中运行的编辑器)。

答案 3 :(得分:0)

strings二进制文件上运行svn,看看它是否在内部提及Vim或任何相关的env vars。

同样在strace -f下提交可能会发现一些事情。

答案 4 :(得分:0)

在.bashrc文件中设置此项 不要忘记“源.bashrc”或重新打开终端。

  

导出SVN_EDITOR ='vim'