最近emacsをspacemacsに移行したら、spacemacsにはsmartparensというelispがデフォルトではいっていて、モードに関係なくグローバルに有効になっている。
これがswiftの文字列リテラルにクロージャの評価結果を直接埋め込む\(...)
という記法と相性が悪くて、
\(
っていれた途端、
\(\)
と、対応する閉じ括弧\)
が自動的に挿入されてしまい、イラッとする。
調べてみたら、smartparensには独自の括弧対応を定義する機能があり、\(
を入れると自動的に\)
がはいるよう定義されているのが原因らしい。
モードにローカルな括弧を定義するsp-local-pair
という機能もあるので、これをつかうと\(
にたいして普通の)
を挿入するようにできる。
(add-hook 'swift-mode-hook
(lambda ()
...
(sp-local-pair 'swift-mode "\\(" ")")
....
))
これで解決。むしろ改善。
かつてLispプログラマだったこともあり、smartparens自体は良く出来ていると思う。