VISUAL vs. EDITOR: qual è la differenza?


182

Io generalmente impostare sia VISUALe EDITORvariabili di ambiente per la stessa cosa, ma qual è la differenza? Perché dovrei impostarli diversamente? Quando si sviluppano app, perché dovrei scegliere di guardare VISUALprima EDITORo viceversa?

Risposte:


145

L' EDITOReditor dovrebbe essere in grado di funzionare senza l'uso della funzionalità terminale "avanzata" (come vecchia edo exmodalità di vi). È stato usato su terminali di teletipo.

Un VISUALeditor può essere un editor a schermo intero come vio emacs.

Ad esempio, se invochi un editor tramite bash (usando C-x C-e), bash proverà il primo VISUALeditor e poi, se VISUALfallisce (perché il terminale non supporta un editor a schermo intero), ci prova EDITOR.

Al giorno d'oggi, puoi lasciarlo EDITORnon impostato o impostarlo su vi -e.


9
La maggior parte delle applicazioni considera $VISUALuno snippet di shell a cui aggiunge il nome del file (quotato alla shell), ma alcuni lo trattano come il nome di un eseguibile in cui possono o meno cercare $PATH. Quindi è meglio impostare VISUAL(e EDITOR) il percorso completo di un eseguibile (che potrebbe essere uno script wrapper se si desidera, ad esempio, opzioni).
Gilles,

4
Nei tempi moderni, ede simili non sono molto popolari, quindi credo sia giusto ignorare VISUALe usare EDITOR.
Pavel Šimerda,

13
Grazie per il suggerimento su C-x C-ein bash. Molto maneggevole.
mndrix,

5
@ PavelŠimerda, solo l'impostazione EDITORnon è sufficiente, ad esempio gitsu Ubuntu 12.04. Senza VISUALessere impostato gitignora EDITORe usa solo nano(il compilato di default, immagino).
maxschlepzig,

5
@ PavelŠimerda Non ha senso, ma è la convenzione. EDITOR era per editor basati su istruzioni come ed. Quando sono arrivati ​​gli editor con GUI - e per GUI, intendo la GUI della CLI (vim, emacs, ecc. - think ncurses), non la GUI dell'ambiente desktop - il processo di modifica è cambiato radicalmente, quindi è nata la necessità di un'altra variabile. In questo contesto, la GUI della CLI e gli editor della GUI dell'ambiente desktop sono più o meno gli stessi, quindi è possibile impostare VISUAL su entrambi; tuttavia, EDITOR è pensato per un flusso di lavoro sostanzialmente diverso. Certo, questo è tutto storico. Al giorno d'oggi nessuno lo usa.
Zenexer,

32

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 sulla 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). L' 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 una ragione per la distinzione ancora presente nelle specifiche:

È noto che porzioni di vi sarebbero difficili, se non impossibili, da implementare in modo soddisfacente su un terminale in modalità blocco, o 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 la serie completa 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) possano ancora apprezzare di poter avere una modalità di linea preferita editor 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 .


2

Alcuni strumenti accettano solo EDITOR, ad esempio shell builtin fc :

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

1

Ho concluso che $VISUALè grafico ed $EDITORè a riga di comando. Se non definito, tutto ciò che cerca $VISUAL dovrebbe quindi provare $EDITORdopo.

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

Al momento, ho cose del genere nel mio ~/.bashrce ~/.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

gvimsenza -fnon funzionerà con i programmi che prevedono di agire sulle tue modifiche. Questo include sicuramente sudoeditor( sudo -e).

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


L'utilizzo $VISUALdipende dal fatto che si disponga di un terminale in grado di posizionare il cursore, non se si dispone di un sistema a finestre.
Radon Rosborough,

Ah, fantastico! Potete fornire un link di riferimento definitivo per questo? Penso che il mio codice sia ancora sicuro dato che sto anche controllando $DISPLAY, ma è buono a sapersi.
Adam Katz,

Non importa, sembra che un tale riferimento esista nella risposta di robla , che menziona persino la mia risposta.
Adam Katz,

0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.