① 怎樣用.emacs.d管理emacs
在linux環境下,只要將.emacs.d放置在自己的家目錄即~下,emacs啟動時就會自動尋找該目錄下的版init.el文件,並權執行裡面的指令。也就是說,你在網上看到的那些加入.emacs文件里的配置,完全可以不用任何改變的就加入init.el裡面。當然,.emacs.d裡面還可以自己創建幾個文件夾,自己寫其他el文件,自己載入這些el文件。不過這需要一定的elisp基礎。
② 怎麼使用emacs編寫c語言程序,並編譯運行之
學習C/C++的朋友有沒有想過完完全全的在Linux環境下開發軟體!?我想過,可能是因為個人對Windows平台有些偏見,或者說個人不是非常喜歡
在Windows下寫程序的感覺,總覺得有那麼一層膜隔閡著我們,不像Linux,可以做強大的伺服器,在終端下只需要使用簡簡單單的命令便能完成相當復
雜的事情,是不是感覺很高深!?還有很多很多開源項目,Emacs也算一個吧!!!
呵呵,談到在Linux下編程,我們不得不提這兩款編輯器:vi/vim和Emacs(確切的說Emacs的功能已經遠遠超出了編輯器,使用它我們可能收
發郵件,玩游戲,排版等等)。Emacs的強大不得不讓我們對設計出該編輯器的大師們發出崇高的敬意和贊嘆,Emacs強大之處不僅僅局限於編輯功能,還
提供的許多自定義選項,還有我們可以不需要動滑鼠便可完成日常工作(對於大多數人來說這可能不太現實),下面我只是簡要的介紹如何使用Emacs編譯/運
行C/C++程序,文中相關命令可以參考本人其他博文。
Emacs有很多版本,如Gnu Emacs、XEmac等等。而且Emacs在各個平台下均能表現的非常出色,前提是你要熟悉它。
首先,再次說明本人所使用的操作系統是rhel 6.2,已經安裝GNU Emacs 23.1.1和gcc version
4.4.6,注意Emacs只是一個編輯器,在我們程序員看來(其實我們也可以將其看作IDE,如果使用的比較熟練的話),最起碼對於我這種菜鳥來說,還
不能十分熟練的玩轉Emacs,它實在是太強大了,以至於有很多知識需要去記憶(不僅僅是快捷鍵)。
OK,不啰嗦了,下面進入正題:
1.啟動Emacs,在終端輸入「emacs&」命令後回車(你也可以輸入「emacs」命令,不過當你在使用Emacs的時候,當前終端
就不為你工作了;並且如果你熟練使用Emacs的話也可以輸入「emacs
-nw」命令以啟動非X視窗下的Emacs),至於後面為什麼要加一個「&」符,這是Linux裡面的基本知識,加上「&」符後會在當前
終端下產生一個子進程以運行Emacs而不會對當前終端的工作造成任何影響,這里我們鍵入「emacs –nw」命令,啟動界面如圖1所示;
圖1 鍵入「emacs –nw」命令後,Emacs的啟動界面
2.打開/新建文件,進入Emacs界面後,鍵「C-x
C-f」以打開/創建一個新的文件(如圖2所示),建議以C/C++語言里所規定的擴展名來指定創建的文件的擴展名,雖然在Linux下面我們不是十分強
調文件的擴展名,但是如果你選擇正當的擴展名的話,將有助於高亮代碼,並且Emacs會根據我們創建的文件的擴展名以進行不同語言(要知道,Emacs不
只是為了C/C++程序員設計的)編碼風格的縮進;
圖2 鍵「C-x C-f」,輸入文件名以打開/創建一個新的文件
3.編輯文件,鍵「C-x C-s」存檔,本人測試的代碼如下:
[cpp] view plain
#include
int main( ) {
std::cout << "Hello, Emacs!!!"
<< std::endl;
}
4.編譯文件,這里我介紹兩種方法。
法1:常規方法,參考Learning Gnu
Emacs,我們可以這樣做:鍵「M-x」,此時在minibuffer中會顯示「M-x」字樣,輸入「compile」命令後默認會顯示
「Compile command: make -k」字樣,此時把「make -k」刪除後,運行相關編譯命令(如現在我們應該鍵入「g++
test.cpp –o test」),如圖3所示;
圖3 minibuffer下鍵入「g++ test.cpp –o test」命令以編譯源文件
法2:我想大多C/C++程序員會選擇第二種編譯方法,同樣的,鍵「M-x」,輸入「eshell」或「shell」命令,進入「eshell」或
「shell」緩沖區,這里我們鍵入的命令是「eshell」,然後同樣的鍵入「g++ test.cpp –o
test」命令以編譯源文件,如圖4所示;
圖4 eshell下鍵入「g++test.cpp –o test」命令以編譯源文件
5.運行編譯後的可執行文件,同樣的按照第4步中的打開eshell緩沖區,輸入相關命令即可執行編譯後文件,這里我們應該輸入「./test」命令,如圖5所示。
圖5 輸入「./test」命令以執行編譯後文件
注意:當我們進入其他緩沖區後,再想切換到編輯過的緩沖區可以鍵入「C-b
buffername」以切換到目的緩沖區。注意編輯(修改)後的緩沖區的名字格式為「*buffername*」,如上面我們切換到
「test.cpp」緩沖區應該buffername應為「test.cpp」,在我們打開「eshell」緩沖區之前我們已將其保存過了,切換到
「test.cpp」後再想切換到之前打開的「eshell」緩沖區的buffername應為「*eshell*」,這個緩沖區我們修改過了;
③ Emacs基本的按鍵與命令
C- :表示鍵盤上的 Ctrl 鍵
M- :表示鍵盤上的 Alt 鍵
S- :表示鍵盤上的 Shift 鍵
DEL :表示鍵盤上的 Backspace 鍵,注意,不是 Delete 鍵
RET :表示鍵盤上的 Enter 鍵
SPC :表示鍵盤上的 Space 鍵
ESC :表示鍵盤上的 Esc 鍵
TAB :表示鍵盤上的 Tab 鍵
C-x C-f :打開一個文件,或者創建一個不存在的文件
M-x find-file :作用同上
C-x k :關閉一個 buffer ,作用等於關閉已經打開的文件
C-x C-s :保存文件內容,即將修改的文件內容寫入磁碟
M-x save-buffer :作用同上
C-x C-w :將當前文檔保存為另一個文件,即另存為
M-x write-file :作用同上
C-x b :切換文件,即切換緩沖區 buffer
說明:實際上在 Emacs 中,文件與 buffer 是不同的實體,文件一般指的是磁碟上的數據體,而 buffer 是 Emacs 中作為文件修改臨時緩存的緩沖區,注意區別。
Emacs具有一個被稱為 ido 的模式,全稱為 interactively do things ,在 ido 模式下,可以更加方便地選擇列表元素,相比使用Tab進行自動補全更加便利。
M-x ido-mode :使能或者禁止 ido 模式
可以在 Emacs 的啟動配置中添加以下語句,以默認打開 ido 模式:
(setq ido-enable-flex-matching t) (setq ido-everywhere t) (ido-mode 1)
C-x C-b :列出buffer列表
M-x list-buffers :作用同上
在 Emacs 中,還存在功能更靈活的 buffer 管理模式,被稱為 ibuffer 。可以通過以下命令進入 ibuffer :
M-x ibuffer :進入 ibuffer 管理模式
一般我們可以在Emacs的配置文件中進行ibuffer的命令鍵綁定:
(global-set-key (kbd "C-x C-b") 'ibuffer)
ibuffer 的過濾命令包括:
/m :以 major mode 方式添加過濾
/n :以 buffer 名稱的方式添加過濾
/c :以 buffer 內容的方式添加過濾
/f :以文件名稱的方式添加過濾
/> :以 buffer 大小的方式添加過濾
/< :以 buffer 大小的方式添加過濾
// :刪除當前所有有效的過濾
ibuffer 的過濾組的命令包括:
/g :創建一個過濾組
TAB :移動到下一個過濾組
M-p :移動到上一個過濾組
/ :刪除當前所有的過濾組
/S :將當前過濾組保存為一個名稱
/R :恢復之前保存的過濾組
/X :刪除之前保存的過濾組
ibuffer的排序命令包括:
s a :以字母順序排序
s f :以文件名稱順序排序
s v :以上次訪問時間排序
s s :以 buffer 大小排序
s m :以 major mode 排序
s i :反序當前的 buffer 順序
可以在文件的任何地方設置書簽,後續可快速跳轉到書簽處,書簽相關的命令為:
C-x r m :在當前游標處設置書簽,需輸入書簽名稱
M-x bookmark-set :作用同上
C-x r b :跳轉到某個書簽處
M-x bookmark-jump :作用同上
C-x r l :列出當前所有的書簽列表
M-x bookmark-bmenu-list :作用同上
在書簽列表狀態下,可以使用以下的命令:
RET :打開書簽標識的區域
s :將當前書簽列表保存至文件中
r :修改游標所在的書簽的名稱
d :將書簽打上刪除標識
x :刪除已打標識的書簽
u :取消已經打標識的書簽
主要的游標移動操作命令包括:
C-f :向前移動一個字元, f 表示為 forward
C-b :向後移動一個字元, b 表示 backward
C-p :向上移動一行, p 表示 previous
C-n :向下移動一行, n 表示 next
C-a :移動至行首
C-e :移動至行尾
M-f :向前移動一個單詞
M-b :向後移動一個單詞
C-v :向前滾動一個屏幕的內容
M-v :向後滾動一個屏幕的內容
M-a :移動至句首
M-e :移動至句尾
C-l :將游標重定位至屏幕中間一行,游標所在內容位置不變
M-r :將游標重定位至屏幕的頂部,中部,底部,游標所在內容位置不變
M-< :移動至 buffer 的開頭處,注意,按鍵 < 可能需要 Shift 鍵
M-> :移動至 buffer 的結尾處,注意,按鍵 > 可能需要 Shift 鍵
M-g c n :移動至第 n 個字元
M-g g n :移動至第 n 行(高於23.2版本的 Emacs 有效)
C-M-f :向前移動一個整的表達式,比如,游標可從函數開頭的左 { 處移動到函數結尾的 } 處,按鍵綁定的命令是 forward-sexp
C-M-b :向後移動一個整的表達式,比如,游標可從函數結尾的右 } 處移動到函數開頭的 { 處,按鍵綁定的命令是 backward-sexp
C-M-k :剪切一個整的表達式,按鍵綁定的命令是 kill-sexp
C-M-@ :選擇一個整的表達式,按鍵綁定的命令是 mark-sexp
在 Emacs 中, kill 的意思就是 cut ,即剪切,剪切操作的命令包括:
C-d :剪切當前游標所在的字元
C-S-DEL :剪切整個行, DEL 就是鍵盤上的 Backspace 鍵
M-d :剪切游標當前位置至詞結尾的內容
M-DEL :剪切游標當前位置至詞開頭的內容
M- :剪切游標所在的所有空白符
M-SPC :剪切游標所在的所有空白符,除了游標所在的位置
C-k :剪切游標當前位置至行尾
M-k :剪切當前的整個句
C-y :粘貼操作
一般在 Emacs 中,默認的選擇操作,需要使用 C-SPC 按鍵,但是通常在 Win 中,此按鍵與系統默認的切換輸入法的按鍵沖突,如果無法修改系統的按鍵,則可以修改 C-SPC 按鍵,在 Emacs 的啟動腳本中添加以下的語句:
(global-unset-key (kbd "C-SPC")) (global-set-key (kbd "M-SPC") 'set-mark-command)
以下以 M-SPC 作為默認的選擇命令:
M-SPC :以游標所在位置為起點,移動游標,所選區域被高亮選中
C-w :剪切高亮選中的區域
M-w :復制高亮選中的區域
C-y :粘貼高亮選中的區域
C-/ :撤銷操作
C-x u :作用同上
Emacs 具有多種查找方式。
增量查找 :通過按鍵 C-s 來執行增量查找,反復執行 C-s ,可逐個定位各個匹配點。
C-s :執行增量查找,輸入查找字元後,重復執行 C-s 可逐個定位匹配點,按鍵綁定的命令是 isearch-forward
C-r :執行增量查找,是從文檔的後端往前查找,重復執行 C-r 可逐個定位匹配點,按鍵綁定的命令是 isearch-backward
C-u C-s :按照正則表達式執行增量查找
Occur查找 :使用增量查找,若匹配點比較多,只能通過反復執行按鍵,逐個越過各個匹配點,才能定位到我們需要的匹配點,為了解決這個問題, Emacs 提供了 Occur 查找,執行後,可在 Occur 緩沖區列出一個匹配點的列表,可更加直觀地查看所有的匹配點。
M-s o :執行Occur查找
M-g n :定位到下一個匹配點
M-g p :定位到上一個匹配點
在 Occur 緩存區,可以執行的命令主要包括:
C-n :移動至下一行
C-p :移動至上一行
o :跳轉至匹配點,游標也移動至匹配點
C-o :跳轉至匹配點,但是游標還停留在 Occur 緩沖區
e :編輯當前的 Occur 緩沖區
C-c C-c :退出編輯 Occur 緩沖區
M-% :執行查找替換,該命令需要兩個輸入,即需要被替換的字元串,與替換後的字元串。輸入字元串後執行 RET , Emacs 會詢問是否確定執行替換操作,若輸入 ! ,則執行所有匹配點的替換,若輸入 yes ,則只執行當前游標所在的匹配點的替換。注意,輸入 % 可能需要執行 Shift 鍵
C-x 2 :將當前窗口切為上下兩個窗口,該按鍵綁定了命令 split-window-below
C-x 3 :將當前窗口切為左右兩個窗口,該按鍵綁定了命令 split-window-right
C-x o :在多個窗口之間切換,注意,按鍵中的是小寫字母 o ,該按鍵綁定了命令 other-window
C-x 1 :關閉其他的窗口,只保留當前游標所在的窗口
Emacs 具有一個內置的 Dired 模塊,是 Directory Editor 的簡稱,顧名思義,該模塊是對目錄進行管理編輯的模塊。
Dired 模塊的主要命令包括:
C-x d :選擇一個目錄,並在那個目錄上啟動 Dired
C-x C-f :選擇當前目錄下的某個目錄,並在那個目錄上啟動 Dired
在 Dired 目錄下可以執行:
n :向下移動一個
p :向上移動一個
C-s :使用增量查找,查詢 Dired 入口
C-x C-f :創建一個新的文件
f :打開游標所在的文件
e :作用同上
RET :作用同上
o :在另一個窗口上打開游標所在的文件
C-o :在另一個窗口上打開游標所在的文件,但是游標不會移動到新的窗口
v :以只讀的方式打開文件
^ :在新的Dired Buffer中打開父目錄
m :標識文件或者目錄入口
%m :標識那些名稱匹配正則表達式的文件
%g :標識那些內容匹配正則表達式的文件
C :拷貝文件(或者是 S-c ),拷貝的是當前游標所在的文件,或者已經標識的文件
R :移動文件(或者是 S-r ),移動的是當前游標所在的文件,或者已經標識的文件
H :創建一個硬鏈接(或者是 S-h )
S :創建一個符號鏈接(或者是 S-s )
M :改變文件的許可權位(或者是 S-m ),改變的文件是當前游標所在的文件,或者已經標識的文件
d :將文件打上刪除的標識
u :刪除文件已經打上的標識
x :確認並執行刪除已經打上刪除標識的文件
~ :給所有的 backup 文件打上標識
= :比較文件
④ emacs 的配置文件.emacs我改了之後有的時候怎麼沒效果啊。還有.emacs.d的那個文件夾有什麼用啊
確實問的亂。要想學emacs,emacs lisp 是必學的。那些定製的東西都是 emacs lisp 寫的。
如果不懂emacs lisp,不可能用好emacs.
關於怎麼學習emacs,如果有一點英文基礎,建議看 emacs 的官方文檔。官方文檔寫的很好懂,而且一直都是有在維護的。
閱讀emacs文檔和emacs lisp 文檔,可以使用emacs或者info工具。
在emacs裡面 C-h i m emacs RET
如果用 info 來讀,在終端輸入 info emacs
emacs lisp 的文檔類似,在emacs裡面: C-h i m elisp RET
在終端則是 info elisp
=======================================================
>> 按M-!是的shell mode 用gcc 說沒有這個命令。
這個要改的不是PATH,而是 exec-path
(add-to-list 'exec-path "<到gcc的路徑放在這里>")
exec-path 通常是會參考 PATH 變數的,但是你的情況應該兩者不同。你可以檢查一下是不是不同。
>> 比如說php-mode 改tab 縮進到底是在php-mode.el里改還是在.emacs改
當然是推薦在.emacs改。這樣方便更新php-mode.el。
emacs 和 elisp 簡短的教程沒什麼用的,一定要看完整的文檔才能理解精髓。學emacs是一個大工程,沒有什麼捷徑,先把基礎的學會,剩下的慢慢學。不要想一開始就什麼都完全按需定製,先用默認的配置上手。如果適應不了,轉大型IDE也是明智的選擇。