Breve, sicuro, senza plug-in:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #si espanderà istantaneamente in un file alternativo (percorso precedentemente modificato nella finestra corrente) prima di premere Enter. Questo ci consente di rivedere ciò che esattamente elimineremo. L'uso di pipe |
in questo caso non è sicuro, perché se sav
fallisce per qualsiasi motivo, #
punterà comunque verso un altro posto (o verso nulla). Ciò significa !rm #
chedelete(expand(#))
può eliminare file completamente diversi! Quindi fallo a mano con attenzione o usa una buona sceneggiatura (sono citati in molte risposte qui).
educativo
... o prova a creare una funzione / comando / script tu stesso. Inizia da sth semplice come:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
dopo la ricarica di vimrc, basta digitare :Rename new_filename
. Qual è il problema con questo comando?
Test di sicurezza 1: cosa fa :Rename
senza argomento?
Sì, elimina il file nascosto in '#'!
Soluzione: è possibile utilizzare ad es. condizioni o try
dichiarazioni del genere:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Il test di sicurezza 1:
:Rename
(senza argomento) genererà un errore:
E471: argomento richiesto
Test di sicurezza 2:
cosa succede se il nome sarà lo stesso del precedente?
Test di sicurezza 3:
cosa succede se il file si trova in una posizione diversa da quella effettiva?
Riparalo tu stesso. Per leggibilità puoi scriverlo in questo modo:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
Appunti
!rm #
è meglio di !rm old_name
-> non è necessario ricordare il vecchio nome
!rm <C-R>#
è meglio di !rm #
quando lo fai a mano -> vedrai cosa rimuovi effettivamente (motivo di sicurezza)
!rm
non è generalmente molto sicuro ... mv
in una posizione di spazzatura è meglio
call delete(expand('#'))
è meglio del comando shell (sistema operativo indipendente) ma più lungo da digitare e impossibile da usare control+R
try | code1 | code2 | tryend
-> quando si verifica un errore durante code1, non eseguire code2
:sav
(o :saveas
) equivale a :f new_name | w
- vedi file_f - e conserva la cronologia degli annullamenti
expand('%:p')
fornisce l'intero percorso della posizione ( %
) o della posizione del file alternativo ( #
)