先週はVim力が微増した一週間だった

どうもこんばんわ駆け出しVimmer見習いです。
Vimは多機能な割に、操作は直感的で覚えやすいという旨の発言をしたところ、何言ってんだこいつという顔でみられました。でもテキストオブジェクトはすげー覚えにくいと思います。


最近はなるべくEscではなくCtrl + [ を押すようにしたり、極力テキストオブジェクトを使うようにしたりとVim操作系能力のさらなる向上に励んでいる感じです。

先週〜今週にいくつか試した中で、グッときたプラグインをメモっておきたいとおもいます。



t9md / vim-quickhl

QuickRunじゃないです。quickhlです。
これは、任意の単語やなんかをその場でハイライト出来る感じのプラグインです。

ハイライトしたい単語が一つの時はsearchで事足りるのですが、複数ある場合なんかに重宝します。コードを書くときよりも、読む時にちょいと活躍する感じで気に入りました。
設定とかは、READMEとかヘルプ読んで適当に設定しましょう。

僕はNeoBundleマンセーなので以下みたいな感じにしてます。
わざわざLazyにする必要があるかどうか微妙ですが、まぁ何か問題があるでもなしっぽそうなのでこんな感じです。

NeoBundleLazy 't9md/vim-quickhl', {
    \ 'autoload' : {
    \   'commands' : ["QuickhlAdd"],
    \   'mappings' : ["<Plug>(quickhl-toggle)", "<Plug>(quickhl-reset)", "<Plug>(quickhl-match)"],
    \   },
    \}

" 中略

" --------- quickhl {{{
nmap <Space>m <Plug>(quickhl-toggle)
xmap <Space>m <Plug>(quickhl-toggle)
nmap <Space>M <Plug>(quickhl-reset)
xmap <Space>M <Plug>(quickhl-reset)
nmap <Space>j <Plug>(quickhl-match)
" ----- }}}

kana / vim-operator-user
kana / vim-operator-replace

上記の、operator-userはvimのoperatorをユーザーが簡単に定義出来るようにするというプラグインです。operatorはアレです、yとかの、指定した後に範囲を取るコマンドです。
operator-replaceはそれを使った拡張で、対象範囲とレジスタにある文字列を入れ替えてくれるoperatorです。

以下のブログさんを参考に導入しました。
http://vim.g.hatena.ne.jp/yamazakiccs/20090913

ヤンクした文字で、対象を置き換えたいっていうことは時々あると思うんですけど、Vimってそれするのに数ステップかかるんですよね。いわゆるメモ帳的なエディタの場合は、Shiftで範囲選択してから貼付けるか、マウスでダブルクリックして貼付けるか。
ところがVimには(多分)上書きっていうコマンドが存在しないので、範囲選択してペーストしてもどうもうまくいかない。消してからペーストする必要が出てくるわけです。
そこんところのもやもやを解決してくれるので、割合重宝してますはい。


他にもいくつかあったりするんですが、この三つは割合ニッチっぽいプラグインな気がしたので日記におこしました。

あとpluginというかカラースキーマですが、 vim-scripts / Colour-Sampler-Pack の中にある'desertEx'というカラースキーマが、本家desertよりも色数も多くて素敵です。solarizedは、なんだかモニターを選ぶ感じがするので、クソモニターを強いられることのある僕の環境では厳しいものがあるのです。なので最近はずっとdesertExマンです。

番外

個人的に、Vimはあんまりkeymapいじらない方が良いと思っているマンなのですが、やはりいくつかいけてない(直感的でない)ところが見受けられます。
なので最低限だけ、快適になる感じのアレを最近模索してるアレです。

現時点で

" 誤爆してうざいので
nnoremap q: <NOP>
" 英字キーボード使ってるので
nnoremap ; :
" ;で置き換えちゃったので……
nnoremap : ;
" 置換良く使うので
nnoremap <Backspace> :%s/

" Dが行末まで削除の動きをするのに、yはyyもYも一行削除とか腹立つので
nnoremap Y y$

" x, s, cはヤンク的な意図でもって操作することがあんまないのでblack hole行き
nnoremap x "_x
nnoremap s "_s
nnoremap c "_c
vnoremap x "_x
vnoremap s "_s
vnoremap c "_c
xnoremap x "_x
xnoremap s "_s
xnoremap c "_c
onoremap c "_c

" 入力時の基本移動はこれが染み付いてしまってるので
inoremap <C-a> <Home>
" なぜかEndだけ動かねえ
"inoremap <C-e> <End>
inoremap <C-e> <C-o>$<CR>
inoremap <C-f> <Right>
inoremap <C-b> <Left>
inoremap <C-p> <Up>
inoremap <C-n> <Down>
inoremap <C-h> <Backspace>
inoremap <C-d> <Del>


プラグイン用には他にも追加してますが、最近はぼちぼちこんな感じで追加してます。
keymap考えるのに時間使いすぎると本末転倒な感じがしますが、ちょっと気になった時にパパッと試してみる程度のノリで色々と設定を変えられるのはエディタの良いところなので、keymapもやり過ぎない程度に作り込みたいところですね〜