Bagaimana saya bisa mengganti nama file yang saya edit?

38

Apakah mungkin untuk mengubah nama file yang saya edit dari dalam Vim? Saat ini yang saya lakukan adalah keluar dari Vim, ganti nama file dan buka dari Vim lagi.

thameera
sumber
Saya tertarik untuk melakukan ini di neovim
Miguel de Val-Borro

Jawaban:

35

Anda dapat menyimpan file dengan nama yang berbeda menggunakan :w. Tetapi operasi ini tidak akan menghapus file lama dan file 'lama' tetap ada di buffer Anda, jadi setiap perubahan akan diterapkan ke file 'lama' Anda.

:saveasmenyimpan file baru Anda dan membukanya di buffer baru. Tetapi itu tidak menghapus file lama.

Saya menggunakan tpope / vim-eneuch ke :Movefile.

: Pindahkan: Ganti nama buffer dan file pada disk secara bersamaan.

OrangeTux
sumber
Satu kelemahan :watau :saveasadalah bahwa itu akan kehilangan izin eksekusi jika Anda mengedit skrip. netrwGanti nama akan menjaga izin.
wisbucky
11

Anda dapat pindah ke Netrw dan mengganti nama file di sana.

Jika file yang Anda edit ada di direktori saat ini, maka lakukan:

:edit .

Navigasikan ke file, tekan R, dan ubah nama. Tekan Enteruntuk mengedit file.

Namun ada peringatan: buffer asli tetap ada dalam daftar buffer. Jika Anda beralih ke sana, itu kosong.

Jika file yang Anda edit berada di direktori yang berbeda, Anda dapat mengubah ke direktori file dengan:

:cd %:p:h

Jika Anda tidak ingin mengubah direktori untuk seluruh sesi Vim tetapi hanya untuk buffer saat ini, maka Anda dapat melakukannya:

:lcd %:p:h
Hentikan bahaya yang berkelanjutan pada Monica
sumber
2
Mengetik lurus :edit %:p:hjuga sepertinya berhasil.
Mladen Jablanović
:Ejuga akan membuka netrw
wisbucky
6

Saya telah menggunakan plugin Rename2 untuk ini selama bertahun-tahun. Itu mengubah nama buffer saat ini, dan file di disk:

:Rename {newname}

EDIT: Saya menemukan ini .vimrcfile di 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>
craigp
sumber
3

Cara terbaik adalah menggunakan :Move, seperti yang dikatakan OrangTux. Untuk kelengkapan, Anda juga dapat melakukan perintah terminal di vi editor menggunakan bang ( !) dalam mode perintah.

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

Namun, metode ini tidak menghapus buffer lama dari daftar buffer Anda.

Polling Cody
sumber