Vim: как обновить буфер, чтобы он указывал на новый путь к файлу - PullRequest
0 голосов
/ 06 мая 2018

Мне было интересно, можно ли обновить открытый буфер, чтобы он указывал на новый путь, если я его изменил.

Пример:

  1. Открыть ./dest1/foo в VIM
  2. Переместить foo в ./dest2/foo
  3. Обновление открытого буфера для отражения нового пути ./dest2/foo вместо чтения / записи по старому пути

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Следующая функция делает то, что вам нужно:

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.

0 голосов
/ 06 мая 2018

Да, это возможно, но не без незначительных нарушений.

  1. Открыть ./dest1/foo в VIM
  2. Войдите в командный режим vim, нажав ":"
  3. Введите в командной строке следующую команду:! Mv '%: p' "./dest2/foo"

Теперь вы можете получить сообщение о том, что файл «foo» больше не доступен. Нажмите клавишу ВВОД или введите команду для продолжения ». Нажмите Ввод. Vim теперь заново открывает файл с нового места.

...