Переместить файл в 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 для выполнения таких базовых функций?
Ответы
Ответ 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!
.