我通常将环境变量VISUAL
和EDITOR
环境变量设置为相同的值,但是有什么区别呢?为什么我要对它们进行不同的设置?开发应用程序时,为什么我应该选择查看VISUAL
之前EDITOR
或反之亦然?
答案1
编辑EDITOR
器应该能够在不使用“高级”终端功能(例如 olded
或ex
mode of vi
)的情况下工作。它用于电传打字机终端。
编辑VISUAL
器可以是全屏编辑器,如vi
或emacs
。
例如,如果您通过 bash (使用 )调用编辑器C-x C-e
,bash 将尝试第一个VISUAL
编辑器,然后,如果VISUAL
失败(因为终端不支持全屏编辑器),它会尝试EDITOR
。
现在,您可以EDITOR
不设置或将其设置为vi -e
。
答案2
接受的答案可能是一个好的、简短的处理,但这将是一次尝试更深入地探讨 VISUAL 和 EDITOR 之间的区别何时仍然重要(建立在亚当·卡茨的回答)。
POSIX 规范仍然区分可视模式编辑器和行编辑器。在串行连接上的光标定位很困难(特别是因为串行连接的速度)的日子里,这确实很重要。这vi 的维基百科文章提供了一些关于 vi(可视模式编辑器)和 ex(行编辑器)之间区别的有用背景知识。如果你深入研究研究,你会发现“ex”规范的“RATIONALE”部分,这给出了规范中仍然存在这种区别的原因:
人们认识到,vi 的某些部分即使不是不可能,也很难在块模式终端或没有任何形式的光标寻址的终端上令人满意地实现,因此,此类功能应在所有终端上工作并不是强制性要求。然而,vi 实现应该在所有能够支持它们的终端上提供全套功能。
自从放弃我的 300 波特调制解调器后,我就不再需要这个了,但我可以想象那些使用慢速串行线路连接到嵌入式系统(和/或通过非常危险的连接)的人可能仍然很高兴能够拥有一个与 vi 这样的“可视”编辑器不同的首选行模式编辑器。在有损、滞后、狭窄的连接上的 VT100 型终端代码在有限的应用中可能会“臃肿”。
对于我们其他人来说,“正确”的答案似乎是“将它们都设置为您的首选编辑器”。图形编辑器(例如 Sublime、gvim 或 emacs)与终端编辑器(例如 vi/vim 或带有 -nw 选项的 emacs)的这种区别可能是可以的,但是可能有很多遗留原因导致它可能获胜没有像希望的那样工作。
答案3
$VISUAL
是比 更有能力和互动的偏好$EDITOR
。如果未定义,则任何寻求$VISUAL
应该然后尝试$EDITOR
下一步。
有些人采用了现代惯例,表示$VISUAL
图形终端和$EDITOR
交互式终端。从历史上看,$VISUAL
(比如六)指的是交互式终端显示,而$EDITOR
(例如编辑)是一个无法处理(文本)光标移动的行编辑器。看 罗布拉的回答了解更多历史笔记。
目前,我的~/.bashrc
and中有这样的东西~/.zshrc
:
# Prefer vim or else fail over to vi
EDITOR="$(command -v vim 2>/dev/null || command -v vi)"
# 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
without-f
不适用于希望对您的编辑进行操作的程序。这其中肯定包括sudoeditor
( sudo -e
)。
如果 vim 路径中有空格,这可能会中断。如果这是一个问题,要么正确安装它,要么考虑像这样的符号链接/usr/local/bin/gvim
答案4
由于似乎没有任何 vi 或类似环境会失败的环境,因此我将 VISUAL 设置为需要 X DISPLAY 的内容,并将 EDITOR 设置为 ex。
大多数情况下,当某些程序不使用 VISUAL 时,这似乎会给我带来问题。