Answers:
该EDITOR
编辑器应该能够在不使用“高级”功能的终端(如旧的工作ed
或ex
模式vi
)。它用于电传打字终端。
一个VISUAL
编辑器,可能是一个全屏幕编辑器vi
或emacs
。
例如,如果您通过bash调用编辑器(使用C-x C-e
),则bash将首先尝试VISUAL
编辑器,然后,如果VISUAL
失败(因为终端不支持全屏编辑器),它将尝试EDITOR
。
如今,您可以保留未EDITOR
设置状态或将其设置为vi -e
。
ed
类似的东西并不是很流行,所以我相信可以忽略VISUAL
和使用它EDITOR
。
C-x C-e
bash 的提示。非常便利。
EDITOR
是不够的,例如git
在Ubuntu 12.04上。没有VISUAL
设置将git
忽略EDITOR
并仅使用nano
(我猜是默认编译)。
ed
。当出现具有GUI的编辑器时-所谓的GUI,是指CLI GUI(vim,emacs等-认为ncurses),而不是桌面环境的GUI-编辑过程发生了巨大变化,因此出现了另一个变量的需求。在这种情况下,CLI GUI和桌面环境GUI编辑器大致相同,因此您可以将VISUAL设置为;但是,EDITOR用于根本不同的工作流程。当然,这都是历史性的。这些天没有人使用ed。
可接受的答案可能是一种简短的好方法,但是当VISUAL和EDITOR之间的区别仍然很重要时(这是基于Adam Katz的答案),这将是一次尝试。
POSIX规范仍然区分可视模式编辑器和行编辑器。当光标很难通过串行连接定位时(尤其是由于串行连接的速度),这确实很重要。关于vi的维基百科文章提供了一些关于vi(可视模式编辑器)和ex(行编辑器)之间区别的有用背景。如果您对研究进行了足够的深入研究,您会发现“ ex”规范的“ RATIONALE”部分,这给出了区分仍存在于规范中的原因:
人们认识到,如果不是不可能的话,vi的某些部分将很难在块模式终端或没有任何形式的游标寻址的终端上令人满意地实现,因此,并非强制要求此类功能在所有终端上都有效。但是,意图是vi的实现应该在所有能够支持它们的终端上提供全部功能。
自从放弃300波特调制解调器以来,我就不需要这样做了,但是我可以想象,使用慢速串行线路连接到嵌入式系统(和/或通过真正的骰子连接)的人们可能仍然喜欢能够拥有首选的线路模式不同于vi的“可视”编辑器。在有限的应用中,通过有损,缓慢,狭窄连接的VT100样式的终端代码可能会“膨胀”。
对于我们其他人,似乎“正确”的答案似乎是“将他们俩都设置为您的首选编辑器”。对于本地/图形编辑器(例如Sublime或gvim)与终端窗口编辑器(例如vi或emacs),可以采用这种区别可能是可以的,但是可能有很多传统的原因导致该编辑器无法按预期工作。
我已经得出结论,它$VISUAL
是图形的,$EDITOR
也是命令行的。如果未定义,$VISUAL
则应继续尝试任何查找$EDITOR
。
(需要引文:我希望获得适当的文档,也许是手册页或POSIX规范?)
目前,我有这样的东西在我~/.bashrc
和~/.zshrc
:
EDITOR="$(command -v vim)"
# we have gvim, not in an SSH term, and the X11 display number is under 10
if command -v gvim >/dev/null 2>&1 \
&& [ "$SSH_TTY$DISPLAY" = "${DISPLAY#*:[1-9][0-9]}" ]; then
export VISUAL="$(command -v gvim) -f"
SUDO_EDITOR="$VISUAL"
else
SUDO_EDITOR="$EDITOR"
fi
gvim
否则-f
将无法与希望对您的编辑起作用的程序一起使用。绝对包括sudoeditor
(sudo -e
)。
如果到vim的路径中有空格,这可能会中断。如果这是一个问题,请正确安装它,或者考虑使用符号链接,例如/usr/local/bin/gvim
$VISUAL
取决于您是否具有能够进行光标定位的终端,而不取决于您是否具有可用的窗口系统。
$DISPLAY
,但这很高兴。
$VISUAL
它们添加到(用引号引起来的)文件名附加到的shell片段中,但是有些应用程序将其视为可执行文件的名称,它们可能会或可能不会在其中搜索$PATH
。因此,最好将VISUAL
(和EDITOR
)设置为可执行文件的完整路径(如果需要,例如选项,可以是包装脚本)。