Перемещение файла в Vim
есть ли способ переместить файл в Vim? Например. Я открыл файл foo / bar.txt в Vim. Я знаю 2 способа переместить этот файл:
первый вариант:
- удалить буфер с
:bd bar.txt
- выполните перемещение по оболочке с помощью
mv foo/bar.txt foo/bar2.txt
- загрузите файл в vim с помощью
:e foo/bar2.txt
второй вариант:
- закрыть Vim, поэтому весь буфер закрыт.
- выполните движение на ракушка...
- запустите 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 (проводник по умолчанию).
- открыть netrw с
:E
- переместите курсор на строку с файлом, который вы собираетесь переименовать, в этом случае bar.формат txt. Вы перемещаетесь в соответствующий файл с помощью h,j,k, l или можете искать его с помощью
/
(например,/bar.txt
) - нажмите
R
. Затем вам будет предложено ввести новый путь. Для ввода директории нажмите<CR>
- переместить наведите курсор на новый файл и откройте его с помощью
<CR>
хотя это решение может быть не так быстро, как использование vim-eunch, оно позволяет вам видеть структуру проекта при переименовании файла. Это также позволит вам перемещать несколько файлов одновременно.
для дальнейшего чтения run :help netrw-move
Если вы в баре.буфер тхт:
:w bar2.txt
:!rm bar.txt
Если bar2.txt уже существует в текущем каталоге, используйте :w!
.