web-dev-qa-db-fra.com

VISUAL vs EDITOR - quelle est la différence?

Je règle généralement les variables d'environnement VISUAL et EDITOR sur la même chose, mais quelle est la différence? Pourquoi devrais-je les définir différemment? Lors du développement d'applications, pourquoi devrais-je choisir de regarder VISUAL avant EDITOR ou vice versa?

196
xenoterracide

L'éditeur EDITOR devrait pouvoir fonctionner sans utiliser de fonctionnalité de terminal "avancée" (comme l'ancien mode ed ou ex de vi). Il était utilisé sur les terminaux de télétype.

Un éditeur VISUAL peut être un éditeur plein écran comme vi ou emacs.

Par exemple. si vous appelez un éditeur via bash (en utilisant C-x C-e), bash essaiera d'abord l'éditeur VISUAL puis, si VISUAL échoue (car le terminal ne prend pas en charge un éditeur plein écran), il essaie EDITOR.

De nos jours, vous pouvez laisser EDITOR non défini ou le définir sur vi -e.

157
andcoz

La réponse acceptée est probablement un bon traitement court, mais ce sera une tentative d'approfondir le moment où la distinction entre VISUEL et ÉDITEUR pourrait encore avoir de l'importance (en s'appuyant sur réponse d'Adam Katz ).

La spécification POSIX fait toujours la distinction entre les éditeurs de mode visuel et les éditeurs de ligne. Cela comptait vraiment à l'époque où le positionnement du curseur sur les connexions série était difficile (en particulier en raison de la vitesse de la connexion série). Le article Wikipedia pour vi donne quelques informations utiles sur la distinction entre vi (un éditeur de mode visuel) et ex (un éditeur de ligne). Si vous creusez assez profondément dans la recherche, vous trouverez la section "JUSTIFICATION" de la spécification "ex" , ce qui donne une raison pour que la distinction soit toujours dans la spécification:

Il est reconnu que des parties de vi seraient difficiles, voire impossibles, à mettre en œuvre de manière satisfaisante sur un terminal en mode bloc ou sur un terminal sans aucune forme d'adressage de curseur, il n'est donc pas obligatoire que ces fonctionnalités fonctionnent sur tous les terminaux. . Il est cependant prévu qu'une implémentation vi fournisse l'ensemble complet de capacités sur tous les terminaux capables de les prendre en charge.

Je n'ai pas eu besoin de cela depuis que j'ai abandonné mon modem 300 bauds, mais je peux imaginer que les personnes qui utilisent des lignes série lentes pour se connecter à des systèmes embarqués (et/ou via des connexions vraiment délicates) pourraient apprécie toujours de pouvoir avoir un éditeur de mode ligne préféré distinct d'un éditeur "visuel" comme vi. Les codes de terminal de type VT100 sur une connexion avec perte, retardée et étroite peuvent être "gonflés" dans des applications limitées.

Pour le reste d'entre nous, il semble que la réponse "correcte" semble être "définissez-les tous les deux comme votre éditeur préféré". Il pourrait être acceptable de coopter cette distinction pour un éditeur local/graphique (par exemple Sublime ou gvim) par rapport à un éditeur de fenêtre de terminal (par exemple vi ou emacs), mais il y a probablement une montagne de raisons héritées pour lesquelles cela ne fonctionnera probablement pas comme espéré .

37
robla

J'ai conclu que $VISUAL est graphique et $EDITOR est la ligne de commande. Si non défini, tout ce qui cherche $VISUAL devrait puis essayez $EDITOR suivant.

(Citation nécessaire: J'adorerais obtenir la documentation appropriée, peut-être une page de manuel ou une spécification POSIX?)

En ce moment, j'ai des trucs comme ça dans mon ~/.bashrc et ~/.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 sans -f ne fonctionnera pas avec les programmes qui s'attendent à agir sur vos modifications. Cela inclut certainement sudoeditor (Sudo -e).

Cela peut se casser si vous avez des espaces dans le chemin vers vim. Si c'est un problème, installez-le correctement ou envisagez des liens symboliques comme /usr/local/bin/gvim

3
Adam Katz

Certains outils n'acceptent que EDITOR, par exemple le shell intégré fc:

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

Puisqu'il ne semble pas y avoir d'environnements où vi ou similaire échouerait, j'ai pris la définition de VISUAL sur quelque chose qui a besoin d'un X DISPLAY, et EDITOR sur ex.

Généralement, cela semble me poser des problèmes lorsqu'un programme n'utilise pas VISUAL.

0
Mike William Meyer