Como posso excluir do disco o arquivo aberto no vim? Seria bom também fechar o buffer.
Vejo que você pode usar o NERDTree para isso , mas não uso esse plugin.
Como posso excluir do disco o arquivo aberto no vim? Seria bom também fechar o buffer.
Vejo que você pode usar o NERDTree para isso , mas não uso esse plugin.
Usar uma ferramenta externa como rm (1) é bom, mas o Vim também tem sua própria delete()
função para excluir arquivos. Tem a vantagem de ser portátil.
:call delete(expand('%'))
Uma forma alternativa de expressar isso é :call delete(@%)
, usando o %
registrador (arquivo atual) (dica de @accolade).
Para limpar completamente o buffer atual, a representação do arquivo no disco e o buffer do Vim, anexe :bdelete
:
:call delete(expand('%')) | bdelete!
Você provavelmente vai querer mapear isso de acordo com suas preferências.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>
. Você pode querer adicionar em sua resposta.r
comando! Melhor prefixar seu mapeamento com<Leader>...
.nnoremap <C-Del> :call delete(expand('%'))<CR>
mas não fecho o buffer para o caso de acontecer por acidente; então você ainda tem a chance de salvá-lo.:call delete(@%)|q!
← Variante curta (se você não quiser mapeá-la). (O buffer permanece:ls
e pode ser revivido:b
desta forma; ele retém o nome do arquivo e as opções do buffer, mas não o conteúdo do arquivo.):call delete(@%)|bd!
e uso:ls!
com:b
a reviver.Dê uma olhada em Excluir arquivos com um comando do Vim . A seção de comentários deve ter o que você está procurando:
Como alternativa, você pode apenas emitir um comando shell para remover o arquivo atual:
fonte
!rm %
, há uma maneira de evitar o aviso quando o vim voltar ao buffer?%
) com citações:!rm "%"
.%
(caminho do arquivo (" nome do arquivo " na terminologia do vim) como originalmente invocado, potencialmente relativo, por exemplo, apenas o nome do arquivo) em vez de%:p
(caminho do arquivo absoluto), você corre um pequeno risco de excluir um arquivo com o mesmo nome em outro diretório, se você esqueceu que você:cd
ed lá. Portanto, eu recomendo fortemente usar em%:p
vez de%
se você mapear de qualquer maneira.Às vezes, um plug-in pode ser uma solução atraente, mesmo para um problema simples. Neste caso, temos sorte, pois há eunuch.vim do todo-poderoso Tim Pope.
Em suas próprias palavras, o eunuch.vim fornece
Perfeito. Ele tem o que precisamos, além de algumas ferramentas adicionais se estivermos em um sistema UNIX.
O comando que você está procurando é
Novamente, remapeie-o se precisar muito dele, por exemplo
:nnoremap <Leader>rm :Remove!<CR>
.fonte
mv
,mkdir
,find
, etc. recomendo.Gosto de poder deletar arquivos de dentro do vim, mas também sou paranóico sobre deletar acidentalmente um trabalho importante que, por uma razão ou outra, ainda não está sob controle de versão. Acho útil combinar as informações anteriores de @glts e @accolade com esta resposta sobre como usar o
confirm
comando para solicitar antes de sair do vim.Juntando tudo isso, adicionei uma função ao meu
~/.vimrc
, que avisa antes de excluir o arquivo e fechar o buffer, e mapeei-o para uma combinação de teclas:Se você for um toque de tecla menos paranóico do que eu, poderá acrescentar
<CR>
à primeira linhae só precisa pressionar Enter uma vez.
fonte
expand('%:p')
vez de@%
quando você fizer o script de qualquer maneira. (Embora eu esteja lisonjeado por você ter incorporado minha dica :) o benefício da brevidade é marginal em um script. Mais importante ainda%:p
:) irá expandir o nome do arquivo para um caminho absoluto completo (que pode ou não ser). Com apenas%
você corre o risco de deletar um arquivo com o mesmo nome em outro diretório, caso tenha esquecido que foi:cd
ed lá.Você pode fazer isso em duas etapas:
salvar como um novo arquivo
: w newfilename
apague o arquivo antigo
! rm nome do arquivo antigo
fonte
Esta pode ser uma opinião impopular, mas o seu explorador de árvore de arquivos (Netrw / NerdTree) será a maneira mais simples e segura de excluir um arquivo. Mesmo se o OP não estiver usando o NerdTree, o plugin embutido Netrw funcionará tão bem.
fonte