2009-07-01 23 views
4

我通常在我的暫存緩衝區中使用elisp代碼。我發現用這種方式移動遊標的elisp代碼很難玩,因爲我不知道如何分離用於編輯代碼的緩衝區和用於測試代碼的緩衝區。如何輕鬆實驗涉及移動光標(插入符號)的elisp代碼?

例如,如果我想用下面的代碼打:

(backward-up-list 1) 
(backward-sexp 1) 
(kill-sexp 2) 

searching with intelligent bracket counting elisp,我想一次運行一行,看看每一行做了什麼。但是,代碼將插入代碼的臨時緩衝區中的插入符號移走,並且我已經使用該插入符編輯或運行代碼。另一個問題是該代碼應該在TeX文檔上進行測試,而我的暫存緩衝區不是TeX文檔。

這一切都歸結爲如何分開畫家和繪畫。

雖然在這個例子中,只要看看C-h f手冊就足以理解正在發生的事情。但那只是因爲這個示例代碼很簡單。

回答

5

編譯與edebug函數(C-u C-M-x代替C-M-x),切換到緩衝試驗中,通過調用M-在調試器的功能:然後單步(n)。

否則,學會思考更大的塊,然後用M-:在你的測試緩衝區中進行測試。這是我爲幾乎所有事情做的,包括非常複雜的代碼,如cperl-mode

3

除了M-:(即,eval-expression),也請看with-selected-window。它在給定窗口的上下文中執行它的主體。例如,假設您有兩個窗口,則

(with-selected-window (next-window) 
    (backward-up-list 1)) 

將在其他窗口中執行backward-up-list操作。

1

我發現了一些其他解決方法(與選擇的窗口類似)

使用設置緩衝器與progn這個:

(progn 
    (set-buffer "edithere.el") 
    (insert "hello") 
    (beginning-of-line)) 

緩衝區的名字edithere.el必須存在。按C-M-x評估預後形式。你也可以使用let。當你想編寫一個編輯緩衝區或移動光標的命令時,而不是以「(defun ...)」開始,你可以從上面的「(progn ...」開始,一旦完成,改爲defun。

與電流緩衝使用:(按CMx的評估與電流緩衝形式)

(with-current-buffer "edithere.el" 
    (insert "hello") 
    (beginning-of-line)) 
0

CX 4 F鍵入文件名:foo.el把你的代碼中有和測試在那裏,Lot比*scratch*緩衝區(Emacs-Lisp模式,比如一件事)更好,並且您可以更輕鬆地保存您的工作。