Wie kann ich die aktuell geöffnete Datei von vim aus löschen? Wäre schön, auch den Puffer zu schließen.Wie kann ich die aktuelle Datei in vim löschen?
Ich sehe dich can use NERDTree for that, aber ich benutze dieses Plugin nicht.
Wie kann ich die aktuell geöffnete Datei von vim aus löschen? Wäre schön, auch den Puffer zu schließen.Wie kann ich die aktuelle Datei in vim löschen?
Ich sehe dich can use NERDTree for that, aber ich benutze dieses Plugin nicht.
ein externes Tool wie rm (1) ist in Ordnung, aber Vim hat auch seine eigenen delete()
Funktion zum Löschen von Dateien. Dies hat den Vorteil, dass es tragbar ist.
:call delete(expand('%'))
Eine alternative Weise, dies auszudrücken, ist :call delete(@%)
, die die %
(aktuelle Datei) Register (Spitze durch @accolade) verwendet.
Um den aktuellen Puffer vollständig zu reinigen, sowohl die Dateidarstellung auf der Festplatte und den Vim-Puffer, hängen :bdelete
:
:call delete(expand('%')) | bdelete!
Sie werden wahrscheinlich wollen diese nach Ihren Wünschen kartieren.
Werfen Sie einen Blick auf Delete files with a Vim command. Die Comments Sektion sollte das haben, wonach Sie suchen:
Im Grunde wird Rm die aktuelle Datei löschen; RM löscht die aktuelle Datei und beendet den Puffer (ohne zu speichern) auf einmal.
Alternativ können Sie nur einen Shell-Befehl ausgeben, um die aktuelle Datei zu entfernen:
:!rm %
Es ist so einfach, dass ich fast nicht glauben kann, dass ich dafür ein Skript erstellen muss. Vielen Dank. – fotanus
Löschen mit '! Rm%', gibt es eine Möglichkeit, die Warnung zu vermeiden, wenn vim zurück zum Puffer kommt? – fotanus
Mit einigen Sonderzeichen im Dateinamen, würde dieser Befehl nicht funktionieren, wie wenn der Dateiname 20130711-Kontakte # 285.vcf ist, der Platz hat, würde es sagen: "rm: kann nicht entfernen 20130711-Kontakte": Keine solche Datei Oder Verzeichnis ' – Saeed
Manchmal kann ein Plugin selbst 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 eunuch.vim bietet
Vim Zucker für die UNIX-Shell-Befehle, die es am meisten brauchen. Löschen oder benennen Sie einen Puffer und die zugrunde liegende Datei gleichzeitig um. Laden Sie eine
find
oder einelocate
in die Quickfix-Liste. Und so weiter.
Perfekt. Es hat, was wir brauchen, plus einige zusätzliche Werkzeuge, wenn wir auf einem UNIX-System sind.
Der Befehl Sie suchen, ist
:Remove!
Wieder ist es neu zuordnen, wenn Sie es eine Menge benötigen, beispielsweise .
Ich habe nach einem Weg gesucht, ohne Plugins auskommen zu können, also werde ich deine andere Antwort akzeptieren. Das Plugin sieht gut aus :-) – fotanus
Dieses Plugin ist sehr praktisch, wenn Sie vim Wege von 'mv',' mkdir', 'find' usw. brauchen. Sehr zu empfehlen. –
Sie können es mit zwei Schritten tun:
speichern als neue Datei
: w newfilename
die alte Datei
löschen! rm oldFileNameIch mag Dateien in vim löschen zu können, aber ich bin auch paranoid versehentlich wichtige Arbeit, die für einen oder anderen Grund zu löschen, noch nicht unter Versionskontrolle ist. Ich finde es nützlich, die vorherigen Informationen von @glts und @accolade mit this answer zu kombinieren, wie man den Befehl confirm
verwendet, um vor dem Beenden von vim aufzufordern.
diese zusammen Einlochen, fügte ich eine Funktion meiner ~/.vimrc
, die die Datei und Schließen des Puffers zu löschen fordert vor, und es zu einer Tastenkombination zugeordnet:
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 bin, Sie <CR>
auf die erste Zeile
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
und haben anhängen kann nur einmal Rückkehr zu drücken.
Ich empfehle dringend die Verwendung von 'expand ('%: p')' anstelle von '@%', wenn Sie es trotzdem skripten. (Ich fühle mich geschmeichelt, dass Sie meinen Hinweis eingebaut haben :) Die Kürze ist in einem Skript marginal. Was noch wichtiger ist:) '%: p' wird den Dateinamen auf einen vollständigen absoluten Pfad erweitern (was vielleicht schon geschehen ist). Mit nur '%' liegst du ein kleines Risiko des Löschens einer Datei mit dem gleichen Namen in einem anderen Verzeichnis, wenn du dich '' cd'ed vergessen hast. –
Danke, dass du das gemacht hast! Ich habe meine Antwort entsprechend aktualisiert. –
Danke! Die folgende Map in der .vimrc scheint zu funktionieren: 'nnoremap rm: call delete (expand ('%')) \ | bdelete! '. Vielleicht möchten Sie Ihre Antwort hinzufügen. –
fotanus
Diese Zuordnung ist nicht ideal. Wir wollen den Befehl ['r'] (http://vimdoc.sourceforge.net/htmldoc/change.html#r) nicht brechen! Bessere Präfixe für das Mapping mit [' ...'] (http://vimdoc.sourceforge.net/htmldoc/map.html#mapleader). –
glts
ist nicht ideal, auch weil es einfach ist, die Datei zu löschen und den Puffer ohne Absicht zu schließen !! Aber ich brauchte das nur als vorübergehende Lösung. – fotanus