it-swarm-es.com

VISUAL vs. EDITOR: ¿cuál es la diferencia?

Generalmente configuro las variables de entorno VISUAL y EDITOR para la misma cosa, pero ¿cuál es la diferencia? ¿Por qué los pondría de manera diferente? Al desarrollar aplicaciones, ¿por qué debería elegir mirar VISUAL antes de EDITOR o viceversa?

196
xenoterracide

El editor EDITOR debería poder funcionar sin el uso de la funcionalidad de terminal "avanzada" (como el modo antiguo ed o ex de vi). Fue utilizado en terminales de teletipo.

Un editor VISUAL podría ser un editor de pantalla completa como vi o emacs.

P.ej. si invoca un editor a través de bash (usando C-x C-e), bash intentará primero VISUAL editor y luego, si VISUAL falla (porque el terminal no admite un editor de pantalla completa), intenta EDITOR.

Hoy en día, puede dejar EDITOR sin configurar o establecerlo en vi -e.

157
andcoz

La respuesta aceptada es probablemente un buen y breve tratamiento, pero este será un intento de profundizar cuando la distinción entre VISUAL y EDITOR aún podría ser importante (basándose en la respuesta de Adam Katz ).

La especificación POSIX todavía distingue entre editores de modo visual y editores de línea. Esto realmente importaba en los días en que el posicionamiento del cursor sobre las conexiones en serie era difícil (especialmente debido a la velocidad de la conexión en serie). El artículo de Wikipedia para vi proporciona algunos antecedentes útiles sobre la distinción entre vi (un editor de modo visual) y ex (un editor de línea). Si profundiza lo suficiente en la investigación, encontrará la sección "JUSTIFICACIÓN" de la especificación "ex" , lo que da una razón para que la distinción aún esté en la especificación:

Se reconoce que partes de vi serían difíciles, si no imposibles, de implementar satisfactoriamente en un terminal en modo de bloque, o un terminal sin ninguna forma de direccionamiento del cursor, por lo tanto, no es un requisito obligatorio que tales características funcionen en todos los terminales . Sin embargo, la intención es que una implementación de vi proporcione el conjunto completo de capacidades en todos los terminales capaces de soportarlos.

No he necesitado esto desde que renuncié a mi módem de 300 baudios, pero puedo imaginar que las personas que usan líneas seriales lentas para conectarse a sistemas embebidos (y/o sobre conexiones realmente inciertas) podrían todavía aprecio poder tener un editor de modo de línea preferido distinto de un editor "visual" como vi. Los códigos de terminal de estilo VT100 a través de una conexión estrecha, lenta y con pérdida pueden estar "abarrotados" en aplicaciones limitadas.

Para el resto de nosotros, parece que la respuesta "correcta" parece ser "configurar a ambos como su editor preferido". Podría estar bien cooptar esta distinción para el editor local/gráfico (por ejemplo, Sublime o gvim) frente a un editor de ventana de terminal (por ejemplo, vi o emacs), pero es probable que haya una gran cantidad de razones heredadas por las que eso probablemente no funcionará como se esperaba .

37
robla

He concluido que $VISUAL es gráfico y $EDITOR es la línea de comando. Si no está definido, cualquier cosa que busque $VISUAL debería luego intentar $EDITOR próximo.

(Cita requerida: Me encantaría obtener la documentación adecuada, ¿tal vez una página de manual o una especificación POSIX?)

Por el momento, tengo cosas como esta en mi ~/.bashrc y ~/.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 sin -f no funcionará con programas que esperan actuar en tus ediciones. Esto definitivamente incluye sudoeditor (Sudo -e).

Esto puede romperse si tiene espacios en blanco en el camino a vim. Si eso es un problema, instálelo correctamente o considere enlaces simbólicos como /usr/local/bin/gvim

3
Adam Katz

Algunas herramientas solo aceptan EDITOR, por ejemplo, Shell incorporado fc:

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

Como no parece haber ningún entorno en el que vi o similar falle, he decidido configurar VISUAL en algo que necesita una PANTALLA X, y EDITOR en ex.

Principalmente, eso parece causarme problemas cuando algún programa no usa VISUAL.

0