Чи можна перейменувати файл, який я редагую, з Vim? Наразі те, що я роблю, - це вихід з Vim, перейменування файлу та відкриття з Vim знову.
Чи можна перейменувати файл, який я редагую, з Vim? Наразі те, що я роблю, - це вихід з Vim, перейменування файлу та відкриття з Vim знову.
Відповіді:
Ви можете зберегти файл під іншим іменем, використовуючи :w. Але ця операція не видалить старий файл, і "старий" файл залишиться у вашому буфері, тому будь-які зміни будуть застосовані до вашого "старого" файлу.
:saveasзберігає ваш новий файл і відкриває його в новому буфері. Але він не видаляє старий файл.
Я використовую tpope / vim-eneuch для :Moveфайлів.
: Перемістити: Перейменуйте буфер та файл на диску одночасно.
:wабо :saveasте, що він буде втрачати дозвіл на виконання, якщо ви редагували сценарій. netrwПерейменування збереже дозволи.
Ви можете перейти до Netrw і перейменувати файл там.
Якщо файл, який ви редагуєте, знаходиться у поточному каталозі, виконайте такі дії:
:edit .
Перейдіть до файлу, натисніть Rта змініть ім'я. Натисніть, Enterщоб відредагувати файл.
Однак є застереження: оригінальний буфер залишається у списку буферів. Якщо ви переключитесь на нього, він порожній.
Якщо файл, який ви редагуєте, знаходиться в іншому каталозі, ви можете перейти в каталог файлу за допомогою:
:cd %:p:h
Якщо ви не хочете змінювати каталог протягом усього сеансу Vim, а лише для поточного буфера, тоді можете зробити це:
:lcd %:p:h
:edit %:p:hтакож, здається, працює.
:Eтакож відкриється netrw
Я використовую плагін Rename2 для цього протягом багатьох років. Він перейменовує і поточний буфер, і файл на диску:
:Rename {newname}
EDIT: Я знайшов цей .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}
Однак цей метод не видаляє старий буфер зі списку буферів.