如果具有一個Emacs緩衝這段代碼:Emacs的密切括號跳到編輯Clojure的代碼時,已有近括號
(if (> x 5
true
false))
當我嘗試對其進行編輯,以解決括號,東西很煩人的事情正在發生!當我嘗試向if條件添加右括號時,emacs會在'false'後將光標跳到右括號,而不是在5
之後添加新的括號。
這是部分模式的一部分,也許clojure模式?你知道我該如何解決這個問題?這有什麼用?
如果具有一個Emacs緩衝這段代碼:Emacs的密切括號跳到編輯Clojure的代碼時,已有近括號
(if (> x 5
true
false))
當我嘗試對其進行編輯,以解決括號,東西很煩人的事情正在發生!當我嘗試向if條件添加右括號時,emacs會在'false'後將光標跳到右括號,而不是在5
之後添加新的括號。
這是部分模式的一部分,也許clojure模式?你知道我該如何解決這個問題?這有什麼用?
這聽起來像你正在使用paredit。你是否像project page那樣安裝它?
至於它有什麼好處?這對編輯列表很有用。但是你必須購買 進入整個系統,或者你最終會很困惑。請參閱wiki 頁面。
您是否在~/.emacs.el
中有此部分?只要刪除它。
;; (require 'paredit) if you didn't install via package.el
(defun turn-on-paredit() (paredit-mode 1))
(add-hook 'clojure-mode-hook 'turn-on-paredit)
是的,paredit是「不同的」。它總是會確保你的括號平衡。見http://www.emacswiki.org/emacs/PareditCheatsheet。
對於您的代碼,將光標放在第一個右括號下方並按C左鍵。重複練習,它會移動到你想要的地方。
切割&粘貼(殺死&在emacs lingo中猛擊)也允許您使用平衡括號手動擰緊,所以直到您習慣於使用paredit,它可能會更容易使用。祝你好運!
如何在沒有信用的情況下進行clojure模式工作? customizationj組在這裏是什麼? – 2012-03-10 14:39:29
您可以鍵入C-h k)
而在你的Lisp緩衝區,看看有什麼)
必然。如果它被綁定到paredit-close-round
那麼yes paredit是罪犯。
嘗試auramo's answer in another thread
,或者如果不工作,試試這個:
(eval-after-load 'paredit
'(defalias 'paredit-mode 'ignore))
如果你是好奇什麼是在您的Emacs中觸發paredit模式,請使用M-x debug-on-entry RET paredit-mode RET
但是我仍然必須鼓勵你繼續使用paredit。讓我們繼續使用paredit,讓我們看看你提出的問題的解決方案。你問:「你知道我該如何解決這個問題嗎?」我只是假設你問如何解決,如果形式。 Marius Kjeldahl給你提供的解決方案,現在使用paredit-forward-barf-sexp
,現在一般情況下,如果你有一些Lisp代碼,你會發現一些parens在錯誤的地方,你想解決這個問題,你可以暫時禁用該緩衝區中的paredit模式(通過鍵入M-x paredit-mode
),然後修復您的代碼,然後再次啓用paredit模式(再次輸入M-x paredit-mode
)。另一件需要考慮的事情是Emacs已經撤消了,所以如果你通過某種行動到達(if (> x 5 true false))
,你可以撤消該行動並重新開始。如果使用CUA模式,則撤銷綁定到C-z
。
不過您可能會發現C-左,C-權的綁定是怪異的,所以你可能需要使用以下設置:「什麼是對這項有益的」
(eval-after-load 'paredit
'(progn
;; paredit-forward-barf-sexp is usually bound to <C-left>, C-}.
;; here we unbind it from <C-left>
;; so that one can continue to use <C-left> for movement.
(define-key paredit-mode-map (kbd "<C-left>") nil)
;; paredit-forward-slurp-sexp is usually bound to <C-right>, C-).
;; here we unbind it from <C-right>
;; so that one can continue to use <C-right> for movement.
(define-key paredit-mode-map (kbd "<C-right>") nil)
;; paredit-backward-kill-word is bound to M-DEL but not to <C-backspace>.
;; here we bind it to <C-backspace> as well
;; because most people prefer <C-backspace> to M-DEL.
(define-key paredit-mode-map (kbd "<C-backspace>") 'paredit-backward-kill-word)))
你問由你可能會問兩兩件事:
paredit-close-round
有用嗎?paredit-close-round
時)
它可能它勢必更好鍵?想paredit-close-round
最好的辦法是把它作爲一個對口C-M-u
。在以下代碼中將點移動到|
,然後嘗試按C-M-u
幾次以查看會發生什麼,然後再次將點指向|
,並嘗試按C-M-- C-M-u
(即在控制和Alt打開時鍵入-u
)以查看會發生什麼情況。
(when t
(when t
(blah)
(blah))
(when t
(blah | blah)
(blah))
(when t
(blah)
(blah)))
C-M-u
用於選擇表達式;爲了選擇一個或多個封閉表格,您幾次按C-M-u
,然後C-M-SPC
幾次。 C-M-- C-M-u
對評估封閉表單很有用;您先按C-M-- C-M-u
幾次,然後按C-x C-e
來評估封閉表格。
paredit-close-round
基本上做什麼C-M-- C-M-u
。
爲什麼paredit將)
綁定到除了簡單插入關閉paren之外的其他操作的命令?因爲你不應該自己插入右括號。每當你插入一個開放的文件,一個關閉的文件也會自動插入。無論何時您想將(blah) (blah)
更改爲((blah) (blah))
,只需選擇兩個等值表格並按(
即可。
謝謝!我從marmelade el存儲庫安裝了clojure-mode,我通過clojure-jack-in將它與leiningen項目一起使用。稍後我會確認這是否真的是一個信用問題,然後將此答案標記爲正確。 – 2012-03-10 13:19:48
如何在沒有信用的情況下進行clojure模式工作? customizationj組在這裏是什麼? – 2012-03-10 14:39:00
它看起來不像'package.el'自動加載paredit,你必須爲它添加一個自定義。 – 2012-03-10 15:16:40