2009-06-21 30 views
23

私は例えば、「{」など「(」Emacsで中カッコを自動的に閉じますか?

を入力するときに自動的に閉じ中括弧を付加する(this後から発見)AutoCloseと呼ばVimのためのプラグインを見てきた、私は次のように入力したとき(|ありますカーソル):

int main(| 

私は私のために自動的に挿入される決算)をしたいと思います:

int main(|) 

誰もがSIMを知っていますemacsのためのilar機能 - Googleは今回私に失敗しました!

答えて

13

ほかにも'pareditがあります。 cheat sheetには利用可能なすべてのコマンドが表示されます。別の答えで示唆されている電気モードよりも好きになる。 pareditは()にしか適用されませんが、あなたの必要性を気にすることはありません。

しかし、正直言って、カッコを囲むパッケージがたくさんあります。ウィキにはすべてlisted hereがあります。あなたの質問をアドレッシングモードは以下のとおりです。

+3

http://www.emacswiki.org/emacs/AutoPairsも参照してください。 –

+0

さらに何かが必要な場合はどうすればよいですか?多くのエディタには、自動的に閉じるなどの機能があります。 htmlタグに加えて、それらの間に空行を挿入し、適切な字下げを行います。私はemacsでこれをどのように達成できますか? – jesper

+1

@ jesperリストされているモードの中には、あなたが望むものをすでに実行しているものがあります。より一般的なモードであることを確かめて、yasnippet(http://www.emacswiki.org/emacs/Yasnippet)はあなたが望むことをすることができます。それは実際にカッコのバランスモードではないので、私は答えに追加しませんが、あなたが求めていることをすることができます。 –

15

はい、this mode is called electric

次に、適切な文字を好みのプログラミングモードでバインドすることで、電気的な動作をこの単純なマクロと組み合わせることができます。例えば、PythonMode用:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map "\"" 'electric-pair) 
      (define-key python-mode-map "\'" 'electric-pair) 
      (define-key python-mode-map "(" 'electric-pair) 
      (define-key python-mode-map "[" 'electric-pair) 
      (define-key python-mode-map "{" 'electric-pair))) 

CPerlモードは組み込みとしてこれを提供します。

;; from my .emacs 
(add-hook 'cperl-mode-hook 
    (lambda() 
    (setq cperl-hairy nil 
     abbrev-mode t  ;; automatic keyword expansion 
     cperl-highlight-variables-indiscriminately t 
     cperl-auto-newline t 
     cperl-auto-newline-after-colon t 
     cperl-regexp-scan nil 
     cperl-electric-keywords t 
     cperl-electric-linefeed t 
     cperl-electric-parens nil) ;; <------ electric parens! 

他のモードは、同様のものを提供できます。

+6

'electric-pair-mode 'はemacs 24でビルドされており、'(electric-pair-mode 1) 'で使用できます。 [リンク](http://ergoemacs.org/emacs/emacs_insert_brackets_by_pair.html)。 – liuminzhao

+0

電気モードでは、単一引用符と中括弧は閉じません。とにかくそれを可能にするには? –

+0

M-xはグループ 'electricity'をカスタマイズし、 'electric-pair-pairs'を探します。しかし、あなたのメジャーモードにかかわらずこれを設定することは賢明でないかもしれないことに注意してください - 例えば、テキストモード - 他のメジャーモードは通常、カスタマイズを提供します。 Pythonの一重引用符は、期待通りに機能します(最後のものを追加します)。 – bubak

5

cmarceloはスケルトンモードを使用してwritten a wonderful post about thisです。また、開いている括弧を削除するとバランスのとれた括弧を削除する方法と、誤って括弧を入力した場合の対処方法も示しています。 (ちなみに、両方の動作でTextMateがコピーされます)。

アップデート:私はこの回答を掲載以来、私はこのユースケースのためにかなりの完璧なシステムですAutopairを発見した

。私はそれをたくさん使い、愛しています。

+0

+1の自動ペアリング。 –

+0

autopairは単一引用符と中括弧を閉じません。とにかくそれを可能にするには? –

+0

@VineetKaushikこれは、オートアイペアを使用しているモードに依存します。Pythonモードではうまく動作します。多分あなたはペアと見なされないモードを使用しています。あなたは何をしているのか詳細を教えてください。 – Singletoned

5

私はこのスレッドをネクロして、別の方法を提供します。ペアの自動挿入、リージョンのラッピング、バランスの取れた式のナビゲーションなどを扱う、最近開始された新しいプロジェクトがあります。機能のリストはここではあまりにも長いので、詳細なreadmeを読むことができるsmartparens github repoにリンクします。

これは前述のAutoPairのスーパーセットであり、pareditのコア機能の大部分を提供します(emacs構文テーブルで認識されるものだけでなく、あらゆる種類の異なるペアにも拡張されています)。

関連する問題