ฉันจะลบไฟล์ที่เปิดอยู่ในปัจจุบันออกจากดิสก์ได้อย่างไร จะเป็นการดีที่จะปิดบัฟเฟอร์ด้วย
ฉันเห็นว่าคุณสามารถใช้ NERDTreeได้ แต่ฉันไม่ได้ใช้ปลั๊กอินนี้
ฉันจะลบไฟล์ที่เปิดอยู่ในปัจจุบันออกจากดิสก์ได้อย่างไร จะเป็นการดีที่จะปิดบัฟเฟอร์ด้วย
ฉันเห็นว่าคุณสามารถใช้ NERDTreeได้ แต่ฉันไม่ได้ใช้ปลั๊กอินนี้
คำตอบ:
การใช้เครื่องมือภายนอกเช่นrm (1) นั้นใช้ได้ แต่ Vim ยังมีdelete()
ฟังก์ชันของตัวเองสำหรับการลบไฟล์ สิ่งนี้มีข้อดีคือพกพาได้
:call delete(expand('%'))
อีกวิธีหนึ่งในการแสดงสิ่งนี้คือ:call delete(@%)
ใช้%
(ไฟล์ปัจจุบัน) register (tip by @accolade)
หากต้องการล้างบัฟเฟอร์ปัจจุบันอย่างสมบูรณ์ทั้งการแสดงไฟล์บนดิสก์และบัฟเฟอร์ Vim ให้ผนวก:bdelete
:
:call delete(expand('%')) | bdelete!
คุณอาจต้องการแมปสิ่งนี้ตามความต้องการของคุณ
r
คำสั่ง! <Leader>...
ดีกว่าการทำแผนที่คำนำหน้าของคุณด้วย
nnoremap <C-Del> :call delete(expand('%'))<CR>
แต่ฉันไม่ปิดบัฟเฟอร์ในกรณีที่มันเกิดขึ้นโดยบังเอิญ คุณยังมีโอกาสบันทึก
:call delete(@%)|q!
←ตัวแปรสั้น (หากคุณไม่ต้องการแมป) (บัฟเฟอร์ยังคงอยู่:ls
และสามารถฟื้นขึ้นมาได้ด้วย:b
วิธีนี้โดยจะเก็บชื่อไฟล์และตัวเลือกบัฟเฟอร์ไว้ แต่ไม่ใช่เนื้อหาของไฟล์)
:call delete(@%)|bd!
และใช้:ls!
ด้วย:b
เพื่อฟื้นฟู
ลองดูที่ลบไฟล์ที่มีคำสั่งที่เป็นกลุ่ม ความคิดเห็นส่วนควรจะมีสิ่งที่คุณกำลังมองหา:
โดยทั่วไป Rm จะลบไฟล์ปัจจุบัน RM จะลบไฟล์ปัจจุบันและออกจากบัฟเฟอร์ (โดยไม่บันทึก) ในครั้งเดียว
หรือคุณสามารถใช้คำสั่งเชลล์เพื่อลบไฟล์ปัจจุบัน:
:!rm %
!rm %
มีวิธีหลีกเลี่ยงคำเตือนเมื่อกลุ่มกลับไปที่บัฟเฟอร์หรือไม่?
%
) !rm "%"
ด้วยคำพูด:
%
(filepath ("filepath (" filename "ในคำศัพท์ vim) ตามที่เรียกในตอนแรกอาจเป็นญาติเช่นชื่อไฟล์) แทนที่จะเป็น%:p
(พา ธ ไฟล์สัมบูรณ์) คุณจะเสี่ยงเล็กน้อยที่จะลบไฟล์ที่มีชื่อเดียวกันในไดเร็กทอรีอื่นแทน ถ้าคุณลืมไป:cd
แล้ว ดังนั้นฉันขอแนะนำอย่างยิ่งให้ใช้%:p
แทน%
ถ้าคุณแมปอยู่ดี
บางครั้งปลั๊กอินอาจเป็นทางออกที่น่าสนใจแม้จะเป็นปัญหาง่ายๆก็ตาม ในกรณีนี้เราโชคดีที่มีขันที vimโดย Tim Pope ผู้ยิ่งใหญ่
ในคำพูดของตัวเองeunuch.vimให้
Vim sugar สำหรับคำสั่ง UNIX shell ที่ต้องการมากที่สุด ลบหรือเปลี่ยนชื่อบัฟเฟอร์และไฟล์ต้นแบบพร้อมกัน โหลด a
find
หรือ alocate
ลงในรายการ Quickfix และอื่น ๆ
สมบูรณ์แบบ. มีสิ่งที่เราต้องการรวมถึงเครื่องมือเพิ่มเติมหากเราใช้ระบบ UNIX
คำสั่งที่คุณกำลังมองหาคือ
:Remove!
:nnoremap <Leader>rm :Remove!<CR>
อีกครั้งแมปมันถ้าคุณต้องการมันมากเช่น
mv
, mkdir
, find
ฯลฯ ขอแนะนำให้
ฉันชอบความสามารถในการลบไฟล์จากภายในกลุ่ม แต่ฉันก็หวาดระแวงเช่นกันว่าจะลบงานสำคัญโดยไม่ได้ตั้งใจซึ่งไม่ว่าจะด้วยเหตุผลใดก็ตามยังไม่อยู่ภายใต้การควบคุมเวอร์ชัน ฉันพบว่าการรวมข้อมูลก่อนหน้านี้จาก @glts และ @accolade เข้ากับคำตอบเกี่ยวกับวิธีใช้confirm
คำสั่งเพื่อแจ้งก่อนออกจากกลุ่มนี้มีประโยชน์
เมื่อรวมสิ่งเหล่านี้เข้าด้วยกันฉันได้เพิ่มฟังก์ชันให้กับของฉัน~/.vimrc
ซึ่งจะแจ้งก่อนที่จะลบไฟล์และปิดบัฟเฟอร์และแมปกับคีย์ผสม:
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()
fun! DeleteFileAndCloseBuffer()
let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun
หากคุณเป็นคนที่หวาดระแวงการกดแป้นพิมพ์น้อยกว่าฉันคุณสามารถต่อท้าย<CR>
บรรทัดแรกได้
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
และต้องกดย้อนกลับเพียงครั้งเดียว
expand('%:p')
แทน@%
เมื่อคุณเขียนสคริปต์ (ในขณะที่ฉันรู้สึกยินดีที่คุณรวมคำใบ้ของฉันไว้ด้วย :) ผลประโยชน์ที่กระชับนั้นมีน้อยมากในสคริปต์ ที่สำคัญกว่า %:p
:) จะขยายชื่อไฟล์เป็นพา ธ สัมบูรณ์แบบเต็ม (ซึ่งอาจจะเป็นหรือไม่เป็นก็ได้) เพียงแค่%
คุณเสี่ยงเล็กน้อยที่จะลบไฟล์ชื่อเดียวกันในไดเรกทอรีอื่นแทนหากคุณลืมไป:cd
แล้ว
คุณสามารถทำได้ด้วยสองขั้นตอน:
บันทึกเป็นไฟล์ใหม่
: w newfilename
ลบไฟล์เก่า
! rm oldfilename
นี่อาจเป็นความคิดเห็นที่ไม่เป็นที่นิยม แต่ file tree explorer ของคุณ (Netrw / NerdTree) จะเป็นวิธีที่ง่ายและปลอดภัยที่สุดในการลบไฟล์ แม้ว่า OP จะไม่ได้ใช้ NerdTree แต่ปลั๊กอิน Netrw ในตัวก็จะทำงานได้เช่นกัน
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>
. คุณอาจต้องการเพิ่มคำตอบของคุณ