括弧の自動挿入を改善する skeleton-pair-dwim.elをリリース

注意

アクセスありがとござます。申し訳ありませんが、このelispはメンテが困難になってしまったため、アップデートは行わない予定です。後継の、より柔軟で強力なflex-autopair.el(動画とドキュメント括弧の自動挿入の挙動をオレオレ設定できるflex-autopair.elで夢を叶える - むしゃくしゃしてやった)をお使いください。

vallog: Emacs: 「次の単語(というかS式)を指定した文字で囲む」 earmuff.el
に影響を受けて、今までの括弧の自動挿入系elispに対して不満をもっていたので作ってみました。

特徴

  1. 括弧などのペアになる文字を挿入します
    • 例:(を押すと()が挿入され、カーソルがその間に移動します
  2. 誤って自分でペアを閉じようとした場合にカーソルを移動するだけにします
    • カーソルを_で表す。
    • 例:(_)の場合に)を押すと()_となります
  3. 自動挿入を抑制するフィルタを設定できます
    • 例:文字列内にカーソルがある"_"の場合に(を押すと"(_"となります
  4. リージョンの前後をペアになる文字で連続して囲うことができます
    • リージョンを[]で表す。
    • 例:[aaa]の場合に(を押すと[(aaa)]となります。さらに{を押すと[{(aaa)}]となります。
  5. 自動挿入なしでリージョンを囲う機能のみをつかうことができます
    • 例:リージョン選択をせずに<を押すと<のみが挿入され、[aaa]のときに<を押すと[]となります
  6. リージョン囲うときに押すキーに応じてカーソルの移動ができます
    • 例:[aaa]_の場合に(を押すと_[(aaa)]となります
  7. マイナーモードを使わないので行儀が良い
  8. キーバインド設定用の関数が豊富
  9. ソースの量が少なく手を入れやすい?

インストール方法

GitHub - uk-ar/skeleton-pair-dwim
からダウンロードしてloadpathが通ったところにおくか、
emacsから

(auto-install-from-url "https://github.com/uk-ar/skeleton-pair-dwim/raw/master/skeleton-pair-dwim.el")

を評価してください

とりあえずの設定方法

とりあえず

(require 'skeleton-pair-dwim)
(skeleton-pair-dwim-load-default)

で使用できます。
デフォルトの設定だと、

  • { ( " ' ` [ が自動挿入ありでリージョンも囲める設定。
  • < « が自動挿入なしでリージョンを囲める設定。
  • 記号以外の文字の直前にカーソルがあるがある時には自動挿入なし。
  • 記号以外の文字の直後にカーソルがあるがある時には自動挿入なし。
  • 文字列内""にカーソルがある時には自動挿入なし。
  • カーソルの直前が押した文字の時には自動挿入なし。

です。

詳細設定

モードによってキーをかえたり、フィルタを変えたりするには以下を行ってください

  • 自動挿入ありでリージョンも囲めるキーを変更するには
(skeleton-pair-dwim-global-set-key '("{" "(" "\"" "'" "`" "[") 'self-insert-command);;unload default
(skeleton-pair-dwim-define-key
'(global-map emacs-lisp-mode-map) '("{" "(" "\"" ) 'skeleton-pair-insert-dwim)

とすることで、global-mapとemacs-lisp-mode-mapで{ ( "が有効になります。
(eval-after-load "ruby-mode"

  • 自動挿入なしでリージョンを囲めるキーを変更するには
(skeleton-pair-dwim-global-set-key
(skeleton-pair-dwim-default-alist-to-keys)
'self-insert-command);;unload default
(skeleton-pair-dwim-define-key
global-map
"+"
'skeleton-pair-insert-dwim-earmuff)
  • ペアを追加するには

><

><