2011-10-10 5 views
4

私が使用しているモードの中には、emacsが引用符、括弧などのいくつかの要素を自動的に閉じることによって助けてくれます。インテリジェントな自動閉鎖文字

しかし、何度か、習慣の中で私は自分自身で閉じる要素を入力し、())または"""となります。

余分なキーを無視するようにemacsを設定するにはどうすればよいですか?

答えて

8

から取られ、autopairとして、この問題に対する標準的なソリューションを浮上しています。それはあなたが求めるすべてを行い、いくつかのことは、あなたが望んでいることを知らなかった。 Emacs wiki entry

のEmacs 24は、(現在は試験前に)電気ペアリングパッケージに予め包装されます。オートペアールは、組み込みのものよりもずっと洗練されています。

+0

非常に良好です。私の答えはあなたがリンクしたのと同じwikiページから来ましたが、実際にコードを拾ったときは思い出せません。クイックテストからは、autopairs.elのように動作し、同時に多くの機能を提供します。ありがとう! – Tyler

+0

autopair.elの長いユーザーとして、Emacs 24の組み込みの電気的なペアリングのサポートはほとんど劣っていると言えます。 –

+0

私は行方不明になっているかもしれませんが、ここで "(|)"のバックスペースはペアを削除しません。また、自動ペアリングには、ペア設定の動作を変更するためのフックがあります。たとえば、私はRubyコードのためのスペースで中かっこを埋め込む関数を持っています、そして、Pythonの三重引用符を扱う別の関数があります。 –

2

編集:私はそれについてはあまり考えていなかった私はしばらくの間、私の.emacsに次のように持っていたし、それがうまく働きました。彼の答えでevent_jrが指摘しているように、私はこのコードを持っているのと同じページからリンクされたautopairs.elパッケージを使って、同じ機能(そして明らかにもう少し)を得ることができます。

私はこれを行うには、私の.emacsに次のコードを持っているが、あなた自身をロールバックするのも楽しいですがthe emacs wiki:

(setq skeleton-pair t) 

(setq skeleton-pair-alist 
     '((?\(_ ?\)) 
    (?[ _ ?]) 
    (?{ _ ?}) 
    (?\" _ ?\"))) 

(defun autopair-insert (arg) 
    (interactive "P") 
    (let (pair) 
    (cond 
    ((assq last-command-char skeleton-pair-alist) 
     (autopair-open arg)) 
    (t 
     (autopair-close arg))))) 

(defun autopair-open (arg) 
    (interactive "P") 
    (let ((pair (assq last-command-char 
      skeleton-pair-alist))) 
    (cond 
    ((and (not mark-active) 
     (eq (car pair) (car (last pair))) 
     (eq (car pair) (char-after))) 
     (autopair-close arg)) 
    (t 
     (skeleton-pair-insert-maybe arg))))) 

(defun autopair-close (arg) 
    (interactive "P") 
    (cond 
    (mark-active 
    (let (pair open) 
     (dolist (pair skeleton-pair-alist) 
    (when (eq last-command-char (car (last pair))) 
     (setq open (car pair)))) 
     (setq last-command-char open) 
     (skeleton-pair-insert-maybe arg))) 
    ((looking-at 
    (concat "[ \t\n]*" 
     (regexp-quote (string last-command-char)))) 
    (replace-match (string last-command-char)) 
    (indent-according-to-mode)) 
    (t 
    (self-insert-command (prefix-numeric-value arg)) 
    (indent-according-to-mode)))) 

(defun autopair-backspace (arg) 
    (interactive "p") 
    (if (eq (char-after) 
     (car (last (assq (char-before) skeleton-pair-alist)))) 
     (and (char-after) (delete-char 1))) 
    (delete-backward-char arg)) 

(global-set-key [backspace] 'autopair-backspace) 
(define-key isearch-mode-map [backspace] 'isearch-delete-char) ;; required to fix behaviour in isearch 

(global-set-key "(" 'autopair-insert) 
(global-set-key ")" 'autopair-insert) 
(global-set-key "[" 'autopair-insert) 
(global-set-key "]" 'autopair-insert) 
(global-set-key "{" 'autopair-insert) 
(global-set-key "}" 'autopair-insert) 
(global-set-key "\"" 'autopair-insert) 
1

私はそれだけでEmacsの24の特徴だかどうかわからないんだけど、あなたがやりたいelectric-pair-modeようです。

+0

私はすでにオートペアをテストして動作していますが、私は自分の手に何か自由な時間があるときにもこれをチェックします。ありがとう! – vise