Por que não tenho destaque de sintaxe quando sudo vi filename?

25

Eu não entendo como permitir o realce de sintaxe em arquivos que estou editando via vi ao usar o sudo. Quando eu sudo vi <filename> o terminal é apenas preto & branco das configurações do meu terminal. No vi, se eu inserir :syntax on , nada muda.

Quando eu vi <filename> , toda a sintaxe está corretamente colorida. Usando o RHEL 5.4, env relevante:

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;
33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;
32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;
32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;
31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;
31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;
35:*.png=01;35:*.tif=01;35:
SHELL=/bin/bash
TERM=xterm-color
    
por Scott Lundgren 19.11.2010 / 17:43

8 respostas

24

A resposta de Larks é provavelmente a mais provável. Você pode não querer mudar suas contas raiz vi para vim permanentemente como se seus recursos são baixos vi é quase garantido que sempre funcione, eu não tenho certeza sobre vim.

Você provavelmente está usando (cor)

/usr/bin/vim 

sob seu usuário normal e

/bin/vi

sob sudo ou raiz. Você pode verificar usando:

which vi

uma vez sob seu usuário normal e o outro via sudo

sudo which vi

Faça um

man which 

se precisar de mais detalhes

    
por 15.12.2010 / 05:43
16

Em um sistema RHEL, /bin/vi normalmente é uma versão mínima de vim , sem nenhum suporte de realce de sintaxe. /usr/bin/vim é o editor completo. É muito provável que, em seu ambiente de usuário, vi seja um alias para vim . Tente isto:

sudo vim /some/file

Você recebe destaque de sintaxe agora?

    
por 19.11.2010 / 17:46
11

Seu vi é provavelmente /bin/vi do pacote vim-minimal , que não suporta realce de sintaxe. sudo vi lança /bin/vi para você.

Bash só faz expansão de alias na primeira palavra na sua linha de comando, portanto em:

sudo vi

vi não é substituído a vim mesmo se você tiver esse alias definido.

A solução define outro alias (para o usuário invocando sudo ):

alias sudo='sudo '

Observe o espaço após o segundo sudo .

Usando esse sudo , o bash fará a expansão do alias para vi em sudo vi . Na seção alias do Bash doc, diz:

If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.

Depois de inserir seu comando, você pode pressionar Ctrl + Alt + E em bash para ver o resultado da expansão.

Créditos:

link

link

O aliasing vi in /root/.bashrc não funciona.

Pode-se notar também que vi não é aliado para root em algumas distros em /etc/profile.d/vim.sh:

if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID='/usr/bin/id -u'
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

A alteração também não resolve o problema.

    
por 17.01.2012 / 08:49
3

Por padrão, em 5.4, o vi é o padrão. Eu esqueço a versão que começou. Isso adicionará o alias necessário para você:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
    
por 19.11.2010 / 19:03
2

eu descobri que na minha versão do vim (instalar com sudo apt-get install vim no debian 7) o comando syntax on é definido por usuário em ~/.vimrc . no entanto, por padrão, a instalação não criou um arquivo /root/.vimrc para sudo vi carregar. então eu copiei ~/.vimrc para o /root/ dir e isso foi o truque: sudo cp ~/.vimrc /root/

    
por 08.10.2013 / 15:13
1

Isso ocorre porque seu usuário root não possui o arquivo de configuração do vim. então apenas copie o arquivo de configuração padrão do usuário vim para o diretório raiz.

sudo cp -r ~/.vi* /root/ algo assim.

nb: verifique se você não tem arquivo corresponde a ~/vi* , o que não é para o vim.

    
por 05.05.2015 / 19:26
0

1) Verifique se você está realmente usando o vim e não o vi (que infelizmente é o padrão frequentemente em sistemas instalados novos)

2) Verifique se o seu /etc/vim/vimrc tem a linha syntax on

3) Nem todos os tipos de arquivos possuem informações de realce de sintaxe disponíveis por padrão ...

    
por 19.11.2010 / 18:04
-1

Para aqueles que ainda procuram ajuda, experimente estes comandos.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Se esses dois locais forem os mesmos, não continue.

Caso contrário ...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (link simbólico)
por 22.01.2016 / 17:13