Подтвердить что ты не робот

Переместить файл в Vim

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

Первое решение:

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

Второе решение:

  • Закрыть Vim, поэтому весь буфер закрыт.
  • Выполните перемещение по оболочке...
  • Запустите Vim и загрузите файл.

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

4b9b3361

Ответ 1

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

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

для перемещения файла file2.txt в файл file2.txt.0

Ответ 2

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

  • Открыть netrw с помощью :E
  • Переместите курсор в строку с файлом, который вы собираетесь переименовать, в этом случае bar.txt. Вы переходите к рассматриваемому файлу с помощью h, j, k, l или можете искать его с помощью / (например, /bar.txt)
  • Нажмите R. Затем вам будет предложено создать новый путь к файлу. По завершении ввода пути к файлу нажмите <CR>
  • Переместите курсор в новый файл и откройте его <CR>

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

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

Ответ 3

если вы находитесь в буфере bar.txt:

:w bar2.txt
:!rm bar.txt

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