หนึ่งในคุณสมบัติหลักที่ฉันพลาดเกี่ยวกับ Vim คือมันมักจะบันทึกชื่อไฟล์ของไฟล์ปัจจุบันใน%
บัฟเฟอร์ ( ข้อมูลเพิ่มเติม ) ที่อนุญาตให้เรียกใช้คำสั่งได้อย่างง่ายดายเช่น:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
ฉันต้องการที่จะมีฟังก์ชั่นที่คล้ายกันภายใต้emacs
(รุ่น 24 หากที่สร้างความแตกต่างใด ๆ ) คือมีวิธีที่ง่ายในการแทรกชื่อของไฟล์ที่เปิดในบัฟเฟอร์ปัจจุบัน
ตัวอย่างของสิ่งที่ฉันต้องการจะทำ
ที่นี่ฉันอธิบายกรณีการใช้งานพื้นฐานบางอย่างเพื่ออธิบายได้ดีขึ้นเมื่อฉันรู้สึกว่าจำเป็นต้องใช้ทางลัด
รวบรวม: เมื่อฉันป้อน
M-x compile
emacs ขอให้ฉันคำสั่งรวบรวม ฉันต้องการเข้าร่วมgcc (current-buffer)
ได้อย่างง่ายดายโหลดไฟล์: เมื่อฉันแก้ไขไฟล์. emacs ของฉันฉันต้องการโหลดทันทีเพื่อทดสอบการเปลี่ยนแปลง วิธีที่ฉันทำคือ
M-x load-file
จากนั้นฉันสะกดชื่อออกมา. e m a c sเสมอ ฉันต้องการทางลัดเปิดตัวกระบวนการภายนอก: ฉันให้
du -sh
เป็นตัวอย่างเพียงเพื่อแสดงให้เห็นว่าฉันต้องการทางลัดที่จะสามารถใช้ได้เมื่อฉันรันคำสั่งเชลล์ด้วยM-!
สิ่งที่ฉันพบจนถึง
- คำถามนี้ที่นี่ใน U&L คำตอบที่ให้โดยทั่วไปแล้วจะแสดงตำแหน่งที่จะค้นหาชื่อไฟล์ของบัฟเฟอร์เพื่อให้สามารถเพิ่มไปยัง kill-ring ได้ มันไม่ใช่สิ่งที่ฉันกำลังมองหาฉันไม่ต้องการฆ่าชื่อไฟล์ด้วยตนเองก่อนที่จะใช้ (วิธีแก้ปัญหาที่อธิบายไว้ในคำตอบทั้งสองนั้นดูเหมือนจะไม่ทำงานอย่างราบรื่นใน emacs ของฉันและต้องการการกดแป้นเพิ่มเติมทำให้พวกเขาเจ็บปวดเล็กน้อย)
แก้ไข : เล็กน้อยไม่เกี่ยวข้องโดยฉันพบว่าทำไมโซลูชั่นเหล่านี้ใช้งานไม่ได้ ฉันเปิดใช้งาน IDO ได้ดีขึ้นหรือแย่ลง
(current-buffer)
ฟังก์ชั่นที่อธิบายไว้ในคู่มือการใช้งานไม่กลับมาชื่อของแฟ้มในบัฟเฟอร์ปัจจุบัน แต่ไม่มีที่ไหนในตัวอย่างที่ผมให้ไว้ข้างต้นฉันประเมินรหัส Elisp มีวิธีแทรกผลลัพธ์ของการประเมินผลของฟังก์ชั่นนี้ในบัฟเฟอร์ (ขนาดเล็ก) และเชื่อมโยงทางลัดนี้หรือไม่?
ฉันผิดที่คิดแบบนี้
ขณะนี้ฉันกำลังเรียนรู้การใช้ emacs (ใช้เวลาไม่กี่เดือนจริง ๆ ) หลังจากใช้ Vim มาหลายปี ฉันต้องการหลีกเลี่ยงกับดักที่คาดเดาได้โดยใช้ emacs-in-a-Vim-way หากคุณรู้สึกว่าสิ่งที่ฉันขอไม่มากemacs-yและควรมีวิธีที่ดีกว่านี้ (สะอาดกว่านี้) โปรดพูดถึงมันในคำตอบของคุณ
(buffer-file-name)
ขณะที่คุณพิมพ์ใน minibuffer คุณจะได้รับnil
เพราะ(current-buffer)
เป็น minibuffer คุณสามารถสลับบัฟเฟอร์ขณะอยู่ใน minibuffer ได้เช่นกันดังนั้นจึงยากที่จะติดตามว่าบัฟเฟอร์ใดเป็นสิ่งที่คุณคิดว่าบัฟเฟอร์ปัจจุบันตามเวลาที่บัฟเฟอร์ปัจจุบันตามที่ Emacs เห็นมันเป็น minibuffer
(global-set-key (kbd "C-i") buffer-file-name)
หากคุณต้องการให้เป็น Ctrl + I เกี่ยวกับ. emacsM-x load-file RET
ทำในสิ่งที่คุณต้องการ; คุณไม่จำเป็นต้องเขียนอะไรเลย