読者です 読者をやめる 読者になる 読者になる

M-(の挙動を改善する

insert-parenthesesというデフォルトで "M-("にバインドされている
コマンドがあります. "M-("と入力すると "()"を挿入, "M-1 M-("の
ようにすると現在位置と 1単語分進んだ位置を括弧で囲うという挙動です.
M-2, M-3とするとそれだけの単語分進んだ位置を囲んでくれます.

"M-1 M-("の実行例

|foo

"|"にカーソルがある際, M-(を押すと

(|foo)

のようになります.

気になる点

paredit-modeを使っている人はわかると思うのですが, "M-("が
"M-1 M-("の挙動であって欲しいところです. ただ単に対となる
括弧が挿入したければ, autopairや smartparensを使えば済む
だけの話なので, それと "M-("を同じ挙動にしておくのはもったい
ないと思います.

修正

なので, "M-("を "M-1 M-("相当にしておくと便利だと思うので
そのような関数を作成してみました.

(custom-set-variables
 '(parens-require-spaces nil))

(defun my/insert-parentheses (arg)
  (interactive "P")
  (insert-parentheses (or arg 1)))
(global-set-key (kbd "M-(") 'my/insert-parentheses)

余分な空白を挿入しないように parens-require-spacesは nil
設定しておくとなおよいと思います.

おわりに

"M-("の改善案について示しました.