Короткий, безопасный, без плагина:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control + R , # мгновенно расширится до Альтернативный файл (ранее отредактированный путь в текущем окне) перед нажатием Введите .Это позволяет нам проверить, что именно мы собираемся удалить.Использование pipe |
в таком случае не безопасно, потому что если sav
не удастся по какой-либо причине, #
все равно будет указывать на другое место (или на ничто).Это означает, что !rm #
или delete(expand(#))
может удалить совершенно другой файл!Поэтому делайте это вручную или используйте хороший сценарий (они упоминаются здесь во многих ответах).
Обучающие
... или попробуйте самостоятельно создать функцию / команду / скрипт.Начните с простого, например:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
после перезагрузки vimrc, просто наберите :Rename new_filename
.В чем проблема с этой командой?
Тест безопасности 1: Что означает :Rename
без аргументов?
Да, он удаляет файл, скрытый в '#'!
Решение: вы можете использовать, например.условия или try
оператор, подобный следующему:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Тест безопасности 1: :Rename
(без аргумента) выдаст ошибку:
E471: Требуется аргумент
Тест безопасности 2: Что если имя будет таким же, как и у предыдущего?
Тест безопасности 3: Что, если файл будет в другом месте, отличном от вашего фактического?
Исправьте это самостоятельно.Для удобства чтения вы можете написать это следующим образом:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
примечания
!rm #
лучше, чем !rm old_name
-> вам не нужно помнить старое имя
!rm <C-R>#
лучше, чем !rm #
, когда вы делаете это вручную -> вы увидите, что вы действительно удаляете (из соображений безопасности)
!rm
, как правило, не очень безопасны ... mv
к месту для мусора лучше
call delete(expand('#'))
лучше, чемкоманда оболочки (независимая от ОС), но длиннее для ввода и невозможна в использовании control + R
try | code1 | code2 | tryend
-> при возникновении ошибки во времяcode1, не запускайте code2
:sav
(или :saveas
) эквивалентно :f new_name | w
- см. file_f - и сохраняет историю отмен
expand('%:p')
дает полный путь вашего местоположения (%
) или местоположения альтернативного файла (#
)