การเปลี่ยนไดเร็กทอรีการรวบรวมโหมดปัจจุบันโดยอัตโนมัติ?


16

ปัจจุบันคำสั่งรวบรวมของฉันมีดังนี้:

cd ~/somedir && ./somescript.sh

วิธีนี้จะป้องกัน emacs จากการค้นหาไฟล์ที่เกิดข้อผิดพลาด (และเปิดไฟล์)

แน่นอนฉันสามารถเรียกใช้M-x cdด้วยตนเอง แต่มีวิธีบอกบัฟเฟอร์ให้เปลี่ยนไดเรกทอรีปัจจุบันโดยทางโปรแกรมหรือไม่


1
นี่คือสิ่งที่ฉันพยายามทำเช่นกัน จะเป็นการดีที่มีบางสิ่งที่คุณสามารถใส่ใน. dir-locals.el ในไดเรกทอรีฐานที่ใช้งานได้ (แฮ็คที่ฉันเคยเห็นเพื่อตั้งไดเรกทอรีเริ่มต้นทำให้เกิดผลข้างเคียงที่ไม่พึงประสงค์และการตั้งค่าสำหรับโหมดการรวบรวมเท่านั้น ดูเหมือนจะใช้งานไม่ได้)
Julian Squires

คำตอบ:


7

ในที่สุดฉันละทิ้งอาศัยไดเรกทอรีปัจจุบันเพราะมันล่วงล้ำเกินไปและสิ่งอื่น ๆ เช่น ido ที่สิ้นสุดได้รับผลกระทบ ...

แต่ฉันใช้เพิ่มไดเรกทอรีสร้างของฉันไป compilation-search-path

(add-to-list 'compilation-search-path "/path/to/build")

พบในคำถามนี้: วิธีการปรับเปลี่ยนเส้นทางที่ Emacs 'รวบรวมรวบรวมข้อผิดพลาดได้รับจากการรวบรวมบัฟเฟอร์?

คำถามยังอธิบายว่าตัวจับคู่ไดเรกทอรีสามารถเปลี่ยนไดเรกทอรีได้โดยอัตโนมัติหากมีการปล่อยสตริงเฉพาะ:

Entering directory `...'
... 
Leaving directory `...'

เห็นได้ชัดว่ายังกำหนดเองได้


ดูเหมือนว่าโซลูชันที่แข็งแกร่ง ถ้ามันเหมาะกับคุณรู้สึกอิสระที่จะยอมรับมัน
Malabarba

/path/to/buildโปรดทราบว่านี้อาจไม่ทำงานถ้าคุณจำเป็นต้องสร้างระบบค้นหาไฟล์บางอย่างใน
Andre Holzner

5

คุณสามารถสร้างบัฟเฟอร์ Dired ของไดเรกทอรีที่คุณต้องการเรียกใช้คำสั่งคอมไพล์เพื่อใช้เป็นจุดยึด เมื่อคุณต้องการคอมไพล์ให้เปลี่ยนเป็นบัฟเฟอร์ Dired และรันคำสั่งคอมไพล์ compileจะเรียกใช้คำสั่งที่ไดเรกทอรีนี้ของบัฟเฟอร์ Dired ข้อดีของการทำเช่นนี้คือคุณไม่จำเป็นต้องทำM-x cdหรือสำรวจไดเรกทอรีเมื่อคุณต้องการคอมไพล์

หากคุณใช้projectileจะมีคำสั่งชื่อprojectile-compileที่รันคำสั่งคอมไพล์ที่รูทโปรเจ็กต์ที่รู้จักโดยprojectileอัตโนมัติ


4

คำสั่งทางเลือกนี้ควรทำเคล็ดลับ:

(defun compile-in-dir (dir command)
  (interactive "DCompile in directory: \nsCommand: ")
  (let ((default-directory dir))
    (compile command)))

อีกวิธีหนึ่งหลังจากที่คุณเรียกใช้การคอมไพล์โดยใช้compileคำสั่งปกติคุณสามารถ eval (setq default-directory "~/somedir")ใน*compilation*บัฟเฟอร์ นั่นควรทำให้การนำทางข้อผิดพลาดทำงานได้ แต่มันอาจหยุดrecompileและเพื่อนทำสิ่งที่ถูกต้อง

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