VISUAL vs. EDITOR - was ist der Unterschied?

182

Normalerweise setze ich sowohl Umgebungsvariablen VISUALals auch EDITORUmgebungsvariablen auf dasselbe, aber was ist der Unterschied? Warum sollte ich sie anders einstellen? Warum sollte ich mich beim Entwickeln von Apps VISUALvorher entscheiden EDITORoder umgekehrt?

Xenoterracid
quelle

Antworten:

145

Der EDITOREditor sollte in der Lage sein, ohne "erweiterte" Terminalfunktionalität (wie alt edoder exModus von vi) zu arbeiten. Es wurde auf Teletyp-Terminals verwendet.

Ein VISUALEditor kann ein Vollbild-Editor als vioder sein emacs.

Wenn Sie beispielsweise einen Editor über bash (using C-x C-e) aufrufen , wird bash zuerst den VISUALEditor versuchen. Wenn dies VISUALfehlschlägt (weil das Terminal keinen Vollbild-Editor unterstützt), wird dies versucht EDITOR.

Heutzutage können Sie EDITORnicht gesetzt lassen oder auf setzen vi -e.

andcoz
quelle
9
Die meisten Anwendungen behandeln sie $VISUALals Shell-Snippet, an das sie den (in Shell-Anführungszeichen stehenden) Dateinamen anhängen, aber einige behandeln ihn als den Namen einer ausführbaren Datei, in der sie möglicherweise suchen oder nicht $PATH. Daher ist es am besten, VISUAL(und EDITOR) den vollständigen Pfad zu einer ausführbaren Datei anzugeben (die ein Wrapper-Skript sein kann, wenn Sie z. B. Optionen möchten).
Gilles
4
In modernen Zeiten edund ähnlichen Zeiten sind sie nicht sehr populär, daher glaube ich, dass es in Ordnung ist, sie einfach zu ignorieren VISUALund zu verwenden EDITOR.
Pavel Šimerda
13
Danke für den Tipp etwa C-x C-ein der Bash. Sehr praktisch.
Mndrix
5
@ PavelŠimerda, nur einstellen EDITORreicht zB gitunter Ubuntu 12.04 nicht aus. Ohne VISUALgesetzt zu werden gitignoriert EDITORund nur benutzt nano(die standardmäßig kompiliert, denke ich).
Maxschlepzig
5
@ PavelŠimerda Es macht keinen Sinn, aber es ist die Konvention. EDITOR war früher für anweisungsbasierte Redakteure wie ed. Als Editoren mit GUIs entstanden - und mit GUI meine ich CLI-GUI (vim, emacs usw.) und nicht Desktop-GUI -, änderte sich der Bearbeitungsprozess dramatisch, sodass eine andere Variable erforderlich wurde. In diesem Kontext sind die GUI-Editoren der CLI-Benutzeroberfläche und der Desktop-Umgebung mehr oder weniger identisch, sodass Sie VISUAL auf entweder festlegen können. EDITOR ist jedoch für einen grundlegend anderen Workflow gedacht. Das ist natürlich alles historisch. Heutzutage benutzt niemand mehr Ed.
Zenexer
32

Die akzeptierte Antwort ist wahrscheinlich eine gute, kurze Behandlung, aber dies wird ein Versuch sein, tiefer zu gehen, wenn die Unterscheidung zwischen VISUAL und EDITOR noch wichtig sein könnte (aufbauend auf Adam Katz 'Antwort ).

Die POSIX-Spezifikation unterscheidet weiterhin zwischen Editoren für den visuellen Modus und Zeileneditoren. Dies war wirklich wichtig in den Tagen, als die Cursorpositionierung über seriellen Verbindungen schwierig war (insbesondere aufgrund der Geschwindigkeit der seriellen Verbindung). Der Wikipedia-Artikel für vi gibt einige nützliche Hintergrundinformationen zur Unterscheidung zwischen vi (ein visueller Modus-Editor) und ex (ein Zeileneditor). Wenn Sie die Recherche gründlich genug durchgreifen , finden Sie in der "ex" -Spezifikation den Abschnitt "RATIONALE" , der einen Grund für die noch vorhandene Unterscheidung in der Spezifikation angibt:

Es wird erkannt, dass es schwierig, wenn nicht unmöglich ist, Teile von vi auf einem Blockmodus-Terminal oder einem Terminal ohne irgendeine Form von Cursoradressierung zufriedenstellend zu implementieren, so dass es nicht zwingend erforderlich ist, dass solche Merkmale auf allen Terminals funktionieren . Es ist jedoch beabsichtigt, dass eine vi-Implementierung alle Funktionen auf allen Endgeräten bereitstellt, die diese unterstützen können.

Ich habe dies nicht gebraucht, seit ich mein 300-Baud-Modem aufgegeben habe, aber ich kann mir vorstellen, dass Menschen, die langsame serielle Leitungen für die Verbindung mit eingebetteten Systemen (und / oder über wirklich gefährliche Verbindungen) verwenden, es immer noch zu schätzen wissen, einen bevorzugten Leitungsmodus zu haben Editor unterscheidet sich von einem "visuellen" Editor wie vi. VT100-artige Terminalcodes über eine verlustbehaftete, verzögerte, schmale Verbindung können in begrenzten Anwendungen "aufgebläht" sein.

Für den Rest von uns scheint die "richtige" Antwort zu sein, "beide als Ihren bevorzugten Editor festlegen". Es mag in Ordnung sein, diese Unterscheidung für einen lokalen / grafischen Editor (z. B. Sublime oder gvim) gegen einen Terminal-Fenster-Editor (z. B. vi oder emacs) zu wählen, aber es gibt wahrscheinlich eine Vielzahl von Gründen, warum dies möglicherweise nicht so funktioniert, wie erhofft .

robla
quelle
2

Einige Tools akzeptieren nur EDITOR, zum Beispiel die in fc eingebaute Shell :

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

Ich bin zu dem Schluss gekommen, dass $VISUALes sich um eine grafische Darstellung und $EDITOReine Befehlszeile handelt. Wenn nicht definiert, alle suchend , $VISUAL sollten dann versuchen , $EDITORnächste.

( Zitierweise erforderlich: Ich würde gerne die richtige Dokumentation erhalten, vielleicht eine Manpage oder eine POSIX-Spezifikation?)

Im Moment habe ich Sachen wie diese in meinem ~/.bashrcund ~/.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

gvimwithout -ffunktioniert nicht mit Programmen, die erwarten, dass sie auf Ihre Änderungen reagieren. Dies beinhaltet definitiv sudoeditor( sudo -e).

Dies kann fehlschlagen, wenn der Pfad zu vim Leerzeichen enthält. Wenn das ein Problem ist, installieren Sie es entweder ordnungsgemäß oder berücksichtigen Sie Symlinks wie/usr/local/bin/gvim

Adam Katz
quelle
Die Verwendung $VISUALhängt davon ab, ob Sie ein Terminal haben, mit dem Sie den Cursor positionieren können, und nicht, ob Sie über ein Fenstersystem verfügen.
Radon Rosborough
Ah gut! Können Sie einen endgültigen Referenzlink dafür bereitstellen? Ich denke, mein Code ist immer noch sicher, da ich auch prüfe $DISPLAY, aber das ist gut zu wissen.
Adam Katz
Egal , es sieht so aus, als gäbe es in Roblas Antwort einen solchen Hinweis , der sogar meine Antwort erwähnt.
Adam Katz
0

Da es scheinbar keine Umgebungen gibt, in denen vi oder ähnliches fehlschlagen würde, habe ich VISUAL auf etwas eingestellt, das ein X-DISPLAY benötigt, und EDITOR auf ex.

Meistens scheint mir das nur Probleme zu bereiten, wenn ein Programm VISUAL nicht verwendet.

Mike William Meyer
quelle