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

#1 楼

EDITOR编辑器应该能够在不使用“高级”终端功能的情况下工作(例如ed的旧exvi模式)。

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

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

现在,您可以不设置EDITOR或将其设置为vi -e

评论


大多数应用程序将$ VISUAL视为一个shell片段,并在该片段后附加(用引号引起来的)文件名,但是一些应用程序将其视为可执行文件的名称,它们可能会或可能不会在$ PATH中进行搜索。因此,最好将VISUAL(和EDITOR)设置为可执行文件的完整路径(如果需要,可以使用包装脚本)。

–吉尔斯'所以-不再是邪恶的'
2010-12-15 18:27

在现代,ed和类似语言不是很流行,因此我相信可以忽略VISUAL并使用EDITOR。

– PavelŠimerda
2014年3月30日17:35



感谢您提供有关bash中C-x C-e的技巧。非常便利。

–mndrix
15年3月25日在19:22

@PavelŠimerda,仅设置EDITOR是不够的,例如在Ubuntu 12.04上安装git。如果没有设置VISUAL,git会忽略EDITOR,而只使用nano(我猜是默认编译)。

–maxschlepzig
15年4月25日在10:24

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

–辛尼泽
16-09-17在22:34



#2 楼

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

POSIX规范仍然区分可视模式编辑器和行编辑器。在光标很难通过串行连接定位时(尤其是由于串行连接的速度),这确实很重要。关于vi的维基百科文章提供了一些关于vi(可视模式编辑器)和ex(行编辑器)之间区别的有用背景。如果您对研究进行了足够深入的研究,则会发现“ ex”规范的“ RATIONALE”部分,这给出了区分仍在规范中的原因:可以认识到,如果不是
不可能,vi的部分将很难在块模式终端或没有任何形式的游标寻址的
/>强制性要求此类功能应在所有终端上均起作用。 。


自从放弃了300波特的调制解调器以来,我就不需要这个了,但是我可以想象,那些使用慢速串行线路连接到嵌入式系统的人(和/或真正的骗子)连接)可能仍然会喜欢能够有一个喜欢的行模式编辑器,而不是像vi这样的“可视”编辑器。在有限的应用程序中,通过有损耗,缓慢,狭窄的连接上的VT100样式的终端代码可能会“膨胀”。成为您的首选编辑”。对于本地/图形编辑器(例如Sublime或gvim)与终端窗口编辑器(例如vi或emacs),可以采用这种区别可能是可以的,但是可能有很多传统的原因导致该编辑器无法按预期工作。

#3 楼

我得出的结论是$VISUAL是图形的,而$EDITOR是命令行的。如果未定义,则寻求$VISUAL的任何内容都应尝试下一个$EDITOR。 >目前,我的~/.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不适用于希望对您的编辑起作用的程序。绝对包括-fsudoeditor)。

如果vim路径中有空格,则可能会中断。如果存在问题,请正确安装或考虑使用sudo -e之类的符号链接

评论


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

–拉登·罗斯伯勒(Radon Rosborough)
18年3月13日在23:01

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

–亚当·卡兹(Adam Katz)
18年3月14日在14:24

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

–亚当·卡兹(Adam Katz)
18年3月14日在14:43

回到我撰写2016年答案的时候,我没有足够的声誉来发表评论(我会这样做)。感谢您的提示,@AdamKatz!

–robla
20年4月1日,下午2:36

#4 楼

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

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


#5 楼

由于似乎在vi或类似环境中不会出现任何环境失败,因此我将VISUAL设置为需要X DISPLAY的内容,而将EDITOR设置为ex。
在某些程序不使用VISUAL时导致我出现问题。