ฉันจะเปลี่ยนชื่อไฟล์ปัจจุบันของฉันเป็นกลุ่มได้อย่างไร?
ตัวอย่างเช่น:
- ฉันกำลังแก้ไข
person.html_erb_spec.rb
- ฉันต้องการเปลี่ยนชื่อเป็น
person.haml_spec.rb
- ฉันต้องการแก้ไขต่อไป
person.haml_spec.rb
ฉันจะทำสิ่งนี้อย่างสง่างามได้อย่างไร?
ฉันจะเปลี่ยนชื่อไฟล์ปัจจุบันของฉันเป็นกลุ่มได้อย่างไร?
ตัวอย่างเช่น:
person.html_erb_spec.rb
person.haml_spec.rb
person.haml_spec.rb
ฉันจะทำสิ่งนี้อย่างสง่างามได้อย่างไร?
คำตอบ:
มีปลั๊กอินเล็กน้อยที่ให้คุณทำเช่นนี้
Program Files (x86)
. เมื่อใดก็ตามที่ไดเรกทอรีนี้จะต้องทำงานกับมันจะต้องถูกห่อด้วยคำพูด ซึ่งเอ่อมาก
คำสั่งนั้นเรียกว่า:saveas
แต่น่าเสียดายที่มันจะไม่ลบไฟล์เก่าของคุณคุณจะต้องทำด้วยตนเอง ดู:help saveas
ข้อมูลเพิ่มเติม
แก้ไข:
การติดตั้งเป็นกลุ่มส่วนใหญ่มีตัวสำรวจไฟล์รวมซึ่งคุณสามารถใช้สำหรับการดำเนินการดังกล่าว ลอง:Explore
ในโหมดคำสั่ง (จริงๆแล้วฉันจะแมปที่ฟังก์ชั่นคีย์มันมีประโยชน์มาก ) คุณสามารถเปลี่ยนชื่อไฟล์ด้วยR
หรือลบออกด้วยD
เช่น แต่การกดปุ่ม<F1>
สำรวจจะให้ภาพรวมที่ดีขึ้น
หากคุณใช้คอมไพล์และมีปลั๊กอินของ tpope fugitive.vim อยู่แล้วเพียง:
:Gmove newname
นี่จะ:
หากไฟล์ของคุณยังไม่ถูกเพิ่มลงใน repo git ให้เพิ่มไฟล์ก่อน:
:Gwrite
:Gmove
ต้องใช้พา ธ สัมพัทธ์สำหรับชื่อไฟล์ใหม่ วิธีที่ดีในการทำเช่นนี้คือการพิมพ์:Gmove <ctrl-r>%
ที่ผนวกเส้นทาง / ชื่อไฟล์ปัจจุบัน
ฉันทำมันด้วยปลั๊กอิน NERDTree:
:NERDTreeFind
จากนั้นกด m
ในการเปลี่ยนชื่อคุณสามารถเลือก(m)ove the current node
และเปลี่ยนชื่อไฟล์ นอกจากนี้ยังมีตัวเลือกเช่นลบคัดลอกย้าย ฯลฯ ...
:w newname
- เพื่อสร้างสำเนา:e#
-:!rm oldname
-บน Windows ขั้นตอนที่ 3 ทางเลือกจะเปลี่ยนแปลงเล็กน้อย:
:!del oldname
-:f newname
2) บันทึก:w
3) !rm oldname
(เลือก) ข้อดีคือประวัติการเลิกทำของคุณจะถูกเก็บรักษาไว้
:saveas
ดีกว่าในเรื่องนั้น @rampion - และทำในสิ่งที่ @ kynan เขียน
หากไฟล์ถูกบันทึกแล้ว:
:!mv {file location} {new file location}
:e {new file location}
ตัวอย่าง:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
ข้อกำหนดการอนุญาต:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
บันทึกเป็น:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
สำหรับ Windows Unverified
:!move {file location} {new file location}
:e {new file location}
ฉันขอแนะนำ:Rename
จากขันทีของ tpope สำหรับเรื่องนี้
นอกจากนี้ยังมีคำสั่งที่ใช้งานง่ายอื่น ๆ อีกมากมาย
คำสั่ง Rename มีการกำหนดไว้ดังต่อไปนี้ (ตรวจสอบ repo สำหรับการอัพเดทใด ๆ !):
command! -bar -nargs=1 -bang -complete=file Rename :
\ let s:file = expand('%:p') |
\ setlocal modified |
\ keepalt saveas<bang> <args> |
\ if s:file !=# expand('%:p') |
\ call delete(s:file) |
\ endif |
\ unlet s:file
คุณสามารถทำได้โดยใช้ netrw
คำสั่งสำรวจเปิด netrw ในไดเรกทอรีของไฟล์ที่เปิด
:E
เลื่อนเคอร์เซอร์ไปที่ไฟล์ที่คุณต้องการเปลี่ยนชื่อ:
R
พิมพ์ชื่อใหม่กด Enter กด y
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #ทันทีจะขยายไปสู่การสำรองไฟล์ (เส้นทางแก้ไขก่อนหน้านี้ในหน้าต่างปัจจุบัน) Enterก่อนที่จะกด ที่ช่วยให้เราตรวจสอบสิ่งที่เรากำลังจะลบ การใช้ไพพ์|
ในกรณีเช่นนี้ไม่ปลอดภัยเพราะหากsav
ล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม#
จะยังคงชี้ไปที่อื่น (หรือไม่มีอะไรเลย) นั่นหมายถึง!rm #
หรือdelete(expand(#))
อาจลบไฟล์ที่แตกต่างอย่างสิ้นเชิง! ดังนั้นให้ทำด้วยมืออย่างระมัดระวังหรือใช้สคริปต์ที่ดี (มีการกล่าวถึงในคำตอบมากมายที่นี่)
... หรือลองสร้างฟังก์ชั่น / คำสั่ง / สคริปต์ด้วยตัวเอง เริ่มต้นจาก sth ง่ายๆเช่น:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
หลังจาก vimrc :Rename new_filename
โหลดเพียงชนิด ปัญหาของคำสั่งนี้คืออะไร?
การทดสอบความปลอดภัย 1:ไม่มีอะไร:Rename
โต้แย้ง
ใช่มันจะลบไฟล์ที่ซ่อนอยู่ใน '#'!
การแก้ไข: คุณสามารถใช้เช่น เงื่อนไขหรือtry
คำสั่งเช่นนั้น:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
การทดสอบความปลอดภัย 1:
:Rename
(โดยไม่มีอาร์กิวเมนต์) จะทำให้เกิดข้อผิดพลาด:
E471: ต้องการอาร์กิวเมนต์
การทดสอบความปลอดภัย 2: จะทำอย่างไรถ้าชื่อจะเหมือนกันกับชื่อก่อนหน้า?
การทดสอบความปลอดภัยที่ 3: จะเกิดอะไรขึ้นถ้าไฟล์นั้นอยู่ในตำแหน่งที่แตกต่างจากของจริง?
แก้ไขด้วยตัวคุณเอง เพื่อความสะดวกในการอ่านคุณสามารถเขียนมันในลักษณะนี้:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
บันทึก
!rm #
ดีกว่า!rm old_name
-> คุณไม่จำเป็นต้องจำชื่อเดิม
!rm <C-R>#
ดีกว่า!rm #
เมื่อทำด้วยมือ -> คุณจะเห็นสิ่งที่คุณลบจริง ๆ (เหตุผลด้านความปลอดภัย)
!rm
โดยทั่วไปจะไม่ปลอดภัยมาก ... mv
ไปยังที่ตั้งถังขยะดีกว่า
call delete(expand('#'))
ดีกว่าคำสั่ง shell (ผู้ไม่เชื่อเรื่องระบบปฏิบัติการ OS) แต่ใช้เวลานานกว่าในการพิมพ์และไม่สามารถใช้control+R
try | code1 | code2 | tryend
-> เมื่อเกิดข้อผิดพลาดขณะที่ code1 อย่าเรียกใช้ code2
:sav
(หรือ:saveas
) เทียบเท่ากับ:f new_name | w
- ดูfile_f - และเก็บรักษาประวัติการเลิกทำ
expand('%:p')
ให้เส้นทางทั้งหมดของตำแหน่งของคุณ ( %
) หรือตำแหน่งของไฟล์ทางเลือก ( #
)
sav person.haml_spec.rb | call delete(expand('#'))
call delete(expand('#'))
มีฟังก์ชั่นใน. vimrc ของ Gary Bernhardtที่จัดการสิ่งนี้
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>
:!mv % %:h/new_name
การลงทะเบียน%
ประกอบด้วยชื่อของไฟล์ปัจจุบัน '%:h'
แสดงไดเรกทอรี 'หัว' ที่มีไฟล์ปัจจุบันเช่น: %:h
ส่งคืน/abc/def
เมื่อไฟล์เต็มพา ธ ของคุณคือabc/dev/my.txt
วิธีการเกี่ยวกับเรื่องนี้ (ปรับปรุงตามคำแนะนำของ Jake):
:exe "!mv % newfilename" | e newfilename
:exe "!mv % newfilename" | e newfilename
เสียงเรียกเข้ามีrename
ฟังก์ชั่น แต่น่าเสียดายที่มันไม่ได้เก็บประวัติ
วิธีที่ไม่เชื่อเรื่องพระเจ้าของระบบปฏิบัติการที่ง่ายที่สุดในการเปลี่ยนชื่อไฟล์โดยไม่สูญเสียประวัติจะเป็น:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
ส่งคืนพา ธ เต็มของไฟล์เก่า
ใช้:bd #
หากคุณต้องการลบไฟล์เก่าออกจากรายการบัฟเฟอร์
หากคุณต้องการใช้คำสั่งด่วนเพื่อเปลี่ยนชื่อไฟล์ให้เพิ่มไฟล์ใหม่ภายใต้ ~ / .vim / plugin ด้วยเนื้อหาต่อไปนี้:
function! s:rename_file(new_file_path)
execute 'saveas ' . a:new_file_path
call delete(expand('#:p'))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
คำสั่งRename
จะช่วยให้คุณเปลี่ยนชื่อไฟล์ได้อย่างรวดเร็ว
มีปลั๊กอินขนาดใหญ่ที่เรียกว่าvim-eunuchโดย Tim Pope ที่มีฟังก์ชั่นการเปลี่ยนชื่อรวมถึงสินค้าอื่น (ลบค้นหาค้นหาบันทึกทั้งหมด chmod, sudo edit, ... )
ในการเปลี่ยนชื่อไฟล์ใน vim-eunuch:
:Move filename.ext
เปรียบเทียบกับ rename.vim:
:rename[!] filename.ext
บันทึกการกดแป้นบางครั้ง :)
สำหรับการเปลี่ยนชื่อไฟล์ที่มีอยู่โดยไม่ใช้ปลั๊กอินคุณควรใช้คำสั่ง
:Explore
คำสั่งนี้อนุญาตให้คุณสำรวจไฟล์ in.directory ลบหรือเปลี่ยนชื่อไฟล์ กว่าที่คุณควรนำทางไปยังไฟล์ที่จำเป็นใน explorer กว่าR
คำสั่งtype ซึ่งจะช่วยให้คุณเปลี่ยนชื่อไฟล์ได้
ฉันไม่รู้ว่านี่เป็นวิธีที่ "ง่ายที่สุด" หรือไม่ แต่สมมติว่าคุณได้บันทึกไฟล์ของคุณแล้ว (: w) ฉันจะเรียกใช้เชลล์ (: sh) และทำ cp foo foo.bak ง่ายๆเพื่อกลับไปที่เครื่องมือแก้ไข ใช้ Ctrl-D / Exit รายการที่เป็นประโยชน์ของคำสั่งเอดิเตอร์ vi บนลิงก์นี้
สคริปต์ตัวเล็ก ๆ นี้ไม่สมบูรณ์แบบ (การรับคืนพิเศษที่คุณต้องกด) แต่มันก็เป็นงานที่ทำได้
function Rename()
let new_file_name = input('New filename: ')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>
อีกวิธีหนึ่งคือใช้ netrw ซึ่งเป็นส่วนกำเนิดของกลุ่ม
:e path/to/whatever/folder/
จากนั้นมีตัวเลือกในการลบเปลี่ยนชื่อ ฯลฯ
ต่อไปนี้เป็นแผนผังคีย์เพื่อเปิด netrw ไปยังโฟลเดอร์ของไฟล์ที่คุณกำลังแก้ไข:
map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>
:sav newfile | !rm #
โปรดทราบว่าจะไม่ลบไฟล์เก่าออกจากรายการบัฟเฟอร์ หากสิ่งสำคัญสำหรับคุณคุณสามารถใช้สิ่งต่อไปนี้แทน:
:sav newfile | bd# | !rm #