视觉与编辑器——有什么区别?

xen*_*ide 220 vi environment-variables ex

我通常将环境变量VISUALEDITOR环境变量都设置为相同的东西,但有什么区别呢?为什么我要以不同的方式设置它们?当开发应用程序,我为什么要选择看VISUAL之前EDITOR,反之亦然?

and*_*coz 181

EDITOR编辑器应该能够在不使用“高级”功能的终端(如旧的工作edex模式vi)。它用于电传终端。

一个VISUAL编辑器,可能是一个全屏幕编辑器viemacs

例如,如果您通过 bash(使用C-x C-e)调用编辑器,bash 将尝试第一个VISUAL编辑器,然后,如果VISUAL失败(因为终端不支持全屏编辑器),它会尝试EDITOR.

如今,您可以不EDITOR设置或将其设置为vi -e.

  • 感谢有关 bash 中的“Cx Ce”的提示。非常便利。 (18认同)
  • 大多数应用程序将 `$VISUAL` 视为一个 shell 片段,它们将(shell 引用的)文件名附加到其中,但有些应用程序将其视为一个可执行文件的名称,它们可能会或可能不会在 `$PATH` 中搜索。所以最好将`VISUAL`(和`EDITOR`)设置为可执行文件的完整路径(如果你想要选项,它可以是一个包装脚本)。 (13认同)
  • @PavelŠimerda 这没有意义,但这是惯例。EDITOR 曾经用于像 `ed` 这样的基于指令的编辑器。当带有 GUI 的编辑器出现时——我说的 GUI,我指的是 CLI GUI(vim、emacs 等——想想 ncurses),而不是桌面环境 GUI——编辑过程发生了巨大变化,因此需要另一个变量。在这种情况下,CLI GUI 和桌面环境 GUI 编辑器或多或少相同,因此您可以将 VISUAL 设置为两者之一;但是,EDITOR 适用于完全不同的工作流程。当然,这都是历史。这些天没有人使用 ed。 (8认同)
  • 在现代,`ed` 和类似的不是很流行,所以我相信忽略 `VISUAL` 并使用 `EDITOR` 是可以的。 (6认同)
  • @PavelŠimerda,仅设置`EDITOR` 是不够的,例如Ubuntu 12.04 上的`git`。如果没有设置`VISUAL`,`git` 会忽略`EDITOR` 而只使用`nano`(我猜是默认编译的)。 (5认同)
  • @PavelŠimerda您最好忽略`EDITOR`而只使用`VISUAL`,因为后者具有更好的支持并且是现代使用的“正确”变量。 (3认同)
  • git 对 VISUAL 的优先级高于 EDITOR。请参阅:/sf/answers/181777361/ 所以 git 仅使用 EDITOR 未设置 VISUAL (2认同)

rob*_*bla 45

接受的答案可能是一个很好的简短处理方法,但这将尝试更深入地了解何时 VISUAL 和 EDITOR 之间的区别可能仍然很重要(基于Adam Katz 的回答)。

POSIX 规范仍然区分可视模式编辑器和行编辑器。这在通过串行连接定位光标很困难的时代确实很重要(特别是因为串行连接的速度)。在维基百科的文章VI给出了VI之间的区别一些有用的背景(可视化模式编辑器)和EX(线编辑器)。如果你深入研究,你会发现“ex”规范的“RATIONALE”部分,这给出了仍然在规范中的区别的原因:

众所周知,即使不是不可能,也很难在块模式终端或没有任何形式的光标寻址的终端上令人满意地实现 vi 的某些部分,因此并不是强制要求此类功能应在所有终端上运行. 然而,vi 实现应该在能够支持它们的所有终端上提供全套能力。

自从放弃我的 300 波特调制解调器后,我就不再需要它了,但我可以想象使用慢速串行线路连接到嵌入式系统(和/或通过非常危险的连接)的人可能仍然喜欢能够拥有首选线路模式编辑器不同于像 vi 这样的“可视化”编辑器。在有限的应用程序中,VT100 式终端代码在有损、滞后、狭窄的连接上可能会“膨胀”。

对于我们其他人来说,“正确”的答案似乎是“将它们都设置为您首选的编辑器”。为本地/图形编辑器(例如 Sublime 或 gvim)与终端窗口编辑器(例如 vi 或 emacs)合并选择这种区别可能是可以的,但可能有大量遗留原因导致这可能无法按预期工作.


Ada*_*atz 9

$VISUAL是比 更有能力和互动的偏好$EDITOR。如果未定义,则接下来$VISUAL 应该尝试任何寻求的内容$EDITOR

有些人采用了现代惯例,表示$VISUAL图形终端和$EDITOR交互式终端。从历史上看,$VISUAL(如vi)指的是交互式终端显示,而$EDITOR(如ed)是无法处理(文本)光标移动的行编辑器。有关更多历史记录,请参阅 robla 的答案。

目前,我的~/.bashrcand中有这样的东西~/.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
Run Code Online (Sandbox Code Playgroud)

gvimwithout-f不适用于希望对您的编辑进行操作的程序。这其中肯定包括sudoeditor( sudo -e)。

如果 vim 路径中有空格,这可能会中断。如果这是一个问题,要么正确安装它,要么考虑像这样的符号链接/usr/local/bin/gvim

  • 是否使用“$VISUAL”取决于您是否有能够进行光标定位的终端,而不是您是否有可用的窗口系统。 (4认同)
  • 当我写 2016 年的答案时,我没有足够的声誉来写评论(我本来会这样做)。感谢您的写作提示,@AdamKatz! (2认同)