Чи можна перейменувати файл, який я редагую, з 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}
Однак цей метод не видаляє старий буфер зі списку буферів.