vim-textobj-space書いた

痒いところに手が届くような、しかし痒くなる人が居るのかどうか。
そんなプラグインを書いてみました。

saihoooooooo / vim-textobj-space

コレを使うことでスペースの連続をテキストオブジェクトとして扱うことができます。
よくやるのはjavadocとか変数宣言部分が整形されてる状態でちょっと修正したらずれてしまいました、って時にもっかい整形し直すほどのことでもないようなそんな状況。
あんま使うときもないけど、たまに出来ると嬉しかったりする。

   /**
    * description of method
    *
    * @param    int     hoge    description of hoge
    * @param    int  fuga    description of fuga
                   ^
    */

^の部分にカーソルがある時に

ciS<tab>

   /**
    * description of method
    *
    * @param    int     hoge    description of hoge
    * @param    int     fuga    description of fuga
    */

になると。
またカーソル位置の文字がスペースでない場合は次に現れるスペースを対象とします。

インストール

kanaさんのvim-textobject-userを利用して作成しているんで合わせてインストールしてください。

kana/vim-textobj-user
saihoooooooo / vim-textobj-space

neobundleなら

NeoBundle 'git://github.com/kana/vim-textobj-user.git'
NeoBundle 'git://github.com/saihoooooooo/vim-textobj-space.git'

でインストールできます。

キーマッピング

vim-textobj-spaceではiS/aSを使っています。
iSは半角スペースのみを、aSは半角スペース/全角スペース/tabも対象とします。

上記を別のキーマップに設定する場合は

let g:textobj_space_no_default_key_mappings = 1

を書いてから

omap i, <Plug>(textobj-space)
omap a, <Plug>(textobj-space)
vmap i, <Plug>(textobj-space)
vmap a, <Plug>(textobj-space)

って感じでどうぞ。


以上、人生初のプラグインでした。
今度はプラグインプラグインでなくて一から書いてみたいす。

追記 2012/02/10

使う機会が無いので知らなかったのですが、is/asにはデフォルトで文を対象とするテキストオブジェクトがあるようで(:h is、:h sentenceを参照)キーマップをis -> iS, as -> aSに変更しました。

i<Space>, a<Space>

と迷ったけど、何か個人的に気持ち悪いから却下。