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?
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
.
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é .
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
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
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.