Command Line で使用しているツールまとめ vol.7

##はじめに
今回の投稿は、主に`Vim`と`SublimeText2`に関する投稿です。ちなみに、`SublimeText2`はコマンドラインで使えるわけではないのですが...。


コマンドラインで使用しているツールを簡単にではありますが､まとめてみようと思います｡前回の続きです｡私が知らない便利ツールはまだまだたくさんありますので､ここに掲載されているもの以外で便利なものがあれば､ぜひ教えてください｡



この記事に貼り付けてあるリンクは､キーワードに関連する適切な場所へと誘導してくれます｡非常に有効なので､ぜひ参照してみてください｡


##バックナンバー
[Command Line で使用しているツールまとめ vol.1](http://qiita.com/items/10a9086de309cef5e185)

[Command Line で使用しているツールまとめ vol.2](http://qiita.com/items/8fab37433f8b9606f75c)

[Command Line で使用しているツールまとめ vol.3](http://qiita.com/items/bd319bdaffb403d5e605)

[Command Line で使用しているツールまとめ vol.4](http://qiita.com/items/e0870756171c0f72ff63)

[Command Line で使用しているツールまとめ vol.5](http://qiita.com/items/80c95f442d6c5c639bc1)

[Command Line で使用しているツールまとめ vol.6](http://qiita.com/items/0a053f376bd57603e794)


##Vim
###vim-submode
[vim-submode](http://d.hatena.ne.jp/thinca/20130131/1359567419)というプラグインがあります。これを使用することで、連続で入力したいコマンドがかなり使いやすくなります。例えば、ウィンドウサイズの変更です。

インストールには、[neobundle.vim](https://github.com/Shougo/neobundle.vim)を使用します。`filetype plugin indent on`の上に`NeoBundle 'kana/vim-submode'`と記述してください。

```~/.vimrc
filetype off

if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle/'))
endif

" プラグイン
NeoBundle 'kana/vim-submode'

filetype plugin indent on       " required!
```

そして、`:NeoBundleInstall`コマンドを実行します。以下、この手順については省略します。

そして、設定ファイルは以下のように書きます。

```~/.vimrc
" submode.vim
" http://d.hatena.ne.jp/thinca/20130131/1359567419
" ウィンドウサイズの変更キーを簡易化する
" [C-w],[+]または、[C-w],[-]
call submode#enter_with('winsize', 'n', '', '<C-w>>', '<C-w>>')
call submode#enter_with('winsize', 'n', '', '<C-w><', '<C-w><')
call submode#enter_with('winsize', 'n', '', '<C-w>+', '<C-w>-')
call submode#enter_with('winsize', 'n', '', '<C-w>-', '<C-w>+')
call submode#map('winsize', 'n', '', '>', '<C-w>>')
call submode#map('winsize', 'n', '', '<', '<C-w><')
call submode#map('winsize', 'n', '', '+', '<C-w>-')
call submode#map('winsize', 'n', '', '-', '<C-w>+')
```

これで、`C-w`,`+`…を押すと、サイズを拡大でき、`C-w`,`-`…を押すと、サイズを縮小できます。ちなみに、ここでの`…`の部分は、その前に記述したキーの連続押しを意味します。


###YankRing.vim

`YankRing.vim`は、ヤンク履歴を参照できるようにするプラグインです。

```~/.vimrc
NeoBundle 'YankRing.vim'
```

```
" YankRing.vim
" [,],[y]でヤンク履歴
" http://nanasi.jp/articles/vim/yankring_vim.html
" https://github.com/yuroyoro/dotfiles/blob/master/.vimrc.plugins_setting
nmap ,y :YRShow<CR>
```

ちなみに、クリップボードを共有したい場合は、以下のように書きます。この設定がないと YankRing.vim が動かないことがあるようです。

```~/.vimrc
" クリップボード共有
" http://vim-users.jp/2010/02/hack126/
set clipboard+=unnamedplus,unnamed
```



###undotree.vim
`undotree.vim`は、やり直し履歴を分かりやすく表示し、かつ、いくつか前のやり直しであっても、すぐに開くことが出来るようにするプラグインです。

```~/.vimrc
NeoBundle 'mbbill/undotree'
```

私は以下のように設定し、 `<Leader>u`で開けるようにしています。


```~/.vimrc
" undotree.vim
" [?]でヘルプ。[¥],[u]でundo履歴
" http://vimblog.com/blog/2012/09/02/undotree-dot-vim-display-your-undo-history-in-a-graph/
" https://github.com/r1chelt/dotfiles/blob/master/.vimrc
nmap <Leader>u :UndotreeToggle<CR>
let g:undotree_SetFocusWhenToggle = 1
let g:undotree_SplitLocation = 'topleft'
let g:undotree_SplitWidth = 35
let g:undotree_diffAutoOpen = 1
let g:undotree_diffpanelHeight = 25
let g:undotree_RelativeTimestamp = 1
let g:undotree_TreeNodeShape = '*'
let g:undotree_HighlightChangedText = 1
let g:undotree_HighlightSyntax = "UnderLined"
```

###easybuffer.vim
`easybuffer.vim`は、バッファ一覧を表示し、ショートカットですぐに開けるようにしてくれるプラグインです。その他、詳細情報も表示してくれるので、わかりやすいと思います。

```~/.vimrc
NeoBundle 'troydm/easybuffer.vim'
```

`:EasyBuffer`を実行します。




###DirDo.vim
`DirDo.vim`は、`argdo`の拡張のようなものです。ここで、`argdo`とは、何かのコマンドを一括実行したいときに使います。例えば、以下のようにすると、フォルダ内にある`.rb`ファイルの特定のキーワード`hoge`を特定のキーワード`hoge`に変換することができます。

```
:argadd *.rb
 
:argdo %s/hoge/hehe/g | update
```

しかし、フォルダを指定することはできません。そこで、`DirDo.vim`の出番です。

```
NeoBundle 'vim-scripts/DirDo.vim'
```

以下のようにすることで、フォルダを指定して、一括コマンドを実行出来ます。

```
:DDD app/controllers
 
:DDP *.rb
 
:DDO :%s/hoge/hoge/g | update
```

ここでは、`app/controllers`フォルダを指定しています。




###switch.vim
`switch.vim`を使えば、特定の文字列をキーひとつで入れ替えることができます。例えば、`true`を`false`を変換したりということができます。

```~/.vimrc
NeoBundle 'AndrewRadev/switch.vim'
```

例えば、設定ファイルに以下を追記します。

```~/.vimrc
" switch.vim
" http://www.vimninjas.com/2012/09/12/switch/
let g:variable_style_switch_definitions = [
\   {
\     'f': {
\       'foo': 'bar'
\     },
\
\     'b': {
\       'bar': 'foo'
\     },
\   }
\ ]
nnoremap + :call switch#Switch(g:variable_style_switch_definitions)<cr>
nnoremap - :Switch<cr>
```

すると、 fooの fの部分にカーソルが乗っている状態で +を押すと、 fooが barに切り替わります。そして、繰り返し +を押すと元に戻ります。これは、 barの bの位置にカーソルが乗っているからです。



上の例を見てもわかるように、このプラグインは、様々な使い方ができます。そして、 `:Switch`を使う場合は、例えば、 `true` などの上で `-` を押します。すると、文字列が `false` に変換されたと思います。

似たようなプラグインには以下のようなものがあります。

[taku-o/vim-toggle](https://github.com/taku-o/vim-toggle)

[zef/vim-cycle](https://github.com/zef/vim-cycle)

###vim-easymotion
`vim-easymotion`を使うことで強調されたアルファベットを入力すると移動出来ます。

```~/.vimrc
NeoBundle 'Lokaltog/vim-easymotion'
```

私は、以下の様な設定にしています。 `;` + `j,k,w,b`などの移動キーで発動します。続けて、強調されたアルファベットを入力すると移動出来ます。

```~/.vimrc
" Lokaltog/vim-easymotion
" http://blog.remora.cx/2012/08/vim-easymotion.html
" ホームポジションに近いキーを使う
let g:EasyMotion_keys='hjklasdfgyuiopqwertnmzxcvbHJKLASDFGYUIOPQWERTNMZXCVB'
" 「;」 + 何かにマッピング
let g:EasyMotion_leader_key=";"
" 1 ストローク選択を優先する
let g:EasyMotion_grouping=1
" カラー設定変更
hi EasyMotionTarget ctermbg=none ctermfg=red
hi EasyMotionShade  ctermbg=none ctermfg=blue
```


###clever-f.vim
`clever-f.vim`は検索移動を簡単にするためのプラグインです。`f`を押したあと、検索したい1文字を入力し、続いて `f`を押します。

```~/.vimrc
NeoBundle 'rhysd/clever-f.vim'
```

###vim-seek
`vim-seek`も同じく検索移動を簡単にするためのプラグインです。`clever-f.vim`との違いは、2文字検索できる点です。

```~/.vimrc
NeoBundle 'goldfeld/vim-seek'
```

使い方は簡単で、 `s`で検索を開始します。ここで検索したい2文字を入力します。 `S`で前の行を検索します。

###visualmark.vim
`visualmark.vim`は、マークした行へジャンプすることができるプラグインです。もちろん、Vimの基本機能としてできることですが、このプラグインを使うと、マークした行がハイライトされます。

```
wget --no-check-certificate https://raw.github.com/taku-o/downloads/master/visualmark.vim
 
mv visualmark.vim ~/.vim/plugin/
```

私は、以下の様なキーマップを設定しています。

```~/.vimrc
" visualmark.vim
" http://nanasi.jp/articles/vim/visualmark_vim.html
map <unique> <F3> <Plug>Vm_toggle_sign
map <silent> <unique> mm <Plug>Vm_toggle_sign
```

これで、 F3を押すと、マークができます。そして、 F2を押すと、マークした場所に移動できます。



ちなみに、当該プラグインが使えない場合は、 vim --version | grep +signsを実行してみて、+signsとなっていない場合は、コンパイルが必要になります。

```
sudo port clean vim
 
sudo port install vim +signs
```

###colorscheme
Vimは、背景色や文字色などをカラースキームで一括設定出来ます。おすすめのカラースキームは、以下のようになっています。

```~/.vimrc
NeoBundle 'tomasr/molokai'
NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'altercation/solarized'
NeoBundle 'vim-scripts/newspaper.vim'
```

設定ファイルに以下を追記します。

```
" カラースキームを指定する
colorscheme molokai
 
" あらかじめ用意されたカラースキームを使用する
" colorscheme evening
 
" 背景色の傾向
set background=dark
 
" ハイライト on
syntax enable
```

`unite-colorscheme`を使うことで、簡単にカラースキームを切り替えることができます。

```~/.vimrc
NeoBundle 'ujihisa/unite-colorscheme'
```

設定ファイルに以下を追記することで、 `\`+`uc`でカラースキームを簡単に選べるようになります。

```~/.vimrc
" カラースキームの切り替えを簡単にする
" http://inputxoutput.com/vim-advent-calendar-2012/
nnoremap <Leader>uc :<C-u>Unite colorscheme -auto-preview<CR>
```



ここで、カラースキームを変更することで、`neocomplcache'`の補完が読み取りにくくなる場合があります。この場合、以下の様な設定を行うと、分かりやすくなります。

```~/.vimrc
" 補完候補の色づけ for vim7
" https://github.com/yuroyoro/dotfiles/blob/master/.vimrc.colors
hi Pmenu ctermbg=255 ctermfg=0 guifg=#000000 guibg=#999999
hi PmenuSel ctermbg=blue ctermfg=black
hi PmenuSbar ctermbg=0 ctermfg=9
hi PmenuSbar ctermbg=255 ctermfg=0 guifg=#000000 guibg=#FFFFFF
```



###surround.vim
`surround.vim`では、囲んでいる括弧を削除したり、文字列をかっこで囲むことができます。詳しくは、[こちら](http://mba-hack.blogspot.jp/2013/01/surroundvim.html)の記事を参考にしてください。

```
NeoBundle 'tpope/vim-surround.git'
```

ちなみに、Vimの標準機能では、以下の様な編集が可能です。

```
HTML タグがあったとします。
この場合、通常の機能では、 
dat
でタグ全体を消したり、 
dit
でタグで囲まれた部分を消したりすることができます。
ちなみに、先頭の「d」はデリートですので、「y」とするとヤンク、「c」とするとチェンジすることもできます。
```



###私のVimのF1~F6までのキーマップ

```~/.vimrc
" F1でヘルプ

" F2でvisualmark.vimのマーク移動

" F3でvisualmark.vimのマーク設定
map <unique> <F3> <Plug>Vm_toggle_sign
map <silent> <unique> mm <Plug>Vm_toggle_sign

" F4で前のバッファ
map <F4> <ESC>:bp<CR>

" F5で次のバッファ
map <F5> <ESC>:bn<CR>

" F6でバッファを削除する
map <F6> <ESC>:bnext \| bdelete #<CR>
command! Bw :bnext \| bdelete #
```

###Vimで番号を順番につける方法
以下の設定ファイルを書き、 数字を選択したあと、 ?coとします。ちなみに、`?`には数字が入ります。

```~/.vimrc
" 数字を選択し、[?],[co]で数字順に変換する
" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/tips
nnoremap <silent> co :ContinuousNumber <C-a><CR>
vnoremap <silent> co :ContinuousNumber <C-a><CR>
command! -count -nargs=1 ContinuousNumber let c = col('.')|for n in range(1, <count>?<count>-line('.'):1)|exec 'normal! j' . n . <q-args>|call cursor('.', c)|endfor
```

また、先頭が0でも10進数として扱うには、設定ファイルに以下を書きます。

```~/.vimrc
" 先頭が0でも10進数として扱う
" http://www15.ocn.ne.jp/~tusr/vim/vim_text2.html
set nrformats-=octal
```




##SublimeText2
###Theme Phoenix
Sublime Text2(以下、st2)のテーマには、[Phoenix](https://github.com/netatoo/phoenix-theme)というものがあります。私は、このテーマを愛用しています。



パッケージコントロールのインストールから `theme phoenix`とでも検索し、当該テーマをインストールしたあと、以下を設定ファイルに書き込みます。

```
{
    "theme": "Phoenix Dark.sublime-theme"
}
```

###Brewser Refresh
Sublime Text2 で Markdown Preview する時などは、[Brewser Refresh](https://github.com/gcollazo/BrowserRefresh-Sublime) が便利です。ブラウザのリロードがキーで行えます。

インストーラーの検索で `brewser refresh`を検索して、インストールします。いちいち `Cmd`+`Shift`+`p`を押して、 `install`と入力し、 Enterで検索をかけるのが面倒な方は、以下を設定しておきます。

```
[
{ "keys": ["super+alt+p"], "command": "show_overlay", "args": { "overlay": "command_palette", "text": "install"}}
]
```

この設定で、`Cmd`+`Alt`+`p`で`install`を入力した状態でインストーラーが開きます。

そして、設定ファイルに以下を記述します。

```
[
    {
        "keys": ["command+shift+r"], "command": "browser_refresh", "args": {
            "auto_save": true,
            "delay": 0.5,
            "activate_browser": true,
            "browser_name" : "Google Chrome"
        }
    }
]
```


これで、 `Cmd`+`Shift`+`r`を押せば、ブラウザを更新出来ます。