Як я можу перейменувати файл, який я редагую?


38

Чи можна перейменувати файл, який я редагую, з Vim? Наразі те, що я роблю, - це вихід з Vim, перейменування файлу та відкриття з Vim знову.



Мені цікаво зробити це в неоові
Мігель де Валь-Борро

Відповіді:


35

Ви можете зберегти файл під іншим іменем, використовуючи :w. Але ця операція не видалить старий файл, і "старий" файл залишиться у вашому буфері, тому будь-які зміни будуть застосовані до вашого "старого" файлу.

:saveasзберігає ваш новий файл і відкриває його в новому буфері. Але він не видаляє старий файл.

Я використовую tpope / vim-eneuch для :Moveфайлів.

: Перемістити: Перейменуйте буфер та файл на диску одночасно.


Один з недоліків :wабо :saveasте, що він буде втрачати дозвіл на виконання, якщо ви редагували сценарій. netrwПерейменування збереже дозволи.
Вісбукі

11

Ви можете перейти до Netrw і перейменувати файл там.

Якщо файл, який ви редагуєте, знаходиться у поточному каталозі, виконайте такі дії:

:edit .

Перейдіть до файлу, натисніть Rта змініть ім'я. Натисніть, Enterщоб відредагувати файл.

Однак є застереження: оригінальний буфер залишається у списку буферів. Якщо ви переключитесь на нього, він порожній.

Якщо файл, який ви редагуєте, знаходиться в іншому каталозі, ви можете перейти в каталог файлу за допомогою:

:cd %:p:h

Якщо ви не хочете змінювати каталог протягом усього сеансу Vim, а лише для поточного буфера, тоді можете зробити це:

:lcd %:p:h

2
Введення тексту :edit %:p:hтакож, здається, працює.
Младен Ябланович

:Eтакож відкриється netrw
wisbucky

6

Я використовую плагін 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>

3

Найкращий спосіб - це використання :Move, як сказав OrangTux. Для повноти ви також можете виконувати команди терміналів у редакторах vi, використовуючи bang ( !) в командному режимі.

:!mv {current_file} {new_name}
:e {new_name}

Однак цей метод не видаляє старий буфер зі списку буферів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.