虽然不缺少有关如何设置Subversion命令行界面的文本编辑器的信息(例如,请参阅here,here和here),无法弄清楚我的本地系统从哪里获取文本编辑器信息。
在我的系统上,当我执行svn commit
时,它会打开vim
以提交提交消息。既然这就是我想要的,我从未真正考虑过它。这一直都很有效。但是,最近一位同事正在尝试提交,但由于错误说编辑器未设置而失败。我从来没有忘记设置编辑器,所以我对此非常困惑。
我正在运行Ubuntu 12.04,我已经从源代码编译并安装了Subversion CLI客户端版本1.8.10。在此之前,我使用的是与apt-get install subversion
一起安装的任何Ubuntu的Canonical系统。
Using External Editors的Subversion Book部分说明了以下设置文本编辑器的可能性:
我调查了这些地方,但没有找到如何在我的计算机上设置默认文本编辑器:
--editor-cmd
选项SVN_EDITOR
未设置环境变量editor-cmd
未在我的~/.subversion/config
和/etc/subversion/config
中设置。这两个文件都存在,但该行被注释掉了。VISUAL
未设置环境变量EDITOR
未设置环境变量必须有另一个可以设置默认值的地方。有人知道吗?
编辑:有人建议Subversion可能正在调用/usr/bin/editor
,而这并未在我的同事的机器上设置。我发现/usr/bin/editor
在我的系统和我的同事系统中设置相同。
答案 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并得到了预期的行为。这表明了其中一种可能性:
--with-editor
配置标志(直接或间接)构建了一个版本的subversion。回退将指向--with-editor
配置标志设置为的任何内容。/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'