Следующая функция делает то, что вам нужно:
function Saveas(newfile)
let oldfile=expand("%:p")
silent! exe 'saveas!' fnameescape(a:newfile)
bd #
exe 'cd ' . expand('%:h')
call delete(oldfile)
endfunction
command! -nargs=1 -complete=dir -complete=file Saveas call Saveas('<args>')
Как его использовать: если в данный момент редактируется ./foo
, вы можете сделать :Saveas ./dest1/foo
(при условии, что каталог dest1
существует). Теперь текущий буфер будет ./dest/foo
, тогда как foo
будет удален из списка буферов. Также текущий каталог (pwd
) будет обновлен до ./dest
.
Примечание : Файл foo
будет удален. Будет создан новый файл ./dest1/foo
с содержанием foo
.