Come posso eliminare dal disco il file attualmente aperto da vim? Sarebbe bello chiudere anche il buffer.
Vedo che puoi usare NERDTree per questo , ma non uso questo plugin.
Come posso eliminare dal disco il file attualmente aperto da vim? Sarebbe bello chiudere anche il buffer.
Vedo che puoi usare NERDTree per questo , ma non uso questo plugin.
Risposte:
Usare uno strumento esterno come rm (1) va bene, ma Vim ha anche la sua delete()funzione per eliminare i file. Questo ha il vantaggio di essere portatile.
:call delete(expand('%'))
Un modo alternativo per esprimerlo è :call delete(@%), che utilizza il %registro (file corrente) (suggerimento di @accolade).
Per eliminare completamente il buffer corrente, sia la rappresentazione del file su disco che il buffer Vim, aggiungere :bdelete:
:call delete(expand('%')) | bdelete!
Probabilmente vorrai mapparlo in base alle tue preferenze.
rcomando! Meglio aggiungere il prefisso alla mappatura <Leader>....
nnoremap <C-Del> :call delete(expand('%'))<CR>ma non chiudo il buffer nel caso in cui accadesse per sbaglio; allora hai ancora la possibilità di salvarlo.
:call delete(@%)|q!← Variante breve (se non vuoi mapparla). (Il buffer rimane :lse può essere ripristinato in :bquesto modo; mantiene il nome del file e le opzioni del buffer, ma non il contenuto del file.)
:call delete(@%)|bd!e usarlo :ls!con :bper far rivivere.
Dai un'occhiata a Elimina file con un comando Vim . La sezione Commenti dovrebbe avere quello che stai cercando:
Fondamentalmente, Rm cancellerà il file corrente; RM cancellerà il file corrente e chiuderà il buffer (senza salvare) in una volta sola.
In alternativa, puoi semplicemente emettere un comando di shell per rimuovere il file corrente:
:!rm %
!rm %, c'è un modo per evitare l'avviso quando vim torna nel buffer?
%) con le citazioni: !rm "%".
%(percorso file (" nome file " nella terminologia vim) come originariamente invocato, potenzialmente relativo, ad esempio solo il nome del file) invece di %:p(percorso file assoluto) corri un piccolo rischio di eliminare invece un file con lo stesso nome in un'altra directory, se ti sei dimenticato di :cdesserci. Pertanto consiglio vivamente di utilizzarlo al %:pposto di %se lo mappi comunque.
A volte un plugin può essere una soluzione interessante anche per un semplice problema. In questo caso siamo fortunati perché c'è eunuch.vim dell'onnipotente Tim Pope.
Nelle sue stesse parole fornisce eunuch.vim
Vim sugar per i comandi della shell UNIX che ne hanno più bisogno. Elimina o rinomina un buffer e il file sottostante allo stesso tempo. Carica un
findo unlocatenell'elenco di correzione rapida. E così via.
Perfetto. Ha ciò di cui abbiamo bisogno, oltre ad alcuni strumenti aggiuntivi se siamo su un sistema UNIX.
Il comando che stai cercando è
:Remove!
Di nuovo, rimappa se ne hai bisogno molto, ad es :nnoremap <Leader>rm :Remove!<CR>.
mv, mkdir, find, ecc altamente suggerisce.
Mi piace poter eliminare i file da vim, ma sono anche paranoico all'idea di eliminare accidentalmente lavori importanti che, per un motivo o per l'altro, non sono ancora sotto il controllo della versione. Trovo utile combinare le informazioni precedenti di @glts e @accolade con questa risposta su come utilizzare il confirmcomando per il prompt prima di uscire da vim.
Mettendoli insieme, ho aggiunto una funzione al mio ~/.vimrc, che richiede prima di eliminare il file e chiudere il buffer, e l'ho mappato a una combinazione di tasti:
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()
fun! DeleteFileAndCloseBuffer()
let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun
Se sei un tasto meno paranoico di me, puoi aggiungere <CR>alla prima riga
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
e devi solo premere Invio una volta.
expand('%:p')posto di @%quando lo script comunque. (Anche se sono lusingato che tu abbia incorporato il mio suggerimento :) il vantaggio della brevità è marginale in uno script. Ancora più importante %:p:) espanderà il nome del file in un percorso assoluto completo (che potrebbe già essere o meno). Con solo %corri un piccolo rischio di eliminare un file con lo stesso nome in un'altra directory, se ti sei dimenticato di :cdesserci.
Puoi farlo con due passaggi:
salva come nuovo file
: w nuovo nomefile
eliminare il vecchio file
! rm oldfilename
Questa potrebbe essere un'opinione impopolare, ma il tuo file tree explorer (Netrw / NerdTree) sarà il modo più semplice e sicuro per eliminare un file. Anche se OP non utilizza NerdTree, il plugin integrato Netrw funzionerà altrettanto bene.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Potresti aggiungere la tua risposta.