Перемещение файла в Vim

есть ли способ переместить файл в Vim? Например. Я открыл файл foo / bar.txt в Vim. Я знаю 2 способа переместить этот файл:

первый вариант:

  1. удалить буфер с :bd bar.txt
  2. выполните перемещение по оболочке с помощью mv foo/bar.txt foo/bar2.txt
  3. загрузите файл в vim с помощью :e foo/bar2.txt

второй вариант:

  1. закрыть Vim, поэтому весь буфер закрыт.
  2. выполните движение на ракушка...
  3. запустите Vim и загрузите файл.

но эти два решения смущают. Я знаю, есть плагин для переименования файлов ВИМ-enuch, но разве нет способа Vim для выполнения такой базовой функциональности?

3 ответов


нет атомарного способа переместить такой файл, но это должно быть близко:

function! MoveFile(newspec)
     let old = expand('%')
     " could be improved:
     if (old == a:newspec)
         return 0
     endif
     exe 'sav' fnameescape(a:newspec)
     call delete(old)
endfunction

command! -nargs=1 -complete=file -bar MoveFile call MoveFile('<args>')

Теперь вы можете сказать:

:MoveFile file2.txt

переименовать в file2.txt

:MoveFile %.0

переместить файл2.txt в file2.формат txt.0


вы также можете использовать функцию переименования netrw (проводник по умолчанию).

  1. открыть netrw с :E
  2. переместите курсор на строку с файлом, который вы собираетесь переименовать, в этом случае bar.формат txt. Вы перемещаетесь в соответствующий файл с помощью h,j,k, l или можете искать его с помощью / (например,/bar.txt)
  3. нажмите R. Затем вам будет предложено ввести новый путь. Для ввода директории нажмите <CR>
  4. переместить наведите курсор на новый файл и откройте его с помощью <CR>

хотя это решение может быть не так быстро, как использование vim-eunch, оно позволяет вам видеть структуру проекта при переименовании файла. Это также позволит вам перемещать несколько файлов одновременно.

для дальнейшего чтения run :help netrw-move


Если вы в баре.буфер тхт:

:w bar2.txt
:!rm bar.txt

Если bar2.txt уже существует в текущем каталоге, используйте :w!.