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