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

27

Não entendo como permitir o destaque de sintaxe nos arquivos que estou editando via vi ao usar o sudo. Quando sudo vi <filename>o terminal está apenas em preto e branco nas configurações do meu terminal. No vi, se eu entrar, :syntax onnada muda.

Quando vi <filename>toda a sintaxe é adequadamente colorida. Usando 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
Scott Lundgren
fonte
3
vinão suporta cores, portanto, qualquer coisa que mostre cores está em execução vimou semelhante.
Chris S

Respostas:

26

Cotovia resposta é provavelmente o mais provável. Você pode não desejar alterar permanentemente suas contas raiz vi para vim, como se seus recursos estivessem baixos vi é quase garantido que funcione sempre, não tenho tanta certeza sobre o vim.

Você provavelmente está usando (cor)

/usr/bin/vim 

sob seu usuário normal e

/bin/vi

sob sudo ou root. Você pode verificar usando:

which vi

uma vez sob o usuário normal e a outra via sudo

sudo which vi

Faça um

man which 

se você precisar de mais detalhes

user63673
fonte
Eu não mudei a conta root para usar o vim, mas apenas sabendo o que mostrava que o vi era alias ao vim, pois meu usuário me diz para usar o sudo vim <file> em vez do sudo vi <file>
Scott Lundgren
17

Em um sistema RHEL, /bin/vinormalmente é uma versão mínima do vim, sem nenhuma sintaxe destacando o suporte. /usr/bin/vimé o editor completo. É muito provável que, no seu ambiente de usuário, viseja um alias para vim. Tente o seguinte:

sudo vim /some/file

Você tem destaque de sintaxe agora?

larsks
fonte
Sim! e parece que a resposta do sinping foi a que eu precisava para obter o comportamento que eu queria #
Scott Lundgren
11

O seu vié provavelmente /bin/via partir de pacote vim-minimalque não suporta destaque de sintaxe. sudo vilança /bin/vipara você.

O Bash apenas expande o alias na primeira palavra em sua linha de comando, portanto em:

sudo vi

vinão é substituído, vimmesmo se você tiver esse alias definido.

A solução é definir outro alias (para a chamada do usuário sudo):

alias sudo = 'sudo'

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

Usando isso sudo, o bash fará a expansão de alias para viin sudo vi. Na aliasseção do documento do Bash, ele diz:

Se o último caractere do valor do alias estiver em branco, a próxima palavra de comando após o alias também será verificada quanto à expansão do alias.

Depois de inserir o seu comando, você pode pressionar Ctrl+ Alt+ Eem bashver o resultado de expansão.

Créditos:

https://bbs.archlinux.org/viewtopic.php?id=36796

http://www.shellperson.net/using-sudo-with-an-alias


Simplesmente aliasing viem /root/.bashrcnão vai funcionar.

Também é possível notar que vinão há alias para root em algumas distros no /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

Alterar isso também não resolverá o problema.

Fish Monitor
fonte
Truque impressionante para ter pseudônimos com o sudo!
Corey Henderson
Amo isso - simples e elegante !!! Essa é a resposta correta.
FilmJ
3

Por padrão no 5.4, o vi é o padrão. Eu esqueço qual versão foi iniciada. Isso adicionará o alias necessário para você:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF
sinping
fonte
2

Eu descobri que na minha versão do vim (instale sudo apt-get install vimno debian 7) o syntax oncomando é definido por usuário em ~/.vimrc. no entanto, por padrão, a instalação não criou um /root/.vimrcarquivo para sudo vicarregar. então eu apenas copiei ~/.vimrcno /root/diretório e isso fez o truque:sudo cp ~/.vimrc /root/

Mulllhausen
fonte
1

Isso ocorre porque o usuário root não possui o arquivo de configuração do vim. basta copiar o arquivo de configuração padrão do usuário vim para o diretório raiz.

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

Nota: verifique se o arquivo não corresponde ao ~/vi*que não é para o vim.

Léo Derbois
fonte
0

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

2) Verifique se o seu /etc/vim/vimrctem a linhasyntax on

3) Nem todos os tipos de arquivos têm informações de destaque de sintaxe disponíveis por padrão ....

tsg
fonte
Não havia / etc / vim / vimrc, mas / etc / vimrc tinha destaque de sintaxe por padrão: se & t_Co> 2 || tem sintaxe ("gui_running") no conjunto hlsearch endif #
Scott Lundgren
-1

Para aqueles que ainda procuram ajuda, tente estes comandos.

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

De outra forma...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (link simbólico)
Keenan Thompson
fonte