it-swarm.it

VISUAL vs. EDITOR: qual è la differenza?

In genere imposto entrambe le variabili di ambiente VISUAL e EDITOR sulla stessa cosa, ma qual è la differenza? Perché dovrei impostarli diversamente? Quando si sviluppano app, perché dovrei scegliere di guardare VISUAL prima di EDITOR o viceversa?

196
xenoterracide

L'editor EDITOR dovrebbe essere in grado di funzionare senza l'uso della funzionalità terminale "avanzata" (come la vecchia modalità ed o ex di vi). Era usato sui terminali del teletipo.

Un editor VISUAL potrebbe essere un editor a schermo intero come vi o emacs.

Per esempio. se invochi un editor tramite bash (usando C-x C-e), bash proverà prima VISUAL editor e poi, se VISUAL fallisce (perché il terminale non supporta un editor a schermo intero), prova EDITOR.

Al giorno d'oggi, puoi lasciare EDITOR non impostato o impostarlo su vi -e.

157
andcoz

La risposta accettata è probabilmente un buon trattamento breve, ma questo sarà un tentativo di approfondire quando la distinzione tra VISUAL ed EDITOR potrebbe ancora avere importanza (basandosi su risposta di Adam Katz ).

Le specifiche POSIX distinguono ancora tra editor di modalità visiva ed editor di linee. Ciò era molto importante ai tempi in cui il posizionamento del cursore sulle connessioni seriali era difficile (soprattutto a causa della velocità della connessione seriale). Il articolo di Wikipedia per vi fornisce alcune informazioni utili sulla distinzione tra vi (un editor di modalità visiva) ed ex (un editor di linee). Se scavi abbastanza in profondità nella ricerca, troverai la sezione "RATIONALE" della specifica "ex" , che fornisce un motivo per cui la distinzione è ancora nella specifica:

È noto che porzioni di vi sarebbero difficili, se non impossibili, da implementare in modo soddisfacente su un terminale in modalità blocco o su un terminale senza alcuna forma di indirizzamento del cursore, quindi non è un requisito obbligatorio che tali funzioni dovrebbero funzionare su tutti i terminali . È intenzione, tuttavia, che un'implementazione vi dovrebbe fornire l'insieme completo di funzionalità su tutti i terminali in grado di supportarli.

Non ne ho più bisogno da quando ho rinunciato al mio modem da 300 baud, ma posso immaginare che le persone che usano linee seriali lente per connettersi a sistemi embedded (e/o tramite connessioni davvero rischiose) potrebbero apprezzo ancora la possibilità di avere un editor di modalità di linea preferito distinto da un editor "visivo" come vi. Codici terminali in stile VT100 su una connessione con perdita, rallentamento, stretta potrebbero essere "gonfiati" in applicazioni limitate.

Per il resto di noi, sembra che la risposta "corretta" sembra essere "impostali entrambi come editor preferito". Potrebbe essere giusto cooptare questa distinzione per l'editor locale/grafico (ad esempio Sublime o gvim) rispetto a un editor di finestre terminali (ad esempio vi o emacs), ma è probabile che ci sia una montagna di motivi legacy per cui probabilmente non funzionerà come sperato .

37
robla

Ho concluso che $VISUAL è grafico e $EDITOR è la riga di comando. Se non definito, tutto ciò che cerca $VISUAL dovrebbe quindi provare $EDITOR Il prossimo.

(citazione necessaria: Mi piacerebbe avere la documentazione corretta, forse una pagina man o specifiche POSIX?)

Al momento, ho cose del genere nel mio ~/.bashrc e ~/.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 senza -f non funzionerà con i programmi che prevedono di agire sulle tue modifiche. Questo include sicuramente sudoeditor (Sudo -e).

Questo potrebbe interrompersi se hai spazi vuoti nel percorso di VIM. Se questo è un problema, installalo correttamente oppure considera i symlink come /usr/local/bin/gvim

3
Adam Katz

Alcuni strumenti accettano solo EDITOR, ad esempio Shell incorporato fc:

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

Dato che non sembrano esserci ambienti in cui vi o simili fallirebbero, ho deciso di impostare VISUAL su qualcosa che necessita di un DISPLAY X e EDITOR su ex.

Per lo più, questo sembra causarmi problemi quando alcuni programmi non usano VISUAL.

0