Можно ли переименовать файл, который я редактирую, из Vim? В настоящее время я выхожу из Vim, переименовываю файл и снова открываю из Vim.
Можно ли переименовать файл, который я редактирую, из Vim? В настоящее время я выхожу из Vim, переименовываю файл и снова открываю из Vim.
Ответы:
Вы можете сохранить файл под другим именем, используя :w
. Но эта операция не удалит старый файл, и «старый» файл останется в вашем буфере, поэтому любые изменения будут применены к вашему «старому» файлу.
:saveas
сохраняет ваш новый файл и открывает его в новом буфере. Но это не удаляет старый файл.
Я использую tpope / vim-eneuch для :Move
файлов.
: Move: переименовать буфер и файл на диске одновременно.
:w
или :saveas
является то, что он потеряет разрешение на выполнение, если вы редактировали скрипт. netrw
Переименовать сохранит разрешения.
Вы можете перейти в Netrw и переименовать файл там.
Если файл, который вы редактируете, находится в текущем каталоге, выполните:
:edit .
Перейдите к файлу, нажмите Rи измените имя. Нажмите, Enterчтобы редактировать файл.
Однако есть предостережение: исходный буфер остается в списке буферов. Если вы переключитесь на него, он пуст.
Если файл, который вы редактируете, находится в другом каталоге, вы можете перейти в каталог файла с помощью:
:cd %:p:h
Если вы не хотите изменять каталог для всего сеанса Vim, а только для текущего буфера, тогда вы можете сделать вместо этого:
:lcd %:p:h
:edit %:p:h
также, кажется, работает.
:E
также откроет Netrw
Я использовал плагин Rename2 для этого в течение многих лет. Переименовывает как текущий буфер, так и файл на диске:
:Rename {newname}
РЕДАКТИРОВАТЬ: Я нашел этот .vimrc
файл на GitHub :
function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
exec ':saveas ' . new_name
exec ':silent !rm ' . old_name
redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>
Лучший способ - использовать :Move
, как сказал OrangTux. Для полноты вы также можете выполнять терминальные команды в редакторах vi, используя bang ( !
) в командном режиме.
:!mv {current_file} {new_name}
:e {new_name}
Однако этот метод не удаляет старый буфер из вашего списка буферов.