2012-06-08 18 views
13

Biên dịch M-x Emacs không thấy bất kỳ bí danh nào được đặt trong .bashrc. Nếu tôi sử dụng M-x shell thì gõ bí danh, nó là tốt. Tôi đã thử tìm nguồn cung ứng .bashrc từ/etc/profile, từ ~/.profile, ~/bash_env, bất cứ điều gì tôi có thể nghĩ đến không có kết quả.Chế độ biên dịch Emacs sẽ không thấy bí danh bash

Tôi đang sử dụng Emacs 23 và Ubuntu 11. Tôi bắt đầu các emacs bằng/usr/bin/emacs% F, từ nút trên máy tính để bàn.

Bất kỳ ý tưởng nào?

Trả lời

16

Emacs thừa hưởng của nó môi trường từ quá trình cha mẹ. Làm thế nào bạn gọi Emacs - từ dòng lệnh, hoặc một số cách khác?

gì sẽ xảy ra nếu quý vị:

Mx biên dịch RETCk bash -i -c your_aliasRET

Gọi bash như một vỏ tương tác (-i tùy chọn) nên đọc bí danh .bashrc của bạn.

Chỉnh sửa: Tôi nghĩ cả hai M-x vỏ lệnh và M-x biên dịch thực hiện các lệnh trong một vỏ kém qua gọi quá trình. Hãy thử như sau trong emacs của bạn (hoặc chỉ đánh giá):

(setq shell-file-name "bash") 
(setq shell-command-switch "-ic") 

Tôi nhận thấy rằng sau khi đánh giá những điều trên, .bashrc bí danh được đón để sử dụng bởi cả hai Mx vỏ lệnh và Mx biên dịch , tức là

Mx biên dịch RETyour_aliasRET

sau đó sẽ hoạt động.

Môi trường của tôi: Emacs 24.1 (pretest rc1), OSX 10.7.3

+0

lệnh setq hoạt động. bạn da man! – user423805

+0

Cảnh báo: đối với tôi, điều này có tác dụng phụ của việc thực hiện tự động hoàn thành.el chạy cực chậm. Có lẽ nó là nhiều lần tạo bash shells ở đâu đó và chạy toàn bộ .bashrc của tôi mỗi lần. Tôi có thể thử viết một trình bao bọc xung quanh biên dịch tạm thời thay đổi shell-command-switch thành "-ic". – dshepherd

+0

(về 'shell-command-switch" -ic "') Không, nó KHÔNG làm việc với 'shell-command'. Ubuntu 16.04, emacs 24.5. Có lỗi in ra: "bash: không thể thiết lập nhóm quá trình đầu cuối (-1): ioctl không phù hợp cho thiết bị. bash: không có kiểm soát công việc trong vỏ này". Nếu tôi xóa tùy chọn '-i' khỏi' shell-command-switch', '.bashrc' với các bí danh được định nghĩa không được tải. Xem http://emacs.stackexchange.com/questions/3447. Lời khuyên "Emacs thừa hưởng môi trường của nó từ quá trình cha mẹ" có vẻ tốt đẹp và làm việc với 'bí danh xuất khẩu BUT trong subshells không hoạt động! Xem http://superuser.com/questions/319538 – d9k

1

Tôi nghĩ rằng các lệnh biên dịch không được diễn giải thông qua một trình bao: chúng được thực thi bởi các emacs (có nghĩa là các bí danh, hàm vỏ và các thứ đặc trưng khác không được tính đến).

Cố gắng bọc lệnh biên soạn của bạn vào một kịch bản lệnh shell để cung cấp môi trường chính xác.

Bạn có thể làm điều này bằng với một vỏ kịch bản full-fledged theo hình thức

#!/bin/bash 
source "~/.bashrc" 
my_command 

hoặc trực tiếp trong emacs với một lệnh biên soạn dưới dạng

bash -c "source ~/.bashrc; my_command"

+0

Francesco, tôi đã thử điều bash -c trên lệnh biên dịch và kết quả tương tự: bash: [bí danh của tôi]: lệnh không tìm thấy – user423805

+0

Không cần phần bash -c; chỉ cần thêm "source /home/$USERNAME/.bashrc &&" trước bất kỳ lệnh nào khác trong biến biên dịch lệnh. Tôi đang sử dụng bản thân mình và nó hoạt động khá tốt. – elemakil

+0

Tôi có bí danh tên là run_csv. Tôi đã làm như bạn đã hỏi, nguồn /home/[ME]/.bashrc && run_csv. Kết quả là/bin/bash: run_csv: lệnh không tìm thấy – user423805

3

Keith hoa nhưng có thể dẫn đến một số chậm trễ do .bashrc được nạp không cần thiết ở những nơi khác (có lẽ rất nhiều lần, máy tính của tôi không phải là chính xác dưới-powered nhưng emacs gần như không sử dụng được khi cố gắng sử dụng autocomplete.el).

Một cách khác là sửa đổi cục bộ shell-command-switch chỉ dành cho các chức năng cần thiết. Điều này có thể được thực hiện bằng cách sử dụng tính năng "lời khuyên" của emacs để tạo ra một trình bao bọc xung quanh các chức năng đó. Dưới đây là một ví dụ mà sửa đổi compile:

;; Define + active modification to compile that locally sets 
;; shell-command-switch to "-ic". 
(defadvice compile (around use-bashrc activate) 
    "Load .bashrc in any calls to bash (e.g. so we can use aliases)" 
    (let ((shell-command-switch "-ic")) 
    ad-do-it)) 

Bạn cần phải viết "Lời khuyên" tương tự cho từng chức năng mà bạn muốn sử dụng .bashrc (ví dụ: Tôi cũng cần thiết để xác định những lời khuyên tương tự cho recompile), chỉ cần sao chép trên và thay thế compile ở trên bằng một tên hàm khác.

Các vấn đề liên quan