it-swarm.cn

VISUAL vs. EDITOR –有什么区别?

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

196
xenoterracide

EDITOR编辑器应该可以在不使用“高级”终端功能的情况下工作(例如ed的旧exvi模式)。它用于电传打字终端。

VISUAL编辑器可以是全屏编辑器,例如viemacs

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

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

157
andcoz

可以接受的答案可能是一个不错的简短处理,但是当VISUAL和EDITOR之间的区别仍然很重要时(这是基于 Adam Katz的答案 ),这将是一次尝试。

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

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

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

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

37
robla

我得出的结论是$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

3
Adam Katz

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

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

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

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

0
Mike William Meyer