Às vezes, começo a editar arquivos de configuração /etc
usando o Vim, mas esqueço de usá-lo sudo
para iniciar o Vim. O resultado inevitável é que, depois de terminar minhas edições, encontro o temido aviso de que não tenho permissão para salvar o arquivo.
Principalmente as edições são pequenas o suficiente para eu sair do Vim e fazer a coisa toda novamente como root. É claro que eu poderia salvar em um local para escrever e copiar como root, mas isso também é um pouco chato.
Mas tenho certeza de que existe uma maneira mais fácil de se tornar root ou usar sudo
de dentro do Vim, sem precisar descartar as alterações. Se o método não depender de sudo
ser configurado para o usuário, isso seria ainda melhor.
sudoedit
vez devim
para todas as edições de administração. É uma maneira de nunca mais encontrar esse problema :). +1 para a resposta de Gilles .Respostas:
O sudo não pode alterar o usuário efetivo de um processo existente, ele sempre cria um novo processo que possui privilégios elevados e o shell original não é afetado. Isso é fundamental no design do UNIX. Na maioria das vezes, salvei o arquivo em / tmp como uma solução alternativa. Se você realmente deseja salvá-lo diretamente, tente usar um recurso do Vim onde ele pode canalizar um arquivo para outro processo. Tente salvar com este comando:
Testado e funciona. O Vim solicitará que você recarregue o arquivo, mas é desnecessário: basta pressionar opara evitar recarregar e perder o histórico de desfazer. Você pode até salvar isso em um comando / função do Vim ou até vinculá-lo a uma chave para facilitar o acesso, mas deixarei isso como um exercício para o leitor.
fonte
%
, que no vim será o caminho do arquivo que você está editando no momento.%
aspas entre, caso o nome do arquivo contenha um espaço.'modified'
configuração; você pode fazer isso manualmente comset nomodified
.exec 'w !sudo dd of=' . shellescape(expand('%'))
no caso do nome do arquivo contém aspas, barras invertidas, dólar-sinais, etc.Salvando o arquivo como root:
fonte
Ligue
sudoedit
para editar arquivos como raiz.Pense no inconveniente ao ligar
vim
diretamente como um aviso de que você está sendo muito casual ao fazer algo potencialmente perigoso.fonte
Você pode colocar isso no seu
.vimrc
Você o aciona fazendo
:w!!
isso - ele envia o arquivosudo tee
para o nome do arquivo atual (%
).Em https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks
fonte
!sudo sponge %
.Isso também funciona bem:
Isso é inspirado no comentário de @Nathan Long nesta resposta .
AVISO :
"
deve ser usado em vez de'
porque queremos%
ser expandidos antes de passar para o shell.fonte