Por que o vi e o sudo vi me oferecem uma versão diferente do vim?

2

A versão padrão do vi que vem com o Ubuntu Hardy é o 7.1 ou 7.2. Então eu instalei o vim 7.3 das fontes.

Então, para facilitar, adicionei isso ao meu .bashrc

alias vi='vim'

Para permitir que o 7.3 vim sobrescreva o vi que é a versão antiga. Isso funciona bem para mim, mas quando eu adiciono o sudo antes disso, algo como

sudo vi /usr/local/nginx/conf/nginx.conf

Isso me dá a versão antiga

Alguém me dá uma pista, porque é isso?

    
por mko 17.12.2011 / 09:58

3 respostas

3

vi 7.2 e 7.3 não existem . Existe apenas vi 050325 e vim 7.2 , dois programas totalmente separados com recursos semelhantes. Se você quiser vim , digite vim .

O motivo pelo qual o alias não funciona é porque os aliases são expandidos pelo seu shell, e o shell não sabe o que cada programa fará - ele vê " sudo " como o comando e " vi myfile " como argumentos e apenas tenta expandir a primeira palavra, " sudo ", sem ousar tocar nos argumentos.

Você pode dizer bash para expandir aliases seguindo certos comandos, adicionando um alias como: (note que o espaço entre aspas é obrigatório)

alias sudo="sudo "

O espaço informará que a primeira palavra após " sudo " é um comando que deve ser expandido - por exemplo, "sudo vi ..." para " sudo vim ... " funcionará agora.

As respostas informando sobre /root/.bashrc estão incorretas por vários motivos. Primeiro, sudo executa o comando dado sem executar um shell. (Isso pode ser alterado usando sudo -s cmd ou sudo -i cmd , mas se nenhuma opção for dada, o comportamento padrão é executar o comando diretamente, sem um shell.)

Segundo, o bash expandirá apenas os aliases quando executado no modo interativo , não quando executado como bash -c cmd , que é o que o sudo usaria. (Novamente, isso pode ser alterado, mas a configuração padrão é apenas expandir aliases interativamente).

    
por 17.12.2011 / 11:17
3

Os aliases são por usuário. Seu primeiro comando atribuiu o alias apenas ao seu usuário não privilegiado e, quando você usa o sudo, ele é executado como root. Você deve criar o alias para o usuário root também.

    
por 17.12.2011 / 10:05
0

Quando executar sudo vi ,

  1. sudo carrega o arquivo /root/.bashrc . E decide se é um alias ou original (que é vim ).
  2. A parte vi , em seguida, analisa /root/.vimrc , se existir. Caso contrário /etc/vim/vimrc
por 17.12.2011 / 10:49

Tags