Você definiu, mas não o exportou. Mude a linha para isso:
export EDITOR=vim
Acho o seguinte comportamento um pouco confuso, alguém pode explicar por que isso acontece?
Em /etc/bash.bashrc
tenho:
EDITOR=vim
E é realmente definido:
lev@home ~ $ echo $EDITOR
vim
Gostaria que visudo
respeitasse isso. Agora, eu li em man visudo
que nem sempre respeita essa variável, mas eu não entendo porque o seguinte dá resultados diferentes:
$ sudo visudo # opens vi
$ sudo EDITOR=vim visudo # opens vim
Observe que a variável EDITOR
também deve ser definida para raiz (AFAIU):
$ sudo echo $EDITOR
vim
Além disso, quando eu instalo pacotes do AUR
usando yaourt
(estou no Arch Linux) e opto por editar o arquivo PKGBUILD, vejo:
Please add $EDITOR to your environment variables
for example:
export EDITOR="vim" (in ~/.bashrc)
(replace vim with your favorite editor)
==> Edit PKGBUILD with:
Portanto, o problema não está limitado a visudo
. Por que posso ver o conjunto de variáveis, mas os programas não podem (a menos que eu o especifique novamente no comando)?
Informação técnica:
lev@home ~ $ uname -a
Linux home 3.6.9-1-ARCH #1 SMP PREEMPT Tue Dec 4 08:04:10 CET 2012 x86_64 GNU/Linux
lev@home ~ $ bash --version | head -1
GNU bash, version 4.2.39(2)-release (x86_64-unknown-linux-gnu)
Depois de seguir a resposta de Chris para exportar a variável para o ambiente de processos filhos para inerentes, você precisa dizer ao sudo para preservar seu ambiente atual. Isso pode ser feito com a opção -E
do sudo, que preservará todo o ambiente; ou, neste caso específico, adicione EDITOR
à variável env_keep
em seu arquivo sudoers para preservar apenas essa variável.