Kann man ein: bdelete in Vim rückgängig machen?

582
sundar

Ich habe mich an Ctrl-Shift-TFirefox gewöhnt, um das Schließen eines Tabs rückgängig zu machen. Ist es möglich, ähnliche Funktionen in Vim zu erhalten? Googeln hat mich nicht auf etwas Nützliches hingewiesen.

0

2 Antworten auf die Frage

1
romainl

Ich kenne keine vorhandene Lösung, aber es scheint relativ einfach zu sein, den Namen des gelöschten Puffers in einer Variablen zu speichern BufDeleteund ein einfaches Mapping zu definieren, das diese Variable verwendet. Mal schauen...

autocmd BufDelete * let g:latest_deleted_buffer = expand("<afile>:p")  nnoremap <F6> :e <C-R>=fnameescape(g:latest_deleted_buffer)<CR><CR> 
Danke, ich wusste nichts über das BufDelete-Ereignis (und mein Vimscript-Fu ist sowieso schwach). Ist es möglich, diesen Befehl in einen `:` - Befehl anstelle einer normalen Moduszuordnung zu machen? sundar vor 10 Jahren 0
Dies funktioniert perfekt in Cygwin, aber in Windows gVim wird nach dem Hinzufügen des angegebenen `autocmd` der Fehler` E18: Unerwartete Zeichen in: let` angezeigt, wenn ich ein `: bd` mache. Ich vermute, es sind die Backslash-Zeichen in Windows-Pfaden. Könnten Sie bitte einen Ausweg vorschlagen? sundar vor 10 Jahren 0
Ok, ich habe das zweite Problem herausgefunden und den Erweiterungsbefehl in `expand (") geändert.: p: gs? \\? /? ")` behebt das Problem. Dieses Rückgängigmachen funktioniert jetzt perfekt, vielen Dank! sundar vor 10 Jahren 0
Entschuldigung, ich war AFK für die Nacht. Für meine Lösung wurde UNIX angenommen, weil Sie nicht viel über Ihre Umgebung gesagt haben. Ich bin glücklich, dass diese einfache Lösung für Sie funktioniert. romainl vor 10 Jahren 0
Bindestriche sind in Variablennamen nicht zulässig, was den E18 verursacht. Außerdem sollten Sie wahrscheinlich einen vollständigen Pfad erweitern: p`, um die Änderungen von CWD zu behandeln, und verwenden Sie fnameescape () im Mapping. Ingo Karkat vor 10 Jahren 1
@IngoKarkat, die Antwort wurde gemäß Ihrem Kommentar bearbeitet. romainl vor 10 Jahren 0
0
BubbleMonster

Nur um zu verdeutlichen, wird :bdeletein VIM Puffer gelöscht (Puffer löschen). Mir ist keine Möglichkeit bekannt, sie "rückgängig zu machen". Vielleicht hilft Ihnen jedoch Folgendes:

Ich habe eine Datei auf meinem Desktop test.rtf

Wenn ich den folgenden Befehl im Terminal verwende: vim test.rtfgefolgt von: :bdelete+ Enter- öffnet sich ein leerer Bildschirm, in den Sie eintippen können. Wenn Sie Folgendes eingeben: :qgefolgt von, Enterum den Vorgang zu beenden, werden keine Änderungen gespeichert. Sie machen also den Fehler rückgängig.

Ich hoffe das kann etwas hilfreich sein.

Es scheint mir, als würden Sie davon ausgehen, dass ": bdelete" den Inhalt der gerade geöffneten Datei oder etwas leert, aber tatsächlich wird die Datei einfach geschlossen. q` würde das sowieso nicht tun, wir würden entweder `: q!` oder besser `: e!`) brauchen. Was ich suche, ist eine einfache Abkürzung, um zu vermeiden, dass Sie Folgendes eingeben müssen: ': e' gefolgt von dem gesamten Pfad der gerade geschlossenen Datei, wenn ich sie sofort wieder öffnen möchte. sundar vor 10 Jahren 0