Hack #227: surround.vim の囲むルールを独自に拡張する
Posted at 2011/09/05ツイート
surround.vim について
テキストを好きな文字列で”囲む”ことに特化したプラグインとして、surround.vim があります。
定番プラグインなので使用している方も多いでしょう。
デフォルトで、テキストを括弧( [([{
等)や、HTMLタグで囲んだりする事が出来ます。
surround.vim は囲むルール( 以降 surrounding rule と記載 )を拡張する機能を用意しており、ユーザーが独自に surrounding rule を追加することが出来ます。
surrounding rule の拡張
例えば下記のような設定は
autocmd FileType ruby let b:surround_45 = "<% \r %>"
&filetype
が ruby 場合に let b:surround_45 = "<% \r %>"
を設定しています。
b:surround_45
の45
は-
の ASCII コード番号です。\r
は囲まれるテキストが入るプレースホルダです。
上記のように設定すると、
puts "Hello world!"
の行にカーソルを合わせ、ノーマルモードで yss-
と入力すると、下記のように eruby のコードとして囲む事ができます。
<% puts "Hello world!" %>
しかし、毎回 ASCII コードを確認して設定するのは面倒なので、 char2nr()
を使用し、下記のように設定する方が分かりやすいでしょう。
以下の設定は E
で囲まれるテキストをヒアドキュメント化します。
let b:surround_{char2nr("E")} = "<<EOS \r EOS"
surrounding rule のより詳細な説明は :help surround-customizing
を参考にして下さい。
さらに簡単に surrounding rule を拡張する
さて、ここまでは前置きで、目的は基本知識の整理だったのでした。
上述の surrounding rule の拡張をより簡単に行う為の、簡単なプラグインを作成しました。
インストール
Vundle を使用している場合以下のコマンドでインストール出来ます。
:BundleInstall t9md/vim-surround_custom_mapping
設定
g:surround_custom_mapping
ディクショナリを設定します。
キー に surrounding rule が設定される &filetype
、値には surrounding rule をディクショナリとして設定します。
キー _
(アンダースコア)は特殊なキーで、ここに設定された surrounding rule は全てのファイルタイプで利用できるようになります。
例えば下記の様に設定すると
let g:surround_custom_mapping = {}
let g:surround_custom_mapping._ = {
\ 'p': "<pre> \r </pre>",
\ 'w': "%w(\r)",
\ }
let g:surround_custom_mapping.ruby = {
\ '-': "<% \r %>",
\ '=': "<%= \r %>",
\ }
p
でpre
タグで囲む(全てのファイルタイプで有効)w
で%w(
と)
で囲む(全てのファイルタイプで有効)-
で%<
と%>
で囲む(ruby ファイルのみ)=
で%<=
と%>
で囲む(ruby ファイルのみ)
という意味になります。
より具体的な例
もともと私がこのヘルパープラグインを作ったのは
- html を編集していようが、
- textile を編集していようが、
- vim のヘルプを編集していようが
p
で整形済みテキストとして囲むというように、似た様な意味(=整形済みテキスト)で囲む場合は、指運動を同じにしたかった からです。
意味に対応する指運動(=運指)が別だと覚えるのが大変です。
上記を実現する設定は下記になります。
let g:surround_custom_mapping = {}
let g:surround_custom_mapping.help = {
\ 'p': "> \r <",
\ }
let g:surround_custom_mapping.textile = {
\ 'p': "<pre> \r </pre>",
\ }
let g:surround_custom_mapping.html = {
\ 'p': "<pre> \r </pre>",
\ }
最後に
このプラグインを作った際、surround.vim 作者の tpope さんに Pull Request を送りました。
取り込まれはしませんでしたが、8/7 日頃に「 来月か、再来月位に新しいのを出す予定、それまでこの pull request はオープンにしておくよ。」と返事をくれました。
ですので、もしかすると9月か10月頃には surround.vim のニューバージョンがリリースされ、今回紹介したプラグインは不要になっているかもしれません。
もどる
blog comments powered by Disqus