ฉันจะเปลี่ยนชื่อไฟล์ที่ฉันแก้ไขได้อย่างไร


38

เป็นไปได้ไหมที่จะเปลี่ยนชื่อไฟล์ที่ฉันแก้ไขจากภายใน Vim? ปัจจุบันสิ่งที่ฉันทำคือออกจากกลุ่มเปลี่ยนชื่อไฟล์และเปิดจากกลุ่มอีกครั้ง


1
เกี่ยวข้อง: stackoverflow.com/questions/1205286/…
muru

ฉันสนใจที่จะทำสิ่งนี้ใน neovim
Miguel de Val-Borro

คำตอบ:


34

:wคุณสามารถบันทึกไฟล์ภายใต้ชื่อที่แตกต่างกันโดยใช้ แต่การดำเนินการนี้จะไม่ลบไฟล์เก่าและไฟล์ 'เก่า' ยังคงอยู่ในบัฟเฟอร์ของคุณดังนั้นการเปลี่ยนแปลงใด ๆ จะถูกนำไปใช้กับไฟล์ 'เก่า' ของคุณ

:saveasบันทึกไฟล์ใหม่ของคุณและเปิดในบัฟเฟอร์ใหม่ แต่จะไม่ลบไฟล์เก่า

ฉันใช้tpope / vim-eneuchกับ:Moveไฟล์

: ย้าย: เปลี่ยนชื่อบัฟเฟอร์และไฟล์บนดิสก์พร้อมกัน


ข้อเสียอย่างหนึ่งของ:wหรือ:saveasคือมันจะสูญเสียสิทธิ์ดำเนินการถ้าคุณแก้ไขสคริปต์ netrwการเปลี่ยนชื่อจะเก็บสิทธิ์ไว้
wisbucky

10

คุณสามารถเลื่อนไปที่Netrwและเปลี่ยนชื่อไฟล์ที่นั่น

หากไฟล์ที่คุณแก้ไขอยู่ในไดเรกทอรีปัจจุบันให้ทำดังนี้

:edit .

นำทางไปยังไฟล์กดRและเปลี่ยนชื่อ กดEnterเพื่อแก้ไขไฟล์

มีข้อแม้อยู่ว่า: บัฟเฟอร์เดิมยังคงอยู่ในรายการบัฟเฟอร์ หากคุณเปลี่ยนมาใช้มันว่างเปล่า

หากไฟล์ที่คุณแก้ไขอยู่ในไดเรกทอรีอื่นคุณสามารถเปลี่ยนเป็นไดเรกทอรีของไฟล์ได้ด้วย:

:cd %:p:h

หากคุณไม่ต้องการเปลี่ยนไดเรกทอรีสำหรับทั้งกลุ่ม Vim แต่สำหรับบัฟเฟอร์ปัจจุบันเท่านั้นคุณสามารถทำได้แทน:

:lcd %:p:h

2
การพิมพ์แบบตรง:edit %:p:hดูเหมือนว่าจะทำงาน
Mladen Jablanović

:Eจะเปิด netrw ด้วย
wisbucky

6

ฉันใช้ปลั๊กอิน 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>

3

วิธีที่ดีที่สุดคือใช้:MoveOrangTux กล่าว เพื่อความสมบูรณ์คุณยังสามารถใช้คำสั่งเทอร์มินัลในตัวแก้ไข vi โดยใช้ปุ่ม ( !) ในโหมดคำสั่ง

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

อย่างไรก็ตามวิธีนี้ไม่ได้ลบบัฟเฟอร์เก่าออกจากรายการบัฟเฟอร์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.