Wie kann ich die aktuell geöffnete Datei aus vim von der Festplatte löschen? Wäre schön auch den Puffer zu schließen.
Ich sehe, dass Sie NERDTree dafür verwenden können , aber ich verwende dieses Plugin nicht.
Wie kann ich die aktuell geöffnete Datei aus vim von der Festplatte löschen? Wäre schön auch den Puffer zu schließen.
Ich sehe, dass Sie NERDTree dafür verwenden können , aber ich verwende dieses Plugin nicht.
Antworten:
Die Verwendung eines externen Tools wie rm (1) ist in Ordnung, aber Vim verfügt auch über eine eigene delete()Funktion zum Löschen von Dateien. Dies hat den Vorteil, tragbar zu sein.
:call delete(expand('%'))
Eine alternative Möglichkeit, dies auszudrücken, ist :call delete(@%)die Verwendung des %Registers (aktuelle Datei) (Tipp von @accolade).
Um den aktuellen Puffer vollständig zu löschen, fügen Sie sowohl die Dateidarstellung auf der Festplatte als auch den Vim-Puffer hinzu :bdelete:
:call delete(expand('%')) | bdelete!
Sie möchten dies wahrscheinlich nach Ihren Wünschen zuordnen.
rBefehl nicht brechen ! Stellen Sie Ihrem Mapping besser ein Präfix voran <Leader>....
nnoremap <C-Del> :call delete(expand('%'))<CR>aber ich schließe den Puffer nicht, falls es versehentlich passiert. dann haben Sie noch eine Chance, es zu speichern.
:call delete(@%)|q!← Kurze Variante (wenn Sie sie nicht zuordnen möchten). (Der Puffer bleibt in :lsund kann auf :bdiese Weise wiederbelebt werden; er behält die Dateinamen- und Pufferoptionen bei, aber nicht den Dateiinhalt.)
:call delete(@%)|bd!und die Verwendung :ls!mit :bwieder zu beleben.
Schauen Sie sich Dateien mit einem Vim-Befehl löschen an . Der Kommentarbereich sollte das enthalten, wonach Sie suchen:
Grundsätzlich löscht Rm die aktuelle Datei. RM löscht die aktuelle Datei und beendet den Puffer (ohne zu speichern) auf einmal.
Alternativ können Sie einfach einen Shell-Befehl ausgeben, um die aktuelle Datei zu entfernen:
:!rm %
!rm %es eine Möglichkeit, die Warnung zu vermeiden, wenn vim zum Puffer zurückkehrt?
%) mit Anführungszeichen umgeben : !rm "%".
%Wenn nur (Dateipfad (" Dateiname " in der vim-Terminologie)) wie ursprünglich aufgerufen, möglicherweise relativ, z. B. nur der Dateiname) anstelle von %:p(absoluter Dateipfad) verwendet wird, besteht ein geringes Risiko, dass stattdessen eine gleichnamige Datei in einem anderen Verzeichnis gelöscht wird. wenn du vergessen hast hast du dort :cded. Daher empfehle ich dringend, %:panstatt zu verwenden, %wenn Sie es trotzdem zuordnen.
Manchmal kann ein Plugin auch für ein einfaches Problem eine attraktive Lösung sein. In diesem Fall haben wir Glück, denn es gibt eunuch.vim vom allmächtigen Tim Pope.
In seinen eigenen Worten bietet eunuch.vim
Vim Zucker für die UNIX-Shell-Befehle, die es am dringendsten benötigen. Löschen oder benennen Sie gleichzeitig einen Puffer und die zugrunde liegende Datei um. Laden Sie a
findoder alocatein die Quickfix-Liste. Und so weiter.
Perfekt. Es hat das, was wir brauchen, sowie einige zusätzliche Tools, wenn wir auf einem UNIX-System arbeiten.
Der Befehl, den Sie suchen, ist
:Remove!
Ordnen Sie es erneut zu, wenn Sie es häufig benötigen, z :nnoremap <Leader>rm :Remove!<CR>.
mv, mkdir, findetc. empfehlen.
Ich mag es, Dateien aus vim heraus löschen zu können, aber ich bin auch paranoid, wenn ich versehentlich wichtige Arbeiten lösche, die aus dem einen oder anderen Grund noch nicht unter Versionskontrolle stehen. Ich finde es nützlich, die vorherigen Informationen von @glts und @accolade mit dieser Antwort zu kombinieren, wie der confirmBefehl zum Auffordern verwendet werden kann, bevor vim beendet wird.
Als ich diese zusammenstellte, fügte ich meinem eine Funktion hinzu ~/.vimrc, die vor dem Löschen der Datei und dem Schließen des Puffers zur Eingabe auffordert, und ordnete sie einer Tastenkombination zu:
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
Wenn Sie einen Tastendruck weniger paranoid sind als ich, können Sie <CR>an die erste Zeile anhängen
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
und müssen nur einmal die Eingabetaste drücken.
expand('%:p')anstatt @%es trotzdem zu schreiben. (Obwohl ich geschmeichelt bin, dass Sie meinen Hinweis aufgenommen haben :) Der Vorteil der Kürze ist in einem Skript marginal. Noch wichtiger ist, %:pdass :) den Dateinamen auf einen vollständigen absoluten Pfad erweitert (der möglicherweise bereits vorhanden ist oder nicht). Mit nur %Ihnen besteht ein geringes Risiko, stattdessen eine gleichnamige Datei in einem anderen Verzeichnis zu löschen, wenn Sie vergessen haben, dass Sie dort bearbeitet :cdhaben.
Sie können dies in zwei Schritten tun:
als neue Datei speichern
: w neuer Dateiname
Löschen Sie die alte Datei
! rm alter Dateiname
Dies mag eine unpopuläre Meinung sein, aber Ihr Dateibaum-Explorer (Netrw / NerdTree) wird der einfachste und sicherste Weg sein, eine Datei zu löschen. Auch wenn OP NerdTree nicht verwendet, funktioniert das eingebaute Plugin Netrw genauso gut.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Vielleicht möchten Sie Ihre Antwort hinzufügen.