2014-11-02 75 views
0

我可以用Emacs打開單個文件,沒問題。但我習慣了Linux上的Emacs,在那裏打字emacs test.cpp &會打開一個新的Emacs框架,讓終端免費。但是,在OS X上,當我嘗試用emacs test.cpp &打開一個新框架時,終端顯示已創建一個進程,但窗口無法彈出。如果我按Ctrl + C,終端顯示「已停止」,但我看到該進程仍在運行,因爲我可以在任務監視器中看到它。無法在Mac上使用Emacs打開多個文件

如何解決這個問題?謝謝!

+0

您使用的是哪個版本的emacs? OSX附帶的非GUI版本(位於'/ usr/bin/emacs'),還是您安裝了GUI版本?首先你說你調用'emacs test.cpp'(這是非GUI版本),但是你會說彈出一個窗口(GUI版本)。 – Juancho 2014-11-02 20:17:38

+0

'&'是用於在後臺創建新進程;它與打開零個,一個或多個文件無關。要讓Emacs回到前臺,請鍵入'fg'。要打開多個文件,請嘗試'emacs test.cpp test2.cpp test3.cpp'等。 – echristopherson 2014-11-03 00:46:34

+0

@Juancho我用自制軟件安裝了Emacs(24.4)的GUI版本,並修改了PATH。當我輸入「哪個emacs」時,它顯示「/ usr/local/bin/emacs」,所以我認爲每次都會調用Emacs的這個版本,但我不確定。順便說一句,我沒有用OSX刪除舊版本。 – user3156285 2014-11-03 04:02:28

回答

1

這裏的問題是,在Linux命令emacs一般只是Emacs的二進制文件本身,這將打開一個新的幀(這是與Emacs說話X11或其他GUI窗口),除非您指定的命令行上-nw;相比之下,Homebrew提供的emacs命令是一個shell腳本,它調用/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs -nw "[email protected]"(替換爲​​安裝的版本)。所以Homebrew版本作爲終端應用程序啓動。

您可以製作一個只運行/usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs "[email protected]"的shell腳本,它的行爲會與您期望的相似,只不過您會啓動一個全新的Mac應用程序實例,這會導致額外的Emacs圖標出現碼頭。這樣的事情不被認爲是「像Mac一樣」,但它不是世界末日。

另一種在不同操作系統中使用很多的解決方案是使一個Emacs進程成爲服務器,然後使用emacsclient從命令行打開文件。 Emacsclient可以打開當前終端中的文件,新框架(GUI窗口)或Emacs的現有實例。對於要作爲服務器運行的Emacs實例,只需要在其中運行M-x server-start,或者將(server-start)放入init文件(〜/ .emacs或〜/ .emacs.d/init.el)中。

我的Emacs配置有這個片段中,它會自動啓動服務器模式,當我啓動GUI應用程序:

(when (display-graphic-p) 
    (server-start)) 

然後,一旦Emacs的運行(你可以讓它在系統偏好設置自動啓動登錄時>用戶&組>登錄項目),輸入emacsclient -nw test.cpp打開終端中的文件,或者在現有幀中打開emacsclient test.cpp &,或打開emacsclient -c test.cpp &以打開新幀。 (請注意,如果您在現有框架中打開它,你用C-x #關閉緩存,但不關閉框架,而不是C-x C-c

注意,終端emacsclient命令我把剛纔沒有用&但GUI的確做到了。 &在命令行結束時將進程置於後臺,這意味着它不是壟斷你的終端。無論出於何種原因(可能是因爲在後臺運行全屏終端應用程序並不明智),當您調用終端版本的Emacs &時,它只會暫停。如果您在Emacs中按C-z,也會發生同樣的情況。要回到前臺,請鍵入fg(實際上,您可以有多個後臺進程,在這種情況下,fg只會選擇最新的進程,除非您指定了作業說明符;請參閱bash的手冊頁(man bash)並搜索JOB CONTROL如果你對細節感興趣)。

+0

它的工作原理,非常感謝!看起來我需要習慣這種風格,因爲我總是用C-x C-c殺死「服務器」。 – user3156285 2014-11-04 06:24:39

相關問題