28

「(」、「{」などを入力すると自動的に閉じ括弧を追加するAutoClose (この投稿から発見)と呼ばれる Vim のプラグインを見てきました。

例えば; 次のように入力すると(|はカーソルです):

int main(|

クロージング)が自動的に挿入されるようにしたい:

int main(|)

emacsの同様の機能を知っている人はいますか-今回はGoogleに失敗しました!

4

4 に答える 4

16

はい、このモードは electric と呼ばれます。最大の快適さのために、この単純なマクロと電気的動作を組み合わせることができます。

(defun electric-pair ()
  "If at end of line, insert character pair without surrounding spaces.
   Otherwise, just insert the typed character."
  (interactive)
  (if (eolp) (let (parens-require-spaces) (insert-pair)) 
    (self-insert-command 1)))

次に、お気に入りのプログラミング モードで適切な文字をバインドして有効にします。たとえば、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!

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

于 2009-06-21T12:21:17.543 に答える
16

もあり'pareditます。チート シートには、使用可能なすべてのコマンドが表示されます。別の回答で提案されている電気モードよりも好きです。paredit は () にのみ適用されるため、ニーズに合わない場合があります。

しかし、正直なところ、括弧を囲むパッケージがたくさんあります。ウィキには、それらすべてがここにリストされています。あなたの質問に対処するモードは次のとおりです。

于 2009-06-21T14:37:40.840 に答える
6

このスレッドを壊して、別の代替案を提供します。ペアの自動挿入、領域のラ​​ッピング、バランスの取れた表現のナビゲーションなどを扱う、最近開始された新しいプロジェクトがあります。機能のリストはここで説明するには長すぎるため、詳細な readme を読むことができるsmartparens github リポジトリにリンクします。

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

于 2012-12-27T01:19:33.323 に答える
5

cmarcelo は、スケルトン モードを使用してこれについて素晴らしい投稿を書いています。また、開き括弧を削除した場合に平衡括弧を削除する方法と、誤って閉じ括弧を入力してしまった場合の対処方法も示しています。(ちなみに、どちらの動作も TextMate をコピーします)。

アップデート:

この回答を投稿して以来、このユースケースに最適なシステムであるAutopairを発見しました。私はそれをたくさん使って、それを愛しています。

于 2009-06-21T18:59:25.440 に答える