Vim の operator プラグインをまとめた

この記事は[Vim Advent Calendar 2012][0] : ATND 292日目の記事になります。

今回は[operator][2]プラグインのまとめ記事です。
以前に、[@manga_osyo][3]による[Vim の textobj プラグインをまとめた][1]もありました。
まぁなので、その相方をまとめてみようかと思います。

# operatorプラグイン

以下、すべて`map`としてますが、実際には`nmap`だったり`vmap`だったりします。
この辺はそのhelpなどを読んでうまく調整してください。`map`をそのまま使用するのは危険です。
また、`{lhs}`は任意の文字列に書き換えて使ってください。


## 1. [emonkak/vim-operator-comment](https://github.com/emonkak/vim-operator-comment)

これは選択したテキストオブジェクトをコメント/アンコメントするオペレーターです。

```vim:
NeoBundle 'emonkak/vim-operator-comment'

map {lhs}  <Plug>(operator-uncomment)
map {lhs}  <Plug>(operator-comment)
```

## 2. [emonkak/vim-operator-sort](https://github.com/emonkak/vim-operator-sort)

これは選択したテキストオブジェクトに対して、ソートするオペレーターです。

```vim:
NeoBundle 'emonkak/vim-operator-sort'

map {lhs}  <Plug>(operator-sort)
```

## 3. [kana/vim-operator-replace](https://github.com/kana/vim-operator-replace)

これは選択したテキストオブジェクトに対してレジスタを汚さない文字列置換するオペレーターです。

```vim:
NeoBundle 'kana/vim-operator-replace'

map {lhs}  <Plug>(operator-replace)
```

## 4. [pekepeke/vim-operator-normalize-utf8mac](https://github.com/pekepeke/vim-operator-normalize-utf8mac)

これは選択したテキストオブジェクトに対して`iconv(v:val, "utf-8-mac", "utf-8")`をするオペレーターです。

```vim:
NeoBundle 'pekepeke/vim-operator-normalize-utf8mac'

map {lhs}  <Plug>(operator-normalize_utf8mac)
```

## 5. [pekepeke/vim-operator-shuffle](https://github.com/pekepeke/vim-operator-shuffle)

これは選択したテキストオブジェクトの各文字をランダムに並び替えるオペレーターです。

```vim:
NeoBundle 'pekepeke/vim-operator-shuffle'

map {lhs}  <Plug>(operator-shuffle)
```

## 6. [pekepeke/vim-operator-tabular](https://github.com/pekepeke/vim-operator-tabular)

これは選択したCSV形式なテキストオブジェクト、もしくはTSV形式なテキストオブジェクトを
Markdown,Textile,Backlogのテーブル書式に変換するオペレーターです。

```vim:
NeoBundle 'pekepeke/vim-operator-tabular'
" Requires
NeoBundle 'pekepeke/vim-csvutil'

" Markdown
map {lhs} <Plug>(operator-md_tabularize_tsv)
map {lhs} <Plug>(operator-md_tabularize_csv)
map {lhs} <Plug>(operator-md_untabularize_tsv)
map {lhs} <Plug>(operator-md_untabularize_csv)

" Textile
map {lhs} <Plug>(operator-textile_tabularize_tsv)
map {lhs} <Plug>(operator-textile_tabularize_csv)
map {lhs} <Plug>(operator-textile_untabularize_tsv)
map {lhs} <Plug>(operator-textile_untabularize_csv)

" Backlog
map {lhs} <Plug>(operator-backlog_tabularize_tsv)
map {lhs} <Plug>(operator-backlog_tabularize_csv)
map {lhs} <Plug>(operator-backlog_untabularize_tsv)
map {lhs} <Plug>(operator-backlog_untabularize_csv)
```

__例:__

```vim:
" 変換前のテキスト
aaa,bbb,cc
aiueo,kaki,kukekosashi
aiueo,kaki,kukekosashi


" Markdown
aaa  |bbb |cc         
-----|----|-----------
aiueo|kaki|kukekosashi
aiueo|kaki|kukekosashi


" Textile
aaa  |bbb |cc         
aiueo|kaki|kukekosashi
aiueo|kaki|kukekosashi

" Backlog
|aaa  |bbb |cc         |h
|aiueo|kaki|kukekosashi|
|aiueo|kaki|kukekosashi|
```

## 7. [rbtnn/vim-operator-quickhl.vim](https://github.com/rbtnn/vim-operator-quickhl.vim)

これは選択したテキストオブジェクトに対して`QuickhlAdd`をするオペレーターです。

```vim:
NeoBundle 'rbtnn/vim-operator-quickhl.vim'
" Requires
NeoBundle 't9md/vim-quickhl'

map {lhs}  <Plug>(operator-quickhl)
```

## 8. [rhysd/vim-clang-format](https://github.com/rhysd/vim-clang-format)

これは選択したテキストオブジェクトに対して`clang-format`コマンドを使ってコードを整形するオペレーターです。
参照： http://rhysd.hatenablog.com/entry/2013/08/26/231858

```vim:
NeoBundle 'rhysd/vim-clang-format'

map {lhs}  <Plug>(operator-clang-format)
```

## 9. [rhysd/vim-operator-surround](https://github.com/rhysd/vim-operator-surround)

これは選択したテキストオブジェクトに対して括弧やクォートなどを追加・削除・変更するオペレーターです。
ただし、(2013/09/20の時点で)開発途上なのでまだ未実装なところがあります。

```vim:
NeoBundle 'rhysd/vim-operator-surround'

map {lhs}  <Plug>(operator-surround-append)
map {lhs}  <Plug>(operator-surround-replace)
map {lhs}  <Plug>(operator-surround-delete)
```

## 10. [rhysd/vim-operator-evalruby](https://github.com/rhysd/vim-operator-evalruby)

これは選択したテキストオブジェクトをRuby式として評価して、その結果で置き換えるオペレーターです。

```vim:
NeoBundle 'rhysd/vim-operator-evalruby'

map {lhs}  <Plug>(operator-evalruby)
```

## 11. [rhysd/vim-operator-filled-with-blank](https://github.com/rhysd/vim-operator-filled-with-blank)

これは選択したテキストオブジェクトの各文字をスペースに置換するオペレーターです。

```vim:
NeoBundle 'rhysd/vim-operator-filled-with-blank'

map {lhs} <Plug>(operator-filled-with-blank)
```

## 12. [rhysd/vim-operator-trailingspace-killer](https://github.com/rhysd/vim-operator-trailingspace-killer)

これは選択したテキストオブジェクトの末尾のホワイトスペースを削除するオペレーターです。

```vim:
NeoBundle 'rhysd/vim-operator-trailingspace-killer'

map {lhs} <Plug>(operator-trailingspace-killer)
```

## 13. [sgur/vim-operator-openbrowser](https://github.com/sgur/vim-operator-openbrowser)

これは選択したテキストオブジェクトを引数にして`openbrowser#smart_search()`を行うオペレーターです。

```vim:
NeoBundle 'sgur/vim-operator-openbrowser'
" Requires
NeoBundle 'tyru/open-browser.vim'

map {lhs} <Plug>(operator-openbrowser)
```

## 14. [tek/vim-operator-ag](https://github.com/tek/vim-operator-ag)

これは選択したテキストオブジェクトを引数にして`g:operator_ag_cmd`のコマンドを行うオペレーターです。
`Ag`コマンド目的で作られているが、普通に他のコマンドでも使えそう。

```vim:
NeoBundle 'tek/vim-operator-ag'

map {lhs} <Plug>(operator-ag)
map {lhs} <Plug>(operator-agg)
```

## 15. [tek/vim-operator-assign](https://github.com/tek/vim-operator-assign)

これは選択したテキストオブジェクトを代入式へ分離させるオペレーターです。

```vim:
NeoBundle 'tek/vim-operator-assign'

map {lhs}  <Plug>(operator-assign)
```

__例:__

```vim:
" 変換前
call func(str . 'foo')

" 変換後
let bar = str . 'foo'
call func(bar)
```

## 16. [thinca/vim-operator-sequence](https://github.com/thinca/vim-operator-sequence)

これは複数のオペレーターから１つの新しいオペレーターを作成する補助プラグインです。
参照： http://d.hatena.ne.jp/thinca/20110415/1302879419

```vim:
NeoBundle 'thinca/vim-operator-sequence'
```

## 17. [tyru/operator-camelize.vim](https://github.com/tyru/operator-camelize.vim)

これは選択したテキストオブジェクトをsnake_caseやcamelCaseに変換するオペレーターです。

```vim:
NeoBundle 'tyru/operator-camelize.vim'

map {lhs}  <Plug>(operator-camelize)
map {lhs}  <Plug>(operator-decamelize)
```

## 18. [tyru/operator-html-escape.vim](https://github.com/tyru/operator-html-escape.vim)

これは選択したテキストオブジェクトに対してHTMLエスケープ/アンエスケープを行うこオペレーターです。

```vim:
NeoBundle 'tyru/operator-html-escape.vim'

map {lhs}  <Plug>(operator-html-escape)
map {lhs}  <Plug>(operator-html-unescape)
```

## 19. [tyru/operator-reverse.vim](https://github.com/tyru/operator-reverse.vim)

これは選択したテキストオブジェクトを反転するオペレーターです。

```vim:
NeoBundle 'tyru/operator-reverse.vim'

map {lhs}  <Plug>(operator-reverse-text)
```

## 20. [tyru/operator-star.vim](https://github.com/tyru/operator-star.vim)

これはthinca/vim-visualstarのオペレーターです。

```vim:
NeoBundle 'tyru/operator-star.vim'
" Requires
NeoBundle 'thinca/vim-visualstar'

map {lhs}  <Plug>(operator-*)
map {lhs}  <Plug>(operator-g*)
map {lhs}  <Plug>(operator-#)
map {lhs}  <Plug>(operator-g#)
```

## 21. [vimtaku/vim-operator-ppd](https://github.com/vimtaku/vim-operator-ppd)

すいません、この使い道がわからなかったです。とりあえず、見つけたので載せておきます。

```vim:
NeoBundle 'vimtaku/vim-operator-ppd'

map {lhs}  <Plug>(operator-ppd)
```

## 22. [yomi322/vim-operator-suddendeath](https://github.com/yomi322/vim-operator-suddendeath)

これは選択したテキストオブジェクトを突然死なテキストに変換するオペレーターです。
参照： http://yomi322.hateblo.jp/entry/2013/02/04/000316

```vim:
NeoBundle 'yomi322/vim-operator-suddendeath'

map {lhs}  <Plug>(operator-suddendeath)
```

# 終わり

以上、「Vim の operator プラグインをまとめた」でした。
この記事を書いてみて「textobjに比べてoperatorは少ないなー」って思いました。
まぁなので、皆さん、operatorプラグインをどんどん書いてVACを書きましょう！


[0]: http://atnd.org/events/33746
[1]: http://d.hatena.ne.jp/osyo-manga/20130717/1374069987
[2]: https://github.com/kana/vim-operator-user
[3]: https://github.com/osyo-manga