Kurz, sicher, ohne Plugin:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control + R , # wird sich sofort zu einem Wechseldatei (zuvor bearbeiteter Pfad im aktuellen Fenster), bevor Sie Enter . So können wir überprüfen, was genau wir löschen wollen. Mit Pipe |
ist in einem solchen Fall nicht sicher, denn wenn sav
aus irgendeinem Grund ausfällt, #
zeigt immer noch auf einen anderen Ort (oder ins Leere). Das bedeutet !rm #
o delete(expand(#))
kann eine ganz andere Datei löschen! Machen Sie es also sorgfältig von Hand oder verwenden Sie ein gutes Skript (das in vielen Antworten hier erwähnt wird).
Bildung
...oder versuchen Sie selbst eine Funktion/Befehl/Skript zu erstellen. Beginnen Sie mit etwas Einfachem wie:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
nach dem Neuladen von vimrc, geben Sie einfach :Rename new_filename
. Was ist das Problem mit diesem Befehl?
Sicherheitstest 1: Was bedeutet :Rename
ohne Argumente?
Ja, es löscht die in '#' versteckte Datei!
Lösung: Sie können z. B. Bedingungen oder try
Aussage wie diese:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Sicherheitstest 1: :Rename
(ohne Argument) wird einen Fehler auslösen:
E471: Argument erforderlich
Sicherheitstest 2: Was ist, wenn der Name derselbe wie der vorherige ist?
Sicherheitstest 3: Was ist, wenn sich die Datei an einem anderen Ort als dem tatsächlichen befindet?
Reparieren Sie es selbst. Zur besseren Lesbarkeit können Sie es so schreiben:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
Hinweise
-
!rm #
ist besser als !rm old_name
-> Sie brauchen sich nicht an den alten Namen zu erinnern
-
!rm <C-R>#
ist besser als !rm #
wenn man es von Hand macht -> sieht man, was man tatsächlich entfernt (Sicherheitsgründe)
-
!rm
ist im Allgemeinen nicht sehr sicher... mv
zu einem Müllplatz ist besser
-
call delete(expand('#'))
ist besser als ein Shell-Befehl (unabhängig vom Betriebssystem), aber länger zu tippen und unmöglich zu benutzen control + R
-
try | code1 | code2 | tryend
-> wenn bei Code1 ein Fehler auftritt, wird Code2 nicht ausgeführt
-
:sav
(o :saveas
) ist gleichbedeutend mit :f new_name | w
- siehe datei_f - und bewahrt die ungeschriebene Geschichte
-
expand('%:p')
gibt den gesamten Pfad Ihres Standorts an ( %
) oder den Ort der alternativen Datei ( #
)