VISUAL vs. EDITOR –有什么区别?


182

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

Answers:


145

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

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

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

如今,您可以保留未EDITOR设置状态或将其设置为vi -e


9
大多数应用程序将$VISUAL它们添加到(用引号引起来的)文件名附加到的shell片段中,但是有些应用程序将其视为可执行文件的名称,它们可能会或可能不会在其中搜索$PATH。因此,最好将VISUAL(和EDITOR)设置为可执行文件的完整路径(如果需要,例如选项,可以是包装脚本)。
吉尔斯(Gilles)2010年

4
在现代,ed类似的东西并不是很流行,所以我相信可以忽略VISUAL和使用它EDITOR
PavelŠimerda2014年

13
感谢有关C-x C-ebash 的提示。非常便利。
mndrix 2015年

5
@PavelŠimerda,仅设置EDITOR是不够的,例如git在Ubuntu 12.04上。没有VISUAL设置将git忽略EDITOR并仅使用nano(我猜是默认编译)。
maxschlepzig 2015年

5
@PavelŠimerda没有意义,但这是约定。EDITOR曾经是基于指令的编辑器,例如ed。当出现具有GUI的编辑器时-所谓的GUI,是指CLI GUI(vim,emacs等-认为ncurses),而不是桌面环境的GUI-编辑过程发生了巨大变化,因此出现了另一个变量的需求。在这种情况下,CLI GUI和桌面环境GUI编辑器大致相同,因此您可以将VISUAL设置为;但是,EDITOR用于根本不同的工作流程。当然,这都是历史性的。这些天没有人使用ed。
Zenexer

32

可接受的答案可能是一种简短的好方法,但是当VISUAL和EDITOR之间的区别仍然很重要时(这是基于Adam Katz的答案),这将是一次尝试。

POSIX规范仍然区分可视模式编辑器和行编辑器。当光标很难通过串行连接定位时(尤其是由于串行连接的速度),这确实很重要。关于vi维基百科文章提供了一些关于vi(可视模式编辑器)和ex(行编辑器)之间区别的有用背景。如果您对研究进行了足够的深入研究,您会发现“ ex”规范的“ RATIONALE”部分,这给出了区分仍存在于规范中的原因:

人们认识到,如果不是不可能的话,vi的某些部分将很难在块模式终端或没有任何形式的游标寻址的终端上令人满意地实现,因此,并非强制要求此类功能在所有终端上都有效。但是,意图是vi的实现应该在所有能够支持它们的终端上提供全部功能。

自从放弃300波特调制解调器以来,我就不需要这样做了,但是我可以想象,使用慢速串行线路连接到嵌入式系统(和/或通过真正的骰子连接)的人们可能仍然喜欢能够拥有首选的线路模式不同于vi的“可视”编辑器。在有限的应用中,通过有损,缓慢,狭窄连接的VT100样式的终端代码可能会“膨胀”。

对于我们其他人,似乎“正确”的答案似乎是“将他们俩都设置为您的首选编辑器”。对于本地/图形编辑器(例如Sublime或gvim)与终端窗口编辑器(例如vi或emacs),可以采用这种区别可能是可以的,但是可能有很多传统的原因导致该编辑器无法按预期工作。


2

一些工具仅接受EDITOR,例如内置的fc shell :

-e ENAME  select which editor to use.  Default is FCEDIT, then EDITOR, then vi

1

我已经得出结论,它$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将无法与希望对您的编辑起作用的程序一起使用。绝对包括sudoeditorsudo -e)。

如果到vim的路径中有空格,这可能会中断。如果这是一个问题,请正确安装它,或者考虑使用符号链接,例如/usr/local/bin/gvim


是否使用$VISUAL取决于您是否具有能够进行光标定位的终端,而不取决于您是否具有可用的窗口系统。
Radon Rosborough

啊,太好了!您可以为此提供明确的参考链接吗?我认为我的代码仍然安全,因为我也在检查$DISPLAY,但这很高兴。
亚当·卡兹

没关系,robla的答案中似乎存在这样的引用,甚至提到了我的答案。
亚当·卡兹

0

由于似乎在vi或类似环境中不会出现任何环境失败,因此我将VISUAL设置为需要X DISPLAY并将EDITOR设置为ex的环境。

通常,当某些程序不使用VISUAL时,这似乎只会引起我一些问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.