Thay đổi chế độ biên dịch thư mục hiện tại tự động?


16

Hiện tại, lệnh biên dịch của tôi như sau:

cd ~/somedir && ./somescript.sh

Điều này ngăn các emacs tìm tệp trong đó xảy ra lỗi (và mở nó).

Tất nhiên tôi có thể chạy M-x cdthủ công nhưng có cách nào để bảo bộ đệm thay đổi thư mục hiện tại của nó bằng lập trình không?


1
Đây cũng là điều mà tôi đã cố gắng thực hiện. Lý tưởng nhất, có một cái gì đó bạn có thể đặt vào .dir-locals.el trong thư mục cơ sở sẽ hoạt động (hack tôi đã thấy để đặt thư mục mặc định có gây ra tác dụng phụ không mong muốn và chỉ cài đặt nó cho chế độ biên dịch dường như làm việc).
Julian Squires

Câu trả lời:


7

Cuối cùng, tôi đã từ bỏ việc dựa vào thư mục hiện tại vì nó quá xâm phạm và những thứ khác như ido nơi kết thúc bị ảnh hưởng ...

Thay vào đó, tôi sử dụng thêm thư mục xây dựng của mình vào compilation-search-path

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

Tìm thấy trong câu hỏi này: Làm cách nào để điều chỉnh đường dẫn mà lỗi biên dịch-goto-lỗi của Emacs nhận được từ bộ đệm biên dịch?

Câu hỏi cũng giải thích rằng trình so khớp thư mục có thể tự động thay đổi thư mục nếu một số chuỗi cụ thể được phát ra:

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

Điều này cũng có thể tùy chỉnh rõ ràng.


Đây trông giống như một giải pháp mạnh mẽ. Nếu nó làm việc cho bạn, hãy chấp nhận nó.
Malabarba

Lưu ý rằng điều này có thể không hoạt động nếu bạn cần hệ thống xây dựng tìm một số tệp trong /path/to/build.
Andre Holzner

5

Bạn có thể chỉ cần tạo một bộ đệm Dired của thư mục mà bạn muốn gọi lệnh biên dịch, để phục vụ như một neo. Khi bạn muốn biên dịch, hãy chuyển sang bộ đệm Dired và chạy lệnh biên dịch. compilesẽ chạy lệnh của nó tại thư mục này của bộ đệm Dired. Ưu điểm của việc này là bạn không phải M-x cdhoặc duyệt qua các thư mục khi bạn muốn biên dịch.

Nếu bạn sử dụng projectile, nó có một lệnh có tên projectile-compiletự động chạy lệnh biên dịch tại gốc dự án được nhận dạng bởi projectile.


4

Lệnh thay thế này nên thực hiện thủ thuật:

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

Ngoài ra, sau khi bạn đã chạy trình biên dịch bằng compilelệnh thông thường , bạn có thể eval (setq default-directory "~/somedir")trong *compilation*bộ đệm. Điều đó sẽ làm cho điều hướng lỗi hoạt động, nhưng nó có thể dừng lại recompilevà bạn bè làm đúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.