it-swarm-pt.com

VISUAL vs. EDITOR - qual a diferença?

Geralmente, defino as variáveis ​​de ambiente VISUAL e EDITOR para a mesma coisa, mas qual é a diferença? Por que eu os definiria de maneira diferente? Ao desenvolver aplicativos, por que devo optar por examinar VISUAL antes de EDITOR ou vice-versa?

196
xenoterracide

O editor EDITOR deve poder funcionar sem o uso da funcionalidade "avançada" do terminal (como o modo antigo ed ou ex de vi). Foi utilizado em terminais de teletipo.

Um editor de VISUAL pode ser um editor de tela cheia como vi ou emacs.

Por exemplo. se você chamar um editor através do bash (usando C-x C-e), o bash tentará primeiro o editor VISUAL e, em seguida, se VISUAL falhar (porque o terminal não suporta um editor em tela cheia), ele tenta EDITOR.

Atualmente, você pode deixar EDITOR desativado ou configurá-lo para vi -e.

157
andcoz

A resposta aceita é provavelmente um tratamento curto e bom, mas será uma tentativa de aprofundar quando a distinção entre VISUAL e EDITOR ainda for importante (com base em resposta de Adam Katz ).

A especificação POSIX ainda distingue entre editores do modo visual e editores de linha. Isso realmente importava nos dias em que o posicionamento do cursor sobre as conexões seriais era difícil (especialmente devido à velocidade da conexão serial). O artigo da Wikipedia para vi fornece algumas informações úteis sobre a distinção entre vi (um editor de modo visual) e ex (um editor de linha). Se você se aprofundar o suficiente na pesquisa, encontrará a seção "RATIONALE" da especificação "ex" , que fornece um motivo para a distinção ainda estar na especificação:

Reconhece-se que partes do vi seriam difíceis, se não impossíveis, de serem implementadas satisfatoriamente em um terminal em modo de bloco ou em um terminal sem nenhuma forma de endereçamento do cursor, portanto, não é um requisito obrigatório que esses recursos funcionem em todos os terminais . A intenção, no entanto, é que uma implementação vi forneça o conjunto completo de recursos em todos os terminais capazes de suportá-los.

Eu não precisava disso desde que desisti do modem de 300 bauds, mas posso imaginar que pessoas que usam linhas seriais lentas para se conectar a sistemas embarcados (e/ou através de conexões realmente arriscadas) podem ainda apreciam poder ter um editor de modo de linha preferido distinto de um editor "visual" como o vi. Os códigos de terminal no estilo VT100 em uma conexão estreita, com perdas e com atraso podem estar "inchados" em aplicativos limitados.

Para o resto de nós, parece que a resposta "correta" parece "definir os dois como seu editor preferido". Pode ser correto cooptar essa distinção entre o editor local/gráfico (por exemplo, Sublime ou gvim) e um editor de janela de terminal (por exemplo, vi ou emacs), mas provavelmente há uma série de razões herdadas pelas quais isso provavelmente não funcionará como esperado .

37
robla

Eu concluí que $VISUAL é gráfico e $EDITOR é a linha de comando. Se indefinido, qualquer coisa que procure $VISUAL deve tentar $EDITOR Próximo.

(Citação necessária: Adoraria obter a documentação adequada, talvez uma página de manual ou uma especificação POSIX?)

No momento, eu tenho coisas assim na minha ~/.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 sem -f não funcionará com programas que esperam atuar em suas edições. Isso definitivamente inclui sudoeditor (Sudo -e).

Isso pode ser interrompido se você tiver um espaço em branco no caminho para o vim. Se isso for um problema, instale-o corretamente ou considere links simbólicos como /usr/local/bin/gvim

3
Adam Katz

Algumas ferramentas aceitam apenas EDITOR, por exemplo, o shell interno fc:

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

Como não parece haver nenhum ambiente em que vi ou similar falhe, decidi definir VISUAL para algo que precisa de um X DISPLAY e EDITOR para ex.

Principalmente, isso parece me causar problemas quando algum programa não usa o VISUAL.

0
Mike William Meyer