欲しいものリスト

Vimの使い方まとめ

amazon
Vim関連の情報をまとめてみたいと思います。何か間違いがあれば、コメントにて教えてもらえると嬉しいです。情報をできるだけ充実できたらと思います。よろしくお願いします。

photo credit: ryanoshea via photopin cc

Vim Advent Calendar の 88 日目の記事です。



目次



リンク



総合



タイトル内容
vim-jp 最新情報など
vimdoc-ja 上のサイトの別ページ。ドキュメントまとめ
Vim-users.jp Vimmerの最新動向からプラグイン解説など
名無しのvim使い 基本から応用までの情報まとめ
Qiita(vim) 記事投稿サイト
Lingr(Vim-users.jp) Vimmer達のコミュニティ
Google+(vim) Vimmer達のコミュニティ(海外)



基本



タイトル内容
チュートリアルでvimエディタの使い方を覚えよう MacでVimのチュートリアルを始める方法
vimの使い方 Vimの操作方法についてまとめられています
Vim のカスタマイズ 〜導入編〜 vimrcを書くときに参考になるまとめ
知らないと損するvim知識30選 Vimの基礎知識の確認


応用



タイトル内容
Vimの極め方 あらゆるTipsについて、正しい例を交えて紹介
vimのカスタマイズとTips Vimをカスタマイズする時の参考
プログラマが知っておくべき100のVimコマンド おすすめのVimコマンドまとめ
Vim-Tips 主にマクロの解説に詳しいVimのTips集
Vim プラグインを github で公開するまで Vim Pluginの作り方から公開まで


Vimスクリプト



タイトル内容
Vimスクリプトを書いてみよう 作成の様子を見ることで、その書き方を体験&習得
モテる男のVim Script短期集中講座 おおよそVimScriptの仕組みが分かる
Vimスクリプト基礎文法最速マスター 非常に体系的な文法解説
Vimスクリプトリファレンス VimScript関連の記事まとめ



Vimプラグイン



# タイトル
1 SublimeText Vim Emacs プラグイン比較表
2 ワシのVimプラグインは百八式まであるぞ
3 vim使っているrubyistで、これ入れていないのはヤバいプラグインまとめ 16個
4 [開発環境][vim]使用している vim プラグインまとめ
5 ssh上でマウススクロールも使える大規模PHP開発向けvim+tmux環境の構築
6 Vim After 11 Years
7 Web屋のためのHow to Vim
8 unite.vim について語る


その他



タイトル内容
Vim Advent Calendar 2012 Vim関連の連続記事
Vim Advent Calendar 2011 Vim関連の連続記事
vimrc読書会 個人のVim設定まとめ
Vimテクニックバイブル紹介(Shougo版) 本では紹介できなかったプラグインなど


Tips



ここでは、タイトルをわかりやすくした一覧を表示します。再掲になるものがいくつもありますが、体系的な目次ではなく、分かりやすさを重視の目次にしてみました。

タイトル内容
日本語ヘルプはないの? 日本語ヘルプありますよ
h,j,k,lで移動するのかったるい Emacs風のキーマップを設定するといいですよ
インサートモードを抜けるのにESCを押すのが面倒 「C-j」や「jj」で抜けられるようにするといいですよ
インサートモードを抜けた時は、自動でIMEをオフにする 「KeyRemap4MacBook」を使うといいですよ
もっとスムーズにスクロールできないの? 「Smooth-Scroll」を使ったり、設定することで可能です
矩形選択(くけいせんたく)ってできる? 「C-v」でできますね
前回編集してた場所に移動したいんだけど 設定ファイルに書くことで、実現出来ますよ
ヘルプをもっと簡単に活用したい カーソル下のキーワードでヘルプ検索してみてはどうでしょう
一括で文字列を変換したいんだけど 「:%s/hoge/hoge/g」でできます
置換を頻繁に利用するんだけど 一括置換には色々と便利な設定があります
タグをもっと使いやすくできないの? キーマップを設定してみましょう
番号を順番につける方法はあるの? キーマップを設定しておくと簡単に出来ますよ
思い通りに数を増加させることはできる? マクロを使えばできますよ
え、何いまのどうやったの 驚くべき操作は、テキストオブジェクトから学びましょう
コードが増えてきて混乱している 折りたたみ機能を使うと、読みやすくなりますよ
ディレクトリ移動って簡単にならないの よく分かりませんが、ファイルと同じ場所に移動してみましょうか
違うよ。エクスプローラーみたいなことできないの デフォルトのファイラーでも使ってみます?
もっとマシなファイラーないの? vimfilerがオススメです
コピー出来ないんだけど クリップボードの共有を設定しておくといいと思います
コピーした文字で、繰り返し上書きペーストしたい 「"0p」で出来ますね。キーマップでも設定しておきましょう
最後に編集したコマンドをもう一度実行したい .(ドット)を使うと出来ますよ
貼りつけた時に、表示が崩れるんだけど コピーモードなどを利用すると、回避出来ます
また設定変更? .vimrc開くのダルいんだけど キーマップや自動更新を設定しておきましょう
プラグイン入れるの面倒なんだけど プラグイン管理はNeoBundleを導入すると楽ですよ
vimprocのビルド、自動化できないの? NeoBundleでできますよ
IDEみたいな補完ってできないの? neocomplcacheを入れてみてはどうでしょう
ある程度勝手に入力してくれるやつは? neosnippetを入れてみてはどうでしょう
IDEみたいに画面端にファイラー出したいんだけど NERDTreeが定番ですね
これは、さっきのvimfilerも使えそうなんだけど 使えますね。設定を紹介しておきます
カラーがダサいんだけど、簡単に設定できないの プレビューしながら、設定すると分かりやすいです
カラースキーム一覧表のようなものはないの こちらにまとめてみました
もっと分かりやすく移動できないの 移動単位を明示して、移動できるプラグインがあります
undo履歴を参照できない? プラグインを使えば、分かりやすく参照できますよ
Yank履歴を参照できない? YankRingを使ってみてください
Vimからブラウザを操作できないの?プレビューとかしたい AppleScriptを使うことで、ブラウザを操作出来ます
URLを開きたいんだけど URLを既定のブラウザで簡単に開くことができます
一発で複数行をコメントできないの 「NERD_commenter.vim」や初期機能を使うことで出来ますね
プログラムの実行結果をすぐに確認したいんだけど 「vim-quickrun」を使えばできますね。必須ですよ
タグジャンプみたいなのできないの 「taglist.vim」がお勧めです
VimからChromeを操作したい AppleScriptを使うことで、実現出来ます



前提知識



# タイトル 内容
01 インストール 各OSのVimのインストール方法
02 操作 覚えておくべき基本操作
03 設定 設定ファイルの書き方
04 プラグイン プラグインの導入方法



基本設定



編集関連



# タイトル 内容
01 基本設定 ほぼ必須の基本設定について
02 エンコード エンコーディングの設定について
03 インデント インデントの設定について
04 表示 表示関連の設定について
05 クリップボード クリップボード関連について
06 ファイル ファイルやフォルダ関連について
07 バックアップ バックアップ関連について
08 日本語入力 日本語入力関連の設定について
09 ヤンク/ペースト ヤンクとペースト関連について
10 アンドゥ/リドゥ アンドゥとリドゥ関連について
11 レジスタ レジスタ関連について
12 補完 補完関連について
13 編集その他 編集その他について



移動関連



# 内容
01 インサートモードでの移動
02 スクロール移動
03 バッファ移動
04 タブ移動
05 ウィドウ移動
06 Emacs風に移動
07 移動その他



カラー関連



# 内容
01 カラースキームの設定
02 ターミナルカラーの設定
03 補完候補のカラー設定



プラグイン



管理系



名前 内容
Vundle プラグイン管理
NeoBundle プラグイン管理



編集系



名前内容
YankRing.vim ヤンク履歴を参照
undotree.vim アンドゥ履歴を参照
easybuffer.vimバッファ一覧を表示
DirDo.vim コマンドの一括実行を補助
switch.vim 特定の文字列を切り替え
Zencoding-vim HTMLの略式記法
viewoutput.vim Vimのコマンドを分かりやすく表示する
str2htmlentity.vim 範囲選択にてHTMLの特殊文字変換を行う
vim-smartchr 自動入力を補助する
teol.vim 特定の文字列を行頭や行末に入れる
colorizer CSSなどでその色でカラーコードをハイライト
vim-surroundテクストオブジェクトの拡張



移動系



名前 内容
vim-easymotion 移動の目安を明示し、簡単移動
clever-f.vim 検索移動を強化
vim-seek 2文字検索で移動
visualmark.vim マーク(ハイライト付き)とジャンプ機能
vim-rails Railsのプロジェクトファイル間を移動



unite系



名前 内容
unite.vim 分かりやすいインターフェイスを提供する
unite-help ヘルプを検索する
unite-outline 開いているファイルに対して、アウトラインを表示
unite-rails rails.vimと連携し、ファイル一覧を表示、選択
unite-colorscheme カラースキームをプレビューしながら変更
unite-webcolorname カラーコードをプレビューしながら選べる


以下は、unite.vimで使えるプラグイン一覧です。外部リンクです。日本語の解説記事がある場合、多くは、Githubではなく、解説記事にリンクを貼っています。


タイトル 内容
unite-build makeを実行、結果を表示
unite-ssh sshを実行
unite-gem gemを検索、インストール
unite-colorscheme カラースキームを変更
unite-font フォントを変更
unite-haskellimport Haskellプログラミングの補助
unite-locate locate検索
quicklearn quickrun.vimをuniteで
unite-fold 折りたたみ一覧表示
unite-quickfix quickfixをuniteから
unite-quickrun_config QuickRunで使用される-typeを選択
unite-filetype filetypeを設定
unite-advent_calendar Advent Calendar一覧を表示、選択
vim-unite-history 履歴をuniteで
unite-rails rails移動簡単に
unite-help ヘルプを検索
unite-tag タグファイルを検索
unite-qf quickfixをuniteで
unite-everything everything検索
unite-grep_launchergrep補助
unite-git_grep git-grepでの検索
unite-remotefile 別のVimが開いているファイルを開く
unite-grails Grailsプロジェクト内の移動
unite-cake cakePHPをuniteで
unite-zf Zend Framework関連のファイルを表示
unite-sf2 Symfony2関連のファイルを表示
unite-transparency uniteでGUIのVimの半透明度を調整(MacVim)
unite-script uniteのsourceを作成
unite-alias sourceのargsを固定化したものを登録
unite-gtags gtagsをuniteで
unite-outline アウトラインを表示
vim-unite-vcs 各VCSをuniteから
unite-todo to-do管理をuniteから
unite-vim_hacks Vim Hacksを閲覧
unite-spotlight spotlight検索(Mac)
quickrun-unite-qf-outputter QuickRunからunite-qfへ出力
unite-mpc mpdをuniteから(音楽)
unite-fileline grep補助
unite-haddock Haskellプログラミング補助
vim-unite-ack ack検索
unite-mark markにジャンプ
unite-git gitリポジトリの移動を補助
unite-tweetvim tweetvimの補助
unite-scriptnames scriptnameの検索


以下は、 unite.vimを使いこなすために役立つ記事一覧です。ジャンプではなく、外部リンクです。


# unite.vim
1 unite plugins · Shougo/unite.vim Wiki · GitHub
2 そろそろしっかりvimを使う。quickrun,uniteの導入。 - 南極の図書館
3 せっかくだから、俺はこの Unite + vim-ref を選ぶぜ! | blog.remora.cx
4 Vimでunite.vimプラグインを使い始めて一週間 - アインシュタインの電話番号☎
5 Vim-users.jp - Hack #200: 候補を選択し、実行する
6 unite.vim の設定を一部晒してみる - 永遠に未完成
7 ctags と neocomplcache と unite-tag を使って関数定義箇所を開く - C++でゲームプログラミング
8 unite-outline まとめ - Alone Like a Rhinoceros Horn


# source
1 簡単な unite の source の作り方 - 永遠に未完成
2 unite.vim で vim-pukiwiki の検索をする - vim 初心者のメモと開発中の pukiwiki.vim について
3 unite.vim でアニメーション - C++でゲームプログラミング



その他



名前 内容
vimproc Vimで非同期実行
vim-quickrun プログラムの実行結果を確認する
taglist.vim メソッド宣言、変数宣言の一覧を表示し、移動
vim-fugitive gitラッパープラグイン
visSum.vim Vim上から計算を行う
vimshell Vim上からシェルを操作する
excitetranslate.vim Vimから翻訳を行う
vim-submode 連続でコマンドを入力する場合に使える
simplenote.vim VimからSimplenoteでメモをとる
TweetVim VimからTwitterへのツイートやタイムラインの閲覧をする
open-browser.vim カーソル下のURLをブラウザで開く
creload.vim VimからChromeをオートリロードする
Blogger.vim Bloggerへの投稿や編集をVimから行う
Gist.vim Gistへの投稿をVimから行う



インストール



Windows



一般的にWindowsでは、 kaoriya版Vimを使う人と Cygwin版Vimを使う人が多いという印象です。


kaoriya版は、ファイルをダウンロードして、ダウンロードした圧縮ファイルを解凍し、実行ファイルをダブルクリックするだけで起動します。 GVim版もありますので、好きな方を起動してください。



ちなみに、圧縮ファイルの解凍は こちらのソフトを使うと簡単です。


Cygwin版は、以下のようにすると簡単にインストール出来ます。

Windows PowerShellを使ってインストールすると簡単です。Windows+ Rを押して、「powershell」と入力すると起動します。



一応、シェルスクリプトを実行できるように権限を変更しておきます。

Set-ExecutionPolicy RemoteSigned



そして、そこで、以下のコードを貼り付けます。


function Install-Cygwin {
param ( $TempCygDir="$env:temp\cygInstall" )
if(!(Test-Path -Path $TempCygDir -PathType Container))
{
$null = New-Item -Type Directory -Path $TempCygDir -Force
}
$client = new-object System.Net.WebClient
$client.DownloadFile("http://cygwin.com/setup.exe", "$TempCygDir\setup.exe" )
Start-Process -wait -FilePath "$TempCygDir\setup.exe" -ArgumentList "-q -n -l $TempCygDir -s http://mirror.nyi.net/cygwin/ -R c:\Cygwin"
Start-Process -wait -FilePath "$TempCygDir\setup.exe" -ArgumentList "-q -n -l $TempCygDir -s http://mirror.nyi.net/cygwin/ -R c:\Cygwin -P openssh"
Start-Process -wait -FilePath "$TempCygDir\setup.exe" -ArgumentList "-q -n -l $TempCygDir -s http://mirror.nyi.net/cygwin/ -R c:\Cygwin -P wget"
}




Enterを押せば、コマンドが作成されます。そして、作成されたコマンドを実行します。


Install-Cygwin



Cygwinがインストールされたら、 Windows + Rを押して、「c:cygwin/cygwin.bat」を入力し、 Enterを押します。



しかし、Terminalがあまりに使いにくいので、 minttyを使うことにします。



そこで、パッケージ管理のために以下のコマンドを実行します。

wget http://apt-cyg.googlecode.com/svn/trunk/apt-cyg

mv apt-cyg  /usr/bin

chmod +x /usr/bin/apt-cyg



そして、実際にパッケージをインストールしてみます。


apt-cyg install vim



Ubuntu



Linuxの場合は、ほとんどがデフォルトでパッケージ管理マネージャーがインストールされている状態です。よって、例えば、Ubuntuの場合は、以下のようにします。

sudo apt-get update

sudo apt-get -y install vim



Ubuntuで使えるパッケージ管理は、 aptitudeなども人気です。


Mac



Macの場合は、パッケージ管理マネージャーをインストールすると、簡単にVimをインストールできます。

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"



brew install vim

# コマンドの参照元を表示する
which vim



ちなみに、Macで使えるパッケージ管理は、 MacPortFink


うまく動作しない場合は、 Xcodeをインストールした後、 CommandLine Toolsをインストールしてください。


また、 MacVimというものがあります。こちらは、ダウンロードしたファイルをダブルクリックするだけで、直感的にインストールすることができると思います。



MacVimを簡単なコマンドでターミナルから呼び出したい場合は、シェルの設定ファイルに、例えば、以下のように記述します。

## vim
export EDITOR=/Applications/MacVim.app/Contents/MacOS/Vim
alias vim='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'



操作



ここでは、最低限覚えておくと便利な操作方法を紹介して行きたいと思います。便利なプラグインもたくさんありますので、無理に覚える必要はないと思います。しかし、便利だと思った操作は、できるだけ繰り返し使ってみましょう。

Vimコマンド 覚書


基本操作



内容 キー
ヘルプの表示(「:q」で終了します) F1
上下左右の移動 k, j, h, l
ノーマルモードへの移行(何かあったら、とりあえずEscを押しましょう) Esc
入力モードへの移行 i
選択モードへの移行 v
行頭へ移動 0
行末へ移動 $
単語間の後方移動 w, W
単語間の前方移動 b, B
検索の後方移動(検索したいものを「f」の次に入力) f
検索の前方移動(検索したいものを「F」の次に入力) F
行を削除する dd
行をコピーする yy
行をカットする cc
やり直し u
やり直しの取り消し Ctrl-r
ウィンドウ間の移動 Ctrl+w+[k, j, h, l]
次のタグへ移動 %
次の空行への移動 }
前の空行への移動 {


基本コマンド



内容 コマンド
保存 :w
終了 :q
保存して終了 :wq
ファイルを開く :e ファイルへのパス
外部コマンドとの連携 :!「コマンド」
タブを開く :tabf
タブを閉じる :tabc
次のタブへ :tabn(ノーマルモードでの「gt」でも可)
新しいウィンドウを開く(垂直方向) :new 「ファイル」
新しいウィンドウを開く(水平方向) :vnew 「ファイル」



便利操作



キー 内容
di" 「"」で囲まれた文字列を削除
da" 「"」で囲まれた文字列を「"」ごと削除
yi" 「"」で囲まれた文字列をコピー
ya" 「"」で囲まれた文字列を「"」ごとコピー
ci" 「"」で囲まれた文字列をカット
ca" 「"」で囲まれた文字列を「"」ごとカット


ここで、気づいた方がいるかもしれませんが、最初のキーが上から順に Delete(削除)Yank(コピー)Cat(カット)を意味します。


そして、最後のキー「"」が一括操作する対象になります。つまり、この部分を変更すると、色々と応用出来ます。例えば、 yi'の場合は、「'」で囲まれた部分を一括コピー出来ます。


ちなみに、特殊表現として、 t=タグb=()B={}などがあります。例えば、以下のタグを削除するには、カーソルをタグの上の置き、 datとします。

<a href="http://mba-hack.blogspot.jp/">MBA-HACK</a>



便利コマンド


プログラマが知っておくべき100のVimコマンド


内容コマンド
文字列の一括置換(「hoge」という文字列を「vim」に変換) :%/s/hoge/vim/g
今のファイルと指定したファイルを比較 :vertical diffsplit



設定



Vimを設定するには、特定の形式でコマンドを実行するか、 ~/.vimrcに記述します。


制御文字、ファンクションキー



表記 キー
<Leader> \
<BS> BackSpace
<CR> Enter
<Left>
<Right>
<Up>
<Down>



モードに対応するコマンド



* N=ノーマル, I=インサート, C=コマンド, V=ビジュアル
* これらは、すべてモードを示すものです。

コマンド N I C V
map/noremap - -
nmap/nnoremap - - -
imap/inoremap - - -
cmap/cnoremap - - -
vmap/vnoremap - - -
map!/noremap! - -



mapオプション



<silent> コマンドラインへの表示をなしにする
<unique> すでにキーマップが存在する場合は、上書きしない
<buffer> バッファローカルなキーマッピングを定義する
<expr> 文字列を評価し、評価した結果をマップ先とする



変数の設定



let


let g:neocomplcache_enable_at_startup = 1


g:については、以下で解説します。


変数のスコープ



g: グローバル
b: バッファローカル
w: ウィンドウローカル
t: タブページローカル
s: スクリプトローカル
l: 関数ローカル
v: 組み込み変数
a: 関数の引数



下記の本が非常に参考になります。

Vimテクニックバイブル ~作業効率をカイゼンする150の技




プラグイン



通常のプラグインの導入方法


ここでは、プラグインの導入方法について紹介してきます。


基本的には、 ~/.vim/plugin/ フォルダを作って、その中に、拡張子が .vimとなっているファイルをコピーします。


例えば、HTMLにおける特殊文字を変換するプラグインである str2htmlentity.vimを導入してみましょう。


mkdir -p ~/.vim/plugin

curl http://www.serendip.ws/resource/str2htmlentity.vim > ~/.vim/plugin/str2htmlentity.vim



そして、以下を ~/.vimrcに追記しましょう。


vmap <silent> sx :Str2HtmlEntity<cr>
vmap <silent> sr :Entity2HtmlString<cr>



これで、HTMLの特殊文字に変換したい文字列をビジュアルモードで選択し、 sx を押すと、HTMLで表示できる形に文字列が変換されます。


プラグイン管理ツールを用いたプラグインの導入方法



VundleNeoBundleというものがあります。ここでは、より安定した Vundleでのプラグイン導入方法を紹介して行きたいと思います。



brew install git

git clone https://github.com/gmarik/vundle.git

echo "source ~/.vim/bundle/vundle/test/minirc.vim" >> ~/.vimrc

vim ~/.vim/bundle/vundle/test/minirc.vim




そして、 ハイライトされた行にインストールしたいプラグインを特定の形式に従って、記述します。


set nocompatible
syntax on
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'

filetype plugin indent on



例えば、 vimshellvimprocをインストールしたければ、以下のようになります。


set nocompatible
syntax on
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
Bundle 'Shougo/vimshell'
Bundle 'Shougo/vimproc'
filetype plugin indent on



そして、vimを起動し、以下のコマンドを実行します。

:BundleInstall

ちなみに、vimshellのように、動作には、他のプラグインやツールを導入する必要が出てくる場合や特別な手順が必要になる場合があります。よって、プラグインをインストールする場合は、該当プラグインのドキュメントなどを参照してください。


ここで、 vimshellを動作するためには、 vimprocをインストールしたあと、以下の手順が必要になります。


cd ~/.vim/bundle/vimproc/

make -f make_cygwin.mak

vim



なお、もしWindowsで以上の手順を実現したい場合は、 こちらが参考になります。


基本設定



iTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築する


" <Leader>キーを「,」に変更
let mapleader = ","

" スクロール時の余白確保
set scrolloff=5

" 一行に長い文章を書いていても自動折り返しをしない
set textwidth=0

" 他で書き換えられたら自動で読み直す
set autoread

" 編集中でも他のファイルを開けるようにする
set hidden

" バックスペースでなんでも消せるように
set backspace=indent,eol,start

" テキスト整形オプション,マルチバイト系を追加
set formatoptions=lmoq

" ビープをならさない
set vb t_vb=

" Exploreの初期ディレクトリ
set browsedir=buffer

" カーソルを行頭、行末で止まらないようにする
set whichwrap=b,s,h,l,<,>,[,]

" コマンドをステータス行に表示
set showcmd

" 現在のモードを表示
set showmode

" viminfoファイルの設定
set viminfo='50,<1000,s100,\"50

" モードラインは無効
set modelines=0



エンコード



" 改行文字
set ffs=unix,dos,mac

" デフォルトエンコーディング
set encoding=utf-8

" cvsの時は文字コードをeuc-jpに設定
autocmd FileType cvs :set fileencoding=euc-jp

" 以下のファイルの時は文字コードをutf-8に設定
autocmd FileType svn :set fileencoding=utf-8
autocmd FileType js :set fileencoding=utf-8
autocmd FileType css :set fileencoding=utf-8
autocmd FileType html :set fileencoding=utf-8
autocmd FileType xml :set fileencoding=utf-8
autocmd FileType java :set fileencoding=utf-8
autocmd FileType scala :set fileencoding=utf-8

" ワイルドカードで表示するときに優先度を低くする拡張子
set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc

" 指定文字コードで強制的にファイルを開く
command! Cp932 edit ++enc=cp932
command! Eucjp edit ++enc=euc-jp
command! Iso2022jp edit ++enc=iso-2022-jp
command! Utf8 edit ++enc=utf-8
command! Jis Iso2022jp
command! Sjis Cp932



インデント



" 自動でインデント
set autoindent

" ペースト時にautoindentを無効に(onにするとautocomplpop.vimが動かない)
set paste

" 新しい行を開始したときに、新しい行のインデントを現在行と同じ量にする
set smartindent

" Cプログラムファイルの自動インデントを始める
set cindent

" softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
set tabstop=2 shiftwidth=2 softtabstop=0

if has("autocmd")
"ファイルタイプの検索を有効にする
filetype plugin on
"そのファイルタイプにあわせたインデントを利用する
filetype indent on
" これらのftではインデントを無効に
"autocmd FileType php filetype indent off
autocmd FileType apache     setlocal sw=4 sts=4 ts=4 et
autocmd FileType aspvbs     setlocal sw=4 sts=4 ts=4 et
autocmd FileType c          setlocal sw=4 sts=4 ts=4 et
autocmd FileType cpp        setlocal sw=4 sts=4 ts=4 et
autocmd FileType cs         setlocal sw=4 sts=4 ts=4 et
autocmd FileType css        setlocal sw=2 sts=2 ts=2 et
autocmd FileType diff       setlocal sw=4 sts=4 ts=4 et
autocmd FileType eruby      setlocal sw=4 sts=4 ts=4 et
autocmd FileType html       setlocal sw=2 sts=2 ts=2 et
autocmd FileType java       setlocal sw=4 sts=4 ts=4 et
autocmd FileType javascript setlocal sw=2 sts=2 ts=2 et
autocmd FileType perl       setlocal sw=4 sts=4 ts=4 et
autocmd FileType php        setlocal sw=4 sts=4 ts=4 et
autocmd FileType python     setlocal sw=4 sts=4 ts=4 et
autocmd FileType ruby       setlocal sw=2 sts=2 ts=2 et
autocmd FileType haml       setlocal sw=2 sts=2 ts=2 et
autocmd FileType sh         setlocal sw=4 sts=4 ts=4 et
autocmd FileType sql        setlocal sw=4 sts=4 ts=4 et
autocmd FileType vb         setlocal sw=4 sts=4 ts=4 et
autocmd FileType vim        setlocal sw=2 sts=2 ts=2 et
autocmd FileType wsh        setlocal sw=4 sts=4 ts=4 et
autocmd FileType xhtml      setlocal sw=4 sts=4 ts=4 et
autocmd FileType xml        setlocal sw=4 sts=4 ts=4 et
autocmd FileType yaml       setlocal sw=2 sts=2 ts=2 et
autocmd FileType zsh        setlocal sw=4 sts=4 ts=4 et
autocmd FileType scala      setlocal sw=2 sts=2 ts=2 et
endif



表示



" 括弧の対応をハイライト
set showmatch

" 行番号表示
set number

" 不可視文字表示
set list

" 不可視文字の表示形式
set listchars=tab:>.,trail:_,extends:>,precedes:<

" 印字不可能文字を16進数で表示
set display=uhex

" 全角スペースの表示
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
match ZenkakuSpace / /

" カーソル行をハイライト
set cursorline

" カレントウィンドウにのみ罫線を引く
augroup cch
autocmd! cch
autocmd WinLeave * set nocursorline
autocmd WinEnter,BufRead * set cursorline
augroup END

hi clear CursorLine
hi CursorLine gui=underline
highlight CursorLine ctermbg=black guibg=black

" コマンド実行中は再描画しない
set lazyredraw

" 高速ターミナル接続を行う
set ttyfast

" 個別のタブの表示設定をします
function! GuiTabLabel()
" タブで表示する文字列の初期化をします
let l:label = ''

" タブに含まれるバッファ(ウィンドウ)についての情報をとっておきます。
let l:bufnrlist = tabpagebuflist(v:lnum)

" 表示文字列にバッファ名を追加します
" パスを全部表示させると長いのでファイル名だけを使います 詳しくは help fnamemodify()
let l:bufname = fnamemodify(bufname(l:bufnrlist[tabpagewinnr(v:lnum) - 1]), ':t')
" バッファ名がなければ No title としておきます。ここではマルチバイト文字を使わないほうが無難です
let l:label .= l:bufname == '' ? 'No title' : l:bufname

" タブ内にウィンドウが複数あるときにはその数を追加します(デフォルトで一応あるので)
let l:wincount = tabpagewinnr(v:lnum, '$')
if l:wincount > 1
let l:label .= '[' . l:wincount . ']'
endif

" このタブページに変更のあるバッファがるときには '[+]' を追加します(デフォルトで一応あるので)
for bufnr in l:bufnrlist
if getbufvar(bufnr, "&modified")
let l:label .= '[+]'
break
endif
endfor

" 表示文字列を返します
return l:label
endfunction

" guitablabel に上の関数を設定します
" その表示の前に %N というところでタブ番号を表示させています
set guitablabel=%N:\ %{GuiTabLabel()}



クリップボード




:versionを実行して、 clipboardxterm_clipboardなどが +になっていない場合は、必要なものをインストールします。

sudo apt-get -y install vim-gtk vim-athena vim-gnome



そして、以下の様な設定を行います。


" コピーしたものがレジスタにも入るようにする
" http://nanasi.jp/articles/howto/editing/clipboard.html
set clipboard=unnamed

" ビジュアルモードで選択したテキストが、クリップボードに入るようにする
set clipboard=autoselect

" 上の両方
" set clipboard=autoselect,unnamed

" 全部盛り
" http://layzie.hatenablog.com/entry/20111013/1318438227
set clipboard=unnamedplus,unnamed



ファイル



" ディレクトリを開いたファイルと同じ場所へ移動する
" http://d.hatena.ne.jp/homaju/20130131/1359614451
au BufEnter * execute 'lcd ' fnameescape(expand('%:p:h'))



バックアップ



" バックアップ取らない
set nobackup

" スワップファイル作らない
set noswapfile



日本語入力



Vim/GVimで「日本語入力固定モード」を使用する

Vimで挿入モードから抜ける時に英数入力に切り替える


ちなみに、Macでは、 KeyRemap4MacBook を使うと、ノーマルモードに移行した時に、自動でIMEをオフにするなどの設定が可能です。




<?xml version="1.0"?>
<root>
<list>
<item>
<name>LeaveInsMode with EISUU(Terminal)</name>
<identifier>private.app_terminal_esc_with_eisuu</identifier>
<only>TERMINAL</only>
<autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::J, VK_CONTROL, KeyCode::J, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
</item>
</list>
</root>




これで、Terminal上で EscCtrl+j を押した場合、IMEがOFFになります。


inoremap <silent> <C-j> <ESC>




ヤンク/ペースト



" F11でインデントせずにペースト(ペーストモード利用)
" http://qiita.com/items/019250dbca167985fe32
imap <F11> <nop>
set pastetoggle=<F11>

" ノーマルモード時に自動でペーストモードを解除する
autocmd InsertLeave * set nopaste

" インデントせずにペースト
" http://mba-hack.blogspot.jp/2013/01/vimc-v.html
" :a! → C-v →sc

" カーソル位置の単語をyankする
nnoremap vy vawy

" 矩形選択で自由に移動する
set virtualedit+=block

"ビジュアルモード時vで行末まで選択
vnoremap v $h



アンドゥ/リドゥ



" Vimを終了しても undo 履歴を復元する
" http://vim-users.jp/2010/07/hack162/
" undo 履歴を保存するディレクトリを指定する
set undodir=./.vimundo,~/.vimundo

" バッファの保存時に undo 履歴をファイルに保存する(すべてのファイル対象)
set undofile
if has('persistent_undo')
set undodir=./.vimundo,~/.vimundo
augroup vimrc-undofile
autocmd!
autocmd BufReadPre ~/* setlocal undofile
augroup END
endif

" アンドゥを極める
" http://www.soum.co.jp/misc/v/vim-no-susume/5.html



レジスタ



" vim キー操作記録(マクロのような感じ。レジスターを利用)
" http://choitech.blog.shinobi.jp/vi-vim/vim%20%E3%82%AD%E3%83%BC%E6%93%8D%E4%BD%9C%E8%A8%98%E9%8C%B2-%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E6%84%9F%E3%81%98%E3%80%82%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%92%E5%88%A9%E7%94%A8-
" :reg          : 現状の記録内容を表示
" qq            : レジスターqに記録開始
" q             : 記録終了
" @q            : レジスターqの記録を実行
" @@            : リピート
" "qp           : レジスターqの記録内容をカーソル行に出力
" "ayy          : レジスターaに現在の行内容をコピー格納
" "add          : レジスターaに現在の行内容を切り取り格納
" @a            : レジスターaの記録を実行
" :%normal @q   : レジスターqの内容を全行で実行
" :normal @q    : レジスターqの内容を現在の行で実行
" "=100*100     : レジスター=に計算式を入力。直後にpで計算結果がカーソル位置に入力される。



補完



" 括弧を自動補完 (改造版)
inoremap {{ {}<LEFT>
inoremap [[ []<LEFT>
inoremap (( ()<LEFT>
inoremap "" ""<LEFT>
inoremap '' ''<LEFT>
vnoremap { "zdi^V{<C-R>z}<ESC>
vnoremap [ "zdi^V[<C-R>z]<ESC>
vnoremap ( "zdi^V(<C-R>z)<ESC>
vnoremap " "zdi^V"<C-R>z^V"<ESC>
vnoremap ' "zdi'<C-R>z'<ESC>

" 括弧を自動補完
" http://d.hatena.ne.jp/spiritloose/20061113/1163401194
"inoremap { {}<LEFT>
"inoremap [ []<LEFT>
"inoremap ( ()<LEFT>
"inoremap " ""<LEFT>
"inoremap ' ''<LEFT>
"vnoremap { "zdi^V{<C-R>z}<ESC>
"vnoremap [ "zdi^V[<C-R>z]<ESC>
"vnoremap ( "zdi^V(<C-R>z)<ESC>
"vnoremap " "zdi^V"<C-R>z^V"<ESC>
"vnoremap ' "zdi'<C-R>z'<ESC>



編集その他



マーカー文字列を埋め込んで、ソースコードを折り畳み表示する


" インサートモードのjfでEsc
inoremap <silent> jf <ESC>

" 折りたたみ機能を使う
" http://nanasi.jp/articles/howto/fold/fold-marker.html
set foldmethod=marker

" 最後に変更されたテキストを選択する
nnoremap gc  `[v`]
vnoremap gc <C-u>normal gc<Enter>
onoremap gc <C-u>normal gc<Enter>



インサートモードでの移動



" insert mode での移動
inoremap  <C-e> <END>
inoremap  <C-a> <HOME>

" インサートモードでもhjklで移動
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>



スクロール移動



カーソル移動速度などを変更したい場合は、上記で紹介した KeyRemap4MacBookを使います。


Vimで超スムーズスクロール


"<PageDown>と<PageUp>もスムーズスクロール(smooth_scroll.vim)
" http://blog.blueblack.net/item_219
nnoremap <PageDown> <C-F>
nnoremap <PageUp> <C-B>

" スムーズスクロールの実現
map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>



バッファ移動



" spaceで次のbufferへ。back-spaceで前のbufferへ
nmap <Space><Space> :MBEbn<CR>
nmap <BS><BS> :MBEbp<CR>

" F4で前のバッファ
map <F4> <ESC>:bp<CR>
" F4で次のバッファ
map <F5> <ESC>:bn<CR>
" F5でバッファを削除する
map <F6> <ESC>:bnext \| bdelete #<CR>
command! Bw :bnext \| bdelete #



タブ移動



Vim のタブをそこそこ活用する


" タブ移動を簡単にする
" http://doruby.kbmj.com/aisi/20091218/Vim__
nnoremap <silent> <leader>tf :<c-u>tabfirst<cr>
nnoremap <silent> <leader>tl :<c-u>tablast<cr>
nnoremap <silent> <leader>tn :<c-u>tabnext<cr>
nnoremap <silent> <leader>tN :<c-u>tabNext<cr>
nnoremap <silent> <leader>tp :<c-u>tabprevious<cr>
nnoremap <silent> <leader>te :<c-u>tabedit<cr>
nnoremap <silent> <leader>tc :<c-u>tabclose<cr>
nnoremap <silent> <leader>to :<c-u>tabonly<cr>
nnoremap <silent> <leader>ts :<c-u>tabs<cr>



ウィンドウ移動



" CTRL-hjklでウィンドウ移動
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
nnoremap <C-h> <C-w>h

"フレームサイズを怠惰に変更する
map <kPlus> <C-W>+
map <kMinus> <C-W>-



Emacs風の移動



若干Emacs風味なvimのキー設定


" Emacs風に移動する
" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/tips/vim-key-emacs
"カーソル一文字単位移動
inoremap <silent> <C-s> <Left>
inoremap <silent> <C-d> <Right>

"単語単位移動(行末で止めたい場合)
inoremap <silent> <C-f> <C-r>=MyMoveWord_i('w')<CR>
inoremap <silent> <C-b> <C-r>=MyMoveWord_i('b')<CR>

"単語単位移動(行末で止まる必要がない場合)
inoremap <silent> <C-f> <S-Left>
inoremap <silent> <C-b> <S-Right>

"非補完時は行移動をj,kと同じ動作にして補完中は候補選択
inoremap <silent> <expr> <C-p>  pumvisible() ? "\<C-p>" : "<C-r>=MyExecExCommand('normal k')<CR>"
inoremap <silent> <expr> <C-n>  pumvisible() ? "\<C-n>" : "<C-r>=MyExecExCommand('normal j')<CR>"
inoremap <silent> <expr> <Up>   pumvisible() ? "\<C-p>" : "<C-r>=MyExecExCommand('normal k')<CR>"
inoremap <silent> <expr> <Down> pumvisible() ? "\<C-n>" : "<C-r>=MyExecExCommand('normal j')<CR>"

"行頭へ
inoremap <silent> <C-a> <C-r>=MyJumptoBol(' 。、.,/!?「」')<CR>
"行末へ
inoremap <silent> <C-e> <C-r>=MyJumptoEol(' 。、.,/!?「」')<CR>

"カーソル前の文字削除
inoremap <silent> <BS>  <C-g>u<BS>
inoremap <silent> <C-h> <C-g>u<C-h>
"カーソル後の文字削除
inoremap <silent> <Del> <C-g>u<Del>
inoremap <silent> <C-g> <C-g>u<Del>

"カーソル位置から前の単語を削除
inoremap <silent> <C-w> <C-g>u<C-r>=MyExecExCommand('normal! db')<CR>
"カーソル位置から後の単語を削除
inoremap <silent> <C-t> <C-g>u<C-r>=MyDeleteWord()<CR>

"最後に挿入した文字列を挿入
inoremap <silent> <C-z> <C-g>u<C-a>

"現在行をインデント
inoremap <silent> <Tab>   <C-g>u<C-t>
inoremap <silent> <S-Tab> <C-g>u<C-d>

"undo
inoremap <silent> <C-u> <C-g>u<C-r>=MyExecExCommand('undo', 'onemore')<CR>

"2ストロークキー使用
if 1
"カーソル以降削除
inoremap <silent> <C-k><C-k> <C-g>u<C-r>=MyExecExCommand('normal! D', 'onemore')<CR>
"redo
inoremap <silent> <C-k><C-r> <C-r>=MyExecExCommand('redo', 'onemore')<CR>
"行連結
inoremap <silent> <C-k><C-j> <C-g>u<C-r>=MyExecExCommand('normal! J')<CR>
"新行挿入
inoremap <silent> <C-k><C-n> <C-g>u<C-r>=MyExecExCommand("call cursor(line('.'), col('$'))")<CR><CR>
endif

"メタ(alt)キー使用
if 0
"カーソル以降削除
inoremap <silent> <C-k> <C-g>u<C-r>=MyExecExCommand('normal! D', 'onemore')<CR>
"リドゥ
inoremap <silent> <M-r> <C-r>=MyExecExCommand('redo', 'onemore')<CR>
"行連結
inoremap <silent> <M-j> <C-g>u<C-r>=MyExecExCommand('normal! J')<CR>
"新行挿入
inoremap <silent> <M-n> <C-g>u<C-r>=MyExecExCommand("call cursor(line('.'), col('$'))")<CR><CR>
endif

""""""""""""""""""""""""""""""
"sepが空でなければ、sepをセパレータとしてジャンプ。
"見つからなければ見かけの行頭へ。
"カーソル位置が見かけの行頭の場合は真の行頭へ。
""""""""""""""""""""""""""""""
function! MyJumptoBol(sep)
if col('.') == 1
call cursor(line('.')-1, col('$'))
call cursor(line('.'), col('$'))
return ''
endif
if matchend(strpart(getline('.'), 0, col('.')), '[[:blank:]]\+') >= col('.')-1
silent exec 'normal! 0'
return ''
endif
if a:sep != ''
call search('[^'.a:sep.']\+', 'bW', line("."))
if col('.') == 1
silent exec 'normal! ^'
endif
return ''
endif
exec 'normal! ^'
return ''
endfunction

""""""""""""""""""""""""""""""
"sepが空でなければ、sepをセパレータとしてジャンプ。
"見つからなければ行末へ。
""""""""""""""""""""""""""""""
function! MyJumptoEol(sep)
if col('.') == col('$')
silent exec 'normal! w'
return ''
endif

if a:sep != ''
let prevcol = col('.')
call search('['.a:sep.']\+[^'.a:sep.']', 'eW', line("."))
if col('.') != prevcol
return ''
endif
endif
call cursor(line('.'), col('$'))
return ''
endfunction

""""""""""""""""""""""""""""""
"行末でも停止する単語単位移動コマンド
""""""""""""""""""""""""""""""
function! MyMoveWord_i(cmd)
let isEol = 0
if col('$') == col('.')
let isEol = 1
endif
let prevline = line('.')
silent exec 'normal! '.a:cmd
if line('.') == prevline
return ''
endif
if a:cmd == 'w'
if isEol == 0
call cursor(prevline, 0)
call cursor(line('.'), col('$'))
endif
if line('.') - prevline > 1
call cursor(prevline+1, 0)
call cursor(line('.'), col('$'))
endif
elseif a:cmd == 'b'
call cursor(line('.'), col('$'))
if prevline - line('.') > 1
call cursor(prevline-1, 0)
call cursor(line('.'), col('$'))
endif
endif
return ''
endfunction

""""""""""""""""""""""""""""""
"カーソル以降の単語削除
""""""""""""""""""""""""""""""
function! MyDeleteWord()
if col('.') == col('$')
return ''
endif
let save_cursor = getpos('.')
silent exec 'normal! wge'
if save_cursor[1] != line('.') || (save_cursor[2] > col('.'))
call setpos('.', save_cursor)
return MyExecExCommand('normal! dw', 'onemore')
endif
silent exec 'normal! v'
call setpos('.', save_cursor)
return MyExecExCommand('normal! d')
endfunction

""""""""""""""""""""""""""""""
"IMEの状態とカーソル位置保存のため<C-r>を使用してコマンドを実行。
""""""""""""""""""""""""""""""
function! MyExecExCommand(cmd, ...)
let saved_ve = &virtualedit
let index = 1
while index <= a:0
if a:{index} == 'onemore'
silent setlocal virtualedit+=onemore
endif
let index = index + 1
endwhile

silent exec a:cmd
if a:0 > 0
silent exec 'setlocal virtualedit='.saved_ve
endif
return ''
endfunction



移動その他



" カーソルを表示行で移動する。論理行移動は<C-n>,<C-p>
nnoremap h <Left>
nnoremap j gj
nnoremap k gk
nnoremap l <Right>
nnoremap <Down> gj
nnoremap <Up>   gk

" 0, 9で行頭、行末へ
nmap 1 0
nmap 0 ^
nmap 9 $

" 最後に編集された位置に移動
nnoremap gb '[
nnoremap gp ']

" 対応する括弧に移動
nnoremap ( %
nnoremap ) %



カラースキームの設定



" カラースキームの指定
colorscheme molokai

" 背景色の傾向
set background=light

" ハイライト on
syntax enable



ターミナルカラーの設定



" ターミナルタイプによるカラー設定
" https://github.com/yuroyoro/dotfiles
if &term =~ "xterm-256color" || "screen-256color"
" 256色
set t_Co=256
set t_Sf= [3%dm
set t_Sb= [4%dm
elseif &term =~ "xterm-debian" || &term =~ "xterm-xfree86"
set t_Co=16
set t_Sf= [3%dm
set t_Sb= [4%dm
elseif &term =~ "xterm-color"
set t_Co=8
set t_Sf= [3%dm
set t_Sb= [4%dm
endif

hi PmenuSel cterm=reverse ctermfg=33 ctermbg=222 gui=reverse guifg=#3399ff guibg=#f0e68c



補完候補のカラー設定



" 補完候補の色づけ for vim7
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


素早くノーマルモードに移る方法



「C-j」や「jj」に Escを設定すると、素早くノーマルモードに移れて楽です。なお、下記の設定をしなくてもC-[でもできます。


" インサートモードのjjでEsc
inoremap <silent> jj <ESC>
inoremap <silent> <C-j> <esc>



前回編集していた場所にカーソルを移動させる



" 前回編集していた場所にカーソルを移動させる
" http://d.hatena.ne.jp/lurker/20060508/1147091810
au BufWritePost * mkview
autocmd BufReadPost * loadview



日本語のヘルプを使う



vimで日本語ヘルプをつかう


" 日本語ヘルプ
" http://qiita.com/items/5e83f918a141b665cbba
NeoBundle 'vim-jp/vimdoc-ja'


" vimdoc-ja
helptags ~/.vim/bundle/vimdoc-ja/doc


そして、 :NeoBundleInstallを実行すると、 F1 または、 :hで日本語ヘルプを参照できます。



カーソル下のキーワードをヘルプでひく



" カーソル下のキーワードをヘルプでひく
nnoremap <C-i><C-i> :<C-u>help<Space><C-r><C-w><Enter>



置換を便利にする設定




"" 置換を便利にする設定 {{{
" https://github.com/yuroyoro/dotfiles/blob/master/.vimrc.search
"選択した文字列を置換
vnoremap /r "xy;%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left>

"s*置換後文字列/g<Cr>でカーソル下のキーワードを置換
nnoremap <expr> s* ':%substitute/\<' . expand('<cword>') . '\>/'
"" }}}

" カーソル位置の単語をヤンクした単語に置換
" https://sites.google.com/site/fudist/Home/vim-nihongo-ban/tips#TOC--8
nnoremap <silent> ciy ciw<C-r>0<ESC>:let@/=@1<CR>:noh<CR>
nnoremap <silent> cy   ce<C-r>0<ESC>:let@/=@1<CR>:noh<CR>
vnoremap <silent> cy   c<C-r>0<ESC>:let@/=@1<CR>:noh<CR>



.(ドット)を極める



Just Press Dot Key


最後に編集したコマンドをもう一度実行


"window分割していないとき、<C-w><C-w>で裏バッファへ切り替え。
nnoremap <silent> <C-w><C-w> :<C-u>call MyWincmdW()<CR>
nnoremap <silent> <C-w>w :<C-u>call MyWincmdW()<CR>
function! MyWincmdW()
let pn = winnr()
silent! wincmd w
if pn == winnr()
silent! b#
endif
endfunction



矩形選択を使って、番号を順番に付ける方法



矩形ビジュアルモードを利用した編集を使いこなす


vimのカスタマイズとTips ~縦に連番を入力する


例えば、以下の様な記述があったとします。

fuga[0]
fuga[0]
fuga[0]




これを以下のようにしたい場合、

fuga[0]
fuga[1]
fuga[2]




以下の設定ファイルを書き、 数字を選択したあと、 3coとします。

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進数として扱うには、設定ファイルに以下を書きます。

set nrformats-=octal



思い通りに数を増加させる方法




Vim-Tips ~数の増減を行うショートカット


C-aで数字を増加することができます。そして、 q?qで記録と終了ができます。この機能を組み合わせることで、番号を増加させることができます。

入力 変換前 変換後
qayypt+<C-a>$<C-a>q6@a =c1+d2 =c1+d2 =c2+d3 =c3+d4 =c4+d5 =c5+d6



.vimrcや.gvimrcを編集するためのKey-mappingを定義



簡単にvimrcを編集する

"" .vimrcの編集を簡単にする{{{
" http://vim-users.jp/2009/09/hack74/

" .vimrcや.gvimrcを編集するためのKey-mappingを定義する
nnoremap <silent> <Space>ev  :<C-u>edit $MYVIMRC<CR>
nnoremap <silent> <Space>eg  :<C-u>edit $MYGVIMRC<CR>

" .vimrcや.gvimrcの変更を反映するためのKey-mappingを定義する
nnoremap <silent> <Space>rv :<C-u>source $MYVIMRC \| if has('gui_running') \| source $MYGVIMRC \| endif <CR>
nnoremap <silent> <Space>rg :<C-u>source $MYGVIMRC<CR>

" .vimrcや.gvimrcを変更すると、自動的に変更が反映されるようにする
augroup MyAutoCmd
autocmd!
augroup END

if !has('gui_running') && !(has('win32') || has('win64'))
" .vimrcの再読込時にも色が変化するようにする
autocmd MyAutoCmd BufWritePost $MYVIMRC nested source $MYVIMRC
else
" .vimrcの再読込時にも色が変化するようにする
autocmd MyAutoCmd BufWritePost $MYVIMRC source $MYVIMRC |
\if has('gui_running') | source $MYGVIMRC
autocmd MyAutoCmd BufWritePost $MYGVIMRC if has('gui_running') | source $MYGVIMRC
endif
"" }}}



ファイラーを起動を簡単にする



" ファイラー起動
nnoremap <silent><Space>j    :Explore<CR>



簡単に連続コピペする方法



vimの連続コピペできない問題

vnoremap <silent> <C-p> "0p<CR>




インデントさせずにペーストする方法



" F11でインデントせずにペースト(ペーストモード利用)
" http://qiita.com/items/019250dbca167985fe32
imap <F11> <nop>
set pastetoggle=<F11>

" ノーマルモード時に自動でペーストモードを解除する
autocmd InsertLeave * set nopaste

" インデントせずにペースト
" http://mba-hack.blogspot.jp/2013/01/vimc-v.html
" :a! → C-v →sc


NeoBundle



mkdir -p ~/.vim/bundle

git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim



" NeoBundleでプラグイン管理
" http://qiita.com/items/ab2ad83ddbaf2f6ce7fb
" http://daisuzu.hatenablog.com/entry/2012/05/06/204019
" http://d.hatena.ne.jp/osyo-manga/20110425/1303702655
" http://wp.graphact.com/2012/11/09/hello-neobundle-vim/

filetype off

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

" 以下にプラグインを記述
NeoBundle 'ujihisa/unite-colorscheme'
NeoBundle 'vim-scripts/newspaper.vim'
" .
" .
" .

filetype plugin indent on



そして、 :NeoBundleInstallを実行します。


YankRing.vim



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


YankRing.vimのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'YankRing.vim'




そして、 :NeoBundleInstallを実行してください。シェルから vim +NeoBundleInstallでもできます。


YankRing.vimの使い方



私は、以下の様なキーマップを使用しています。これで、 ,yを押すことで、ヤンク履歴が参照できます。また、ペーストしたあと、 C-pで古い履歴、 C-nで新しい履歴に置き換えることができます。


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




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

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




タグ関連の設定


" タグ関連の設定
" set tags
if has("autochdir")
  " 編集しているファイルのディレクトリに自動で移動
  set autochdir
  set tags=tags;
else
  set tags=./tags,./../tags,./*/tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tags
endif
set notagbsearch

" tags-and-searchesを使い易くする
" http://whileimautomaton.net/2008/08/vimworkshop3-kana-presentation
nnoremap t  <Nop>
"「飛ぶ」
nnoremap tt  <C-]>
"「進む」
nnoremap tj  ;<C-u>tag<CR>
"「戻る」
nnoremap tk  ;<C-u>pop<CR>
"履歴一覧
nnoremap tl  ;<C-u>tags<CR>


undotree.vim



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



undotree.vimのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'mbbill/undotree'




そして、 :NeoBundleInstallを実行してください。


undotree.vimの使い方



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

" undo履歴を表示する。? でヘルプを表示
" undotree.vim
" 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は、バッファ一覧を表示し、ショートカットですぐに開けるようにしてくれるプラグインです。その他、詳細情報も表示してくれるので、わかりやすいと思います。


easybuffer.vimのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'troydm/easybuffer.vim'




そして、 :NeoBundleInstallを実行してください。


easybuffer.vimの使い方



:EasyBufferを実行します。



DirDo.vim



argdo



argdoは、何かのコマンドを一括実行したいときに使います。例えば、あるディレクトリに複数の .rbファイルがあるとします。そして、そのファイルの特定のキーワードを一括変換したいときは以下のようにします。

:argadd *.rb

:argdo %s/hoge/hehe/g | update




DirDo.vimのインストール



ディレクトリを指定して、 コマンドを一括実行したいときは、 DirDo.vimが便利です。


NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'vim-scripts/DirDo.vim'




そして、 :NeoBundleInstallを実行してください。


DirDo.vimの使い方



:DDD app/controllers

:DDP *.rb

:DDO :%s/hoge/hoge/g | update





switch.vim



switch.vimのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'AndrewRadev/switch.vim'




そして、 :NeoBundleInstallを実行してください。


switch.vimの使い方



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


" 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>




すると、 foofの部分にカーソルが乗っている状態で +を押すと、 foobarに切り替わります。


そして、繰り返し +を押すと元に戻ります。これは、 barbの位置にカーソルが乗っているからです。




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


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


taku-o/vim-toggle

zef/vim-cycle


vim-easymotion



このプラグインは、移動目安をアルファベットで明示してくれるプラグインです。今まで目分量で移動していた人は、このプラグインを使用することで、より正確に移動ポイントが判断でき、かつ移動もスムーズに行えるようになると思います。


vim-easymotionのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'Lokaltog/vim-easymotion'




そして、 :NeoBundleInstallを実行してください。


vim-easymotionの使い方



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


" 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



このプラグインは、 fの検索移動を拡張するプラグインです。行をまたいで、かつ次々とキーワード間を移動出来ます。


clever-f.vimのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。


NeoBundle 'rhysd/clever-f.vim'




そして、 :NeoBundleInstallを実行してください。


clever-f.vimの使い方



fを押したあと、検索したい1文字を入力し、続いて fを押します。


vim-seek



このプラグインは、上で紹介したプラグインと似ていて、2文字検索で移動出来ます。


vim-seekのインストール



NeoBundleを導入していることを前提に解説します。以下を filetype plugin indent onの上に追記します。

NeoBundle 'goldfeld/vim-seek'




そして、 :NeoBundleInstallを実行してください。


vim-seekの使い方



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


visualmark.vim



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


visualmark.vimのインストール



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

mv visualmark.vim ~/.vim/plugin/




visualmark.vimの使い方



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

" visualmark
" 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




creload.vim



creload.vimの動作に必要なもの




タイトル 内容
creload.scpt ChromeをリロードするAppleScript
watchmedo ファイルの変化を監視し、変化があれば、一定の動作を選択できるコマンド
pkill タイトルでプロセスを停止できるコマンド
creload.vim Chromeをリロードするコマンドを定義するVimScript




creload.scpt




tell application "Google Chrome" to reload active tab of window 1




ちなみに、以下のようにも実行出来ます。

$ osascript -e 'tell application "Google Chrome" to reload active tab of window 1'




watchmedo




sudo easy_install -U setuptools

sudo easy_install pip

sudo pip install watchdog




pkill




brew install proctools




creload.vim




Chromeで開くファイルを指定する場合 :
command -nargs=1 -complete=file ChromeReload silent !open -a Google\ Chrome <args> && watchmedo shell-command -c "osascript $HOME/bin/creload.scpt" $HOME/ &

command! -bar ChromeReloadStop silent !pkill -f watchmedo




ちなみに、現在開いているファイルをChromeで開く場合は、以下のように書きます。


現在開いているファイル :
command! -bar ChromeReload silent !open -a Google\ Chrome "%" && watchmedo shell-command -c "osascript $HOME/bin/creload.scpt" $HOME/ &

command! -bar ChromeReloadStop silent !pkill -f watchmedo




これで、 :ChromeReload [ファイルパス]で指定したファイル(ホームフォルダ以下限定)を Chrome で開き、該当ファイルを保存すると、Chrome がリロードされるようになります。


また、ホームフォルダの監視を止めたい場合は、 :ChromeReloadStopを実行します。


ちなみに、Chromeでのプレビューが文字化けしてしまう場合は、Chromeのエンコードの設定(表示 > エンコード)を utf-8にしてください。


Chromeのエンコードのデフォルト設定を変更する場合は、以下のように設定します。


解説がちょっとわかりにくいという方は、こちらの記事を参考にしてください。



vim-submode



vim-submodeというプラグインがあります。これを使用することで、連続で入力したいコマンドがかなり使いやすくなります。例えば、ウィンドウサイズの変更です。

インストールには、 neobundle.vimを使用します。 filetype plugin indent onの上に NeoBundle 'kana/vim-submode'と記述してください。

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



そして、 :NeoBundleInstallコマンドを実行します。

例えば、ウィンドウサイズの変更を簡単にしたい場合は、設定ファイルは以下のように書きます。

" 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, -...を押すと、サイズを縮小できます。ちなみに、ここでの ...の部分は、その前に記述したキーの連続押しを意味します。



visSum.vim



visSum.vimは、Vim上で計算の結果を表示してくれるプラグインです。計算したい数字を選択し、 <Leader>suを押すと、ステータスラインの下に計算結果が表示されます。


インストールは以下のようにします。

NeoBundle 'vim-scripts/visSum.vim'



vim +NeoBundleInstall


以下を追記するとこで、 <Leader>spで計算結果をペーストできます。

" visSum.vim
" http://vimblog.com/blog/2012/08/31/calculate-the-sum-of-selected-numbers-with-vissum-dot-vim/
nmap <Leader>sp "sp



unite.vim



install



タイトル 内容
unite.vim 直感的なインターフェイスを提供するプラグイン

VundleNeoBundleなどを導入していることを前提として、以下を設定ファイルに記述します。


NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/vimproc'


そして、 :NeoBundleInstallというコマンドを実行すれば、 unite.vimをインストール出来ます。


cd ~/.vim/bundle/vimproc

make -f make_gcc.mak


ちなみに、 makeするファイルは、OSによって異なりますので、 ドキュメントを参考にしてください。


また、基本的な使い方は、unite.vim について語るを参考にしてください。


setting



使い方としては、以下の様な設定を書き、 <Leader>fを押すことで、 unite.vimが起動するようにしておくと便利です。これが、 [unite]という部分に該当します。あとは、その後に続くキーを押せば、様々な動作を実現出来ます。


"" unite.vim {{{
" The prefix key.
nnoremap    [unite]   <Nop>
nmap    <Leader>f [unite]

" unite.vim keymap
" https://github.com/alwei/dotfiles/blob/3760650625663f3b08f24bc75762ec843ca7e112/.vimrc
nnoremap [unite]u  :<C-u>Unite -no-split<Space>
nnoremap <silent> [unite]f :<C-u>Unite<Space>buffer<CR>
nnoremap <silent> [unite]b :<C-u>Unite<Space>bookmark<CR>
nnoremap <silent> [unite]m :<C-u>Unite<Space>file_mru<CR>
nnoremap <silent> [unite]r :<C-u>UniteWithBufferDir file<CR>
nnoremap <silent> ,vr :UniteResume<CR>

" vinarise
let g:vinarise_enable_auto_detect = 1

" unite-build map
nnoremap <silent> ,vb :Unite build<CR>
nnoremap <silent> ,vcb :Unite build:!<CR>
nnoremap <silent> ,vch :UniteBuildClearHighlight<CR>
"" }}}


例えば、ここで、 <Leader>f,bを押したとしましょう。すると、ブックマークが開きます。



unite-grep



unite.vimには、 unite-grepというものがあります。本体にマージれたので、特別なインストールは必要ありません。ただし、動作には、vimprocが必要になりますので注意してください。今回は、この unite-grepを使って、最近流行っているagを使ってみたいと思います。ちなみに、 agとは、 grepに変わる検索コマンドのことです。


brew install the_silver_searcher


"" unite-grep {{{
" unite-grepのバックエンドをagに切り替える
" http://qiita.com/items/c8962f9325a5433dc50d
let g:unite_source_grep_command = 'ag'
let g:unite_source_grep_default_opts = '--nocolor --nogroup'
let g:unite_source_grep_recursive_opt = ''
let g:unite_source_grep_max_candidates = 200

" unite-grepのキーマップ
" 選択した文字列をunite-grep
" https://github.com/shingokatsushima/dotfiles/blob/master/.vimrc
vnoremap /g y:Unite grep::-iHRn:<C-R>=escape(@", '\\.*$^[]')<CR><CR>
" }}}


これで、検索したい文字列を選択したあと、/gを押せば、高速検索されます。


filer



Vimでファイラー兼ランチャーなunite.vimプラグインを使う


NeoBundle 'Shougo/unite.vim'


"" unite.vim {{{
" https://github.com/yuroyoro/dotfiles/.vimrc.plugins_setting
" The prefix key.
nnoremap    [unite]   <Nop>
nmap    <Leader>f [unite]

nnoremap [unite]u  :<C-u>Unite -no-split<Space>

" 全部乗せ
nnoremap <silent> [unite]a  :<C-u>UniteWithCurrentDir -no-split -buffer-name=files buffer file_mru bookmark file<CR>
" ファイル一覧
nnoremap <silent> [unite]f  :<C-u>Unite -no-split -buffer-name=files file<CR>
" バッファ一覧
nnoremap <silent> [unite]b  :<C-u>Unite -no-split buffer<CR>
" 常用セット
nnoremap <silent> [unite]u  :<C-u>Unite -no-split buffer file_mru<CR>
" 最近使用したファイル一覧
nnoremap <silent> [unite]m  :<C-u>Unite -no-split file_mru<CR>
" 現在のバッファのカレントディレクトリからファイル一覧
nnoremap <silent> [unite]d  :<C-u>UniteWithBufferDir -no-split file<CR>

" nnoremap <silent> [unite]b  :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR>

let g:yankring_zap_keys = ""
" from basyura/unite-rails
nnoremap <silent> [unite]rm  :<C-u>Unite -no-split rails/model<CR>
nnoremap <silent> [unite]rc  :<C-u>Unite -no-split rails/controller<CR>
nnoremap <silent> [unite]rv  :<C-u>Unite -no-split rails/view<CR>
nnoremap <silent> [unite]rl  :<C-u>Unite -no-split rails/lib<CR>
nnoremap <silent> [unite]rj  :<C-u>Unite -no-split rails/javascript<CR>
nnoremap <silent> [unite]rs  :<C-u>Unite -no-split rails/spec<CR>


autocmd FileType unite call s:unite_my_settings()
function! s:unite_my_settings()"{{{
" Overwrite settings.

" ESCキーを2回押すと終了する
nmap <buffer> <ESC>      <Plug>(unite_exit)
nmap <buffer> <ESC><ESC> <Plug>(unite_exit)
imap <buffer> jj      <Plug>(unite_insert_leave)
nnoremap <silent><buffer> <C-k> :<C-u>call unite#mappings#do_action('preview')<CR>
imap <buffer> <C-w>     <Plug>(unite_delete_backward_path)
" Start insert.
let g:unite_enable_start_insert = 1

" ウィンドウを分割して開く
nnoremap <silent> <buffer> <expr> <C-l> unite#do_action('split')
inoremap <silent> <buffer> <expr> <C-l> unite#do_action('split')

" ウィンドウを縦に分割して開く
nnoremap <silent> <buffer> <expr> <C-v> unite#do_action('vsplit')
inoremap <silent> <buffer> <expr> <C-v> unite#do_action('vsplit')
endfunction"}}}

let g:unite_source_file_mru_limit = 200

" unite-plugins
cnoremap UH Unite help<Enter>
cnoremap UO Unite outline<Enter>


" Vimでファイラー兼ランチャーなunite.vimプラグインを使う
" http://blog.ruedap.com/entry/20110110/vim_unite_plugin
""" unite.vim
" 入力モードで開始する
" let g:unite_enable_start_insert=1
" バッファ一覧
nnoremap <silent> ,ub :<C-u>Unite buffer<CR>
" ファイル一覧
nnoremap <silent> ,uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
" レジスタ一覧
nnoremap <silent> ,ur :<C-u>Unite -buffer-name=register register<CR>
" 最近使用したファイル一覧
nnoremap <silent> ,um :<C-u>Unite file_mru<CR>
" 常用セット
nnoremap <silent> ,uu :<C-u>Unite buffer file_mru<CR>
" 全部乗せ
nnoremap <silent> ,ua :<C-u>UniteWithBufferDir -buffer-name=files buffer file_mru bookmark file<CR>

" ウィンドウを分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-j> unite#do_action('split')
au FileType unite inoremap <silent> <buffer> <expr> <C-j> unite#do_action('split')
" ウィンドウを縦に分割して開く
au FileType unite nnoremap <silent> <buffer> <expr> <C-l> unite#do_action('vsplit')
au FileType unite inoremap <silent> <buffer> <expr> <C-l> unite#do_action('vsplit')
" ESCキーを2回押すと終了する
au FileType unite nnoremap <silent> <buffer> <ESC><ESC> q
au FileType unite inoremap <silent> <buffer> <ESC><ESC> <ESC>q
"" }}}


unite-menu


" unite-menu {{{
" http://d.hatena.ne.jp/osyo-manga/20130225/1361794133
if !exists("g:unite_source_menu_menus")
    let g:unite_source_menu_menus = {}
endif

" unite-shortcut
let g:unite_source_menu_menus.shortcut = {
\   "description" : "shortcut"
\}

let g:unite_source_menu_menus.shortcut.candidates = [
\   [ "vimrc"  , s:vimrc ],
\   [ "bundles", fnamemodify(s:vimrc, ":h")."/bundles.vim" ],
\   [ "local vimrc",   $VIMLOCALUSER."/vimrc.vim" ],
\   [ "Blog Edit", "OpenBrowser http://d.hatena.ne.jp/osyo-manga/edit" ],
\   [ "ideone", "OpenBrowser http://ideone.com/" ],
\   [ "neobundles", s:neobundle_root ],
\   [ "original plugin", $NEOBUNDLE_ORIGIN ],
\   [ "boost", $BOOST_LATEST_ROOT ],
\   [ "AllMap", "Unite output:AllMap" ],
\   [ "Unite Beautiful Attack", "Unite -auto-preview colorscheme" ],
\   [ "Boost.MPL Ref", "OpenBrowser http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/refmanual_toc.html" ],
\]

function! g:unite_source_menu_menus.shortcut.map(key, value)
    let [word, value] = a:value

    if isdirectory(value)
        return {
\               "word" : "[directory] ".word,
\               "kind" : "directory",
\               "action__directory" : value
\           }
    elseif !empty(glob(value))
        return {
\               "word" : "[file] ".word,
\               "kind" : "file",
\               "default_action" : "tabdrop",
\               "action__path" : value,
\           }
    else
        return {
\               "word" : "[command] ".word,
\               "kind" : "command",
\               "action__command" : value
\           }
    endif
endfunction
" }}}


unite-colorscheme



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

NeoBundle 'ujihisa/unite-colorscheme'



:NeoBundleInstallを実行し、プラグインをインストールします。


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

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




カラースキーム一覧



[vim] 黒背景好きの僕の心を揺さぶるカラースキーム「hybrid」


NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'w0ng/vim-hybrid'
NeoBundle 'vim-scripts/twilight'
NeoBundle 'jonathanfilip/vim-lucius'
NeoBundle 'jpo/vim-railscasts-theme'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'vim-scripts/Wombat'
NeoBundle 'tomasr/molokai'
NeoBundle 'vim-scripts/rdark'


neocomplcache



最近のvimrc(vundle, neocomplcache, uniteなど)

https://github.com/yuroyoro/dotfiles


NeoBundle 'Shougo/neocomplcache'


"" neocomplecache.vim {{{
" https://github.com/yuroyoro/dotfiles/blob/master/.vimrc.completion.neocomplcache
" AutoComplPopを無効にする
let g:acp_enableAtStartup = 0
" NeoComplCacheを有効にする
let g:neocomplcache_enable_at_startup = 1
" 補完が自動で開始される文字数
let g:neocomplcache_auto_completion_start_length = 3
" smarrt case有効化。 大文字が入力されるまで大文字小文字の区別を無視する
let g:neocomplcache_enable_smart_case = 1
" camle caseを有効化。大文字を区切りとしたワイルドカードのように振る舞う
let g:neocomplcache_enable_camel_case_completion = 1
" _(アンダーバー)区切りの補完を有効化
let g:neocomplcache_enable_underbar_completion = 1
" シンタックスをキャッシュするときの最小文字長を3に
let g:neocomplcache_min_syntax_length = 3
" neocomplcacheを自動的にロックするバッファ名のパターン
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" -入力による候補番号の表示
let g:neocomplcache_enable_quick_match = 1
" 補完候補の一番先頭を選択状態にする(AutoComplPopと似た動作)
let g:neocomplcache_enable_auto_select = 1
"ポップアップメニューで表示される候補の数。初期値は100
let g:neocomplcache_max_list = 20

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
\ 'default' : '',
\ 'vimshell' : $HOME.'/.vimshell_hist',
\ 'scala' : $HOME.'/.vim/bundle/vim-scala/dict/scala.dict',
\ 'java' : $HOME.'/.vim/dict/java.dict',
\ 'c' : $HOME.'/.vim/dict/c.dict',
\ 'cpp' : $HOME.'/.vim/dict/cpp.dict',
\ 'javascript' : $HOME.'/.vim/dict/javascript.dict',
\ 'ocaml' : $HOME.'/.vim/dict/ocaml.dict',
\ 'perl' : $HOME.'/.vim/dict/perl.dict',
\ 'php' : $HOME.'/.vim/dict/php.dict',
\ 'scheme' : $HOME.'/.vim/dict/scheme.dict',
\ 'vm' : $HOME.'/.vim/dict/vim.dict'
\ }

" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

" ユーザー定義スニペット保存ディレクトリ
" let g:neocomplcache_snippets_dir = $HOME.'/.vim/snippets'

" スニペット
" imap <C-y> <Plug>(neocomp" lcache_snippets_expand)
" smap <C-k> <Plug>(neocomplcache_snippets_expand)

" 補完を選択しpopupを閉じる
" inoremap <expr><C-y> neocomplcache#close_popup()
" 補完をキャンセルしpopupを閉じる
" inoremap <expr><C-e> neocomplcache#cancel_popup()
" TABで補完できるようにする
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" undo
inoremap <expr><C-g>     neocomplcache#undo_completion()
" 補完候補の共通部分までを補完する
inoremap <expr><C-s> neocomplcache#complete_common_string()
" SuperTab like snippets behavior.
imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"
" C-kを押すと行末まで削除
" inoremap <C-k> <C-o>D
" C-nでneocomplcache補完
inoremap <expr><C-n>  pumvisible() ? "\<C-n>" : "\<C-x>\<C-u>\<C-p>"
" C-pでkeyword補完
inoremap <expr><C-p> pumvisible() ? "\<C-p>" : "\<C-p>\<C-n>"
" 補完候補が出ていたら確定、なければ改行
inoremap <expr><CR>  pumvisible() ? neocomplcache#close_popup() : "<CR>"

" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-x><C-o> &filetype == 'vim' ? "\<C-x><C-v><C-p>" : neocomplcache#manual_omni_complete()

" buffer開いたらneoconでcache
autocmd BufReadPost,BufEnter,BufWritePost :NeoComplCacheCachingBuffer <buffer>

" FileType毎のOmni補完を設定
autocmd FileType python     setlocal omnifunc=pythoncomplete#Complete
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html       setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType css        setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType xml        setlocal omnifunc=xmlcomplete#CompleteTags
autocmd FileType php        setlocal omnifunc=phpcomplete#CompletePHP
autocmd FileType c          setlocal omnifunc=ccomplete#Complete
autocmd FileType ruby       setlocal omnifunc=rubycomplete#Complete

" Enable heavy omni completion.
if !exists('g:neocomplcache_omni_patterns')
let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::'
let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
let g:neocomplcache_omni_patterns.c = '\%(\.\|->\)\h\w*'
let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::'

" autocmd FileType ruby let g:neocomplcache_source_disable = {
" \ 'include_complete' : 1,
" \ 'omni_complete' : 1
" \ }
" autocmd FileType ruby let g:neocomplcache_source_disable = {
" \ 'include_complete' : 1
" \ }

"インクルードパスの指定
let g:neocomplcache_include_paths = {
\ 'cpp'  : '.,/opt/local/include/gcc46/c++,/opt/local/include,/usr/include',
\ 'c'    : '.,/usr/include',
\ 'ruby' : '.,$HOME/.rvm/rubies/**/lib/ruby/1.8/',
\ }
"インクルード文のパターンを指定
let g:neocomplcache_include_patterns = {
\ 'cpp' : '^\s*#\s*include',
\ 'ruby' : '^\s*require',
\ 'perl' : '^\s*use',
\ }
"インクルード先のファイル名の解析パターン
let g:neocomplcache_include_exprs = {
\ 'ruby' : substitute(v:fname,'::','/','g')
\ }
" ファイルを探す際に、この値を末尾に追加したファイルも探す。
let g:neocomplcache_include_suffixes = {
\ 'ruby' : '.rb',
\ 'haskell' : '.hs'
\ }

" for rsense
if !exists('g:neocomplcache_omni_patterns')
let g:neocomplcache_omni_patterns = {}
endif
let g:rsenseUseOmniFunc = 1
let g:rsenseHome = expand('~/src/rsense-0.3')

let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
"" }}}



neosnippet



NeoBundle 'Shougo/neosnippet'


"" neosnippet {{{
" https://github.com/Shougo/neosnippet
" Plugin key-mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)

" SuperTab like snippets behavior.
imap <expr><TAB> neosnippet#expandable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For snippet_complete marker.
if has('conceal')
set conceallevel=2 concealcursor=i
endif

let g:neosnippet#enable_snipmate_compatibility = 1
"" }}}



NERDTree



[vim] NERDTreeをもっと使いやすくするための設定


NeoBundle 'The-NERD-tree'


""NERDTree {{{
" http://kokukuma.blogspot.jp/2012/03/vim-nerdtree.html
" 引数なしで実行したとき、NERDTreeを実行する
let file_name = expand("%:p")
if has('vim_starting') &&  file_name == ""
autocmd VimEnter * call ExecuteNERDTree()
endif

" カーソルが外れているときは自動的にnerdtreeを隠す
function! ExecuteNERDTree()
"b:nerdstatus = 1 : NERDTree 表示中
"b:nerdstatus = 2 : NERDTree 非表示中

if !exists('g:nerdstatus')
execute 'NERDTree ./'
let g:windowWidth = winwidth(winnr())
let g:nerdtreebuf = bufnr('')
let g:nerdstatus = 1

elseif g:nerdstatus == 1
execute 'wincmd t'
execute 'vertical resize' 0
execute 'wincmd p'
let g:nerdstatus = 2
elseif g:nerdstatus == 2
execute 'wincmd t'
execute 'vertical resize' g:windowWidth
let g:nerdstatus = 1

endif
endfunction
noremap <c-e> :<c-u>:call ExecuteNERDTree()<cr>
</cr></c-u></c-e>
"" }}}



Blogger.vim



Blogger.vimを導入することで、Vim EditorからBloggerへの投稿ができます。また、Blogger.vimは、Markdownで書いたものをHTMLに変換して投稿できるので、非常に便利です。ここでは、Bloggerへの投稿方法と投稿した記事を編集する方法、そして、Markdown記法について紹介していきたいと思います。

sudo port install pandoc

gem install nokogiri

gem install net-https-wrapper

sudo port install git



なお、MacPortというパッケージ管理システムをインストールしていない場合は、MacPortをダウンロードし、インストールします。また、MacPortの動作には、Xcodeが必要になることがあります。よって、Xcodeをインストールしておきましょう。さらに、Xcodeを起動して、「Preferences…」→「Downloads」→「Command Line Tools」と進み、インストールしておくと便利です。

その他、RubyGemsがインストールされていない場合は、以下のようにします。
sudo port install rb-rubygems



後は、Vim Pluginのインストールと設定です。必要なプラグインをVundleを使ってインストールしていきます。
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

echo "source ~/.vim/bundle/vundle/test/minirc.vim" >> ~/.vimrc

vim ~/.vim/bundle/vundle/test/minirc.vim



そして、~/.vim/bundle/vundle/test/minirc.vimを以下のように編集します。

" gitリポジトリの内容を参照する
Bundle 'kana/vim-metarw'

" bloggerに投稿する
Bundle 'ujihisa/blogger.vim'

" プラグインの読み込みパスを変更
Bundle 'tpope/vim-pathogen'



最後に、Vimコマンドである:BundleInstallを実行すれば、Vim Pluginがインストールされます。

後は、プラグインに必要な設定を行なっていきます。具体的には、Blogger.vimの動作に必要なBloggerアカウント情報などを設定ファイルに書いていきます。~/.vimrcに以下を追記します。なお、your_blogid_hereの部分、つまりブログIDは、ブログの管理画面のURLを見れば分かると思います。

let g:blogger_blogid = 'your_blogid_here'
let g:blogger_email = 'your_email_here'
let g:blogger_pass = 'your_blogger_password_here'



もし起動しない場合は、以下の手順を試してみましょう。

git clone https://github.com/ujihisa/blogger.vim.git

cd blogger.vim

mkdir -p ~/.vim/autoload/metarw/

cp autoload/metarw/blogger.vim ~/.vim/autoload/metarw/ && cp autoload/metarw/blogger.rb ~/.vim/autoload/metarw/

which ruby

echo "let g:blogger_ruby_path = '[which ruby]で調べたパスを記入する'" >> ~/.vimrc



使い方は簡単です。以下のコマンドを入力するだけです。Vim上からBloggerへの投稿や過去の記事を取得し、編集ができたりします。


#Bloggerに投稿する
:w blogger:create

#Bloggerのリストを取得する
:e blogger:list



Gist.vim



Gist.vimを使用することで、Codeを簡単に投稿したり、ブログに埋め込んだりすることができます。ここでは、Gist.vimを使って、GistにCodeを投稿し、それをブログに埋め込むまでを紹介していきたいと思います。

ただし、Gistを利用するには、GitHubへの登録が必要になります。GitHubのアカウントをお持ちでない方は、登録しておきましょう。

Bundle 'mattn/gist-vim'



:BundleInstallも忘れずに。以下この手順については、省略します。

次に、ドキュメントにあるように、必要な物を用意します。以下のコマンドを実行してください。

$ mkdir ~/.vim/cookies && touch ~/.vim/cookies/github

そして、設定ファイルに以下を追記します。
let g:gist_clip_command = 'pbcopy'
let g:gist_detect_filetype = 1
let g:github_user = 'usrename'



これで、コードを書いて、:Gistなどとすると、Gistへの投稿が完了し、URLがクリップボードに取得されます。


また、以下を設定ファイルに書くことで、クリップボードにGistへのURLが保存されている状態で:PasteGistを実行すれば、GistへのURLが埋め込みコードに変換されます。これに関しては、Gist.vimの導入とヘルパースクリプトの作成がとても参考になります。ここに載っているコードを簡単にではありますが、改良してみました。

" PasteGist
func! s:paste_gist_tag()
let mx = 'http[s]\?://gist.github.com/\([0-9]\+\)'
" +または"レジスタの中身を検索する
let regs = [@+,@"]
for r in regs
let mlist = matchlist(r, mx)
if ( len(mlist) > 2 )
"カーソル行に挿入
exe "normal! O<script src='https://gist.github.com/" . mlist[1] . ".js'></script>"
return
endif
endif
endfunc
command! -nargs=0 PasteGist     call <sid>paste_gist_tag()



これで、Vim上からGistへコードを投稿し、ブログへの埋め込みコードを取得することができるようになります。


Zencoding-vim



Zencoding-vimとは、省略記法でHTMLへの変換を実現するVim Pluginのことです。Zencoding-vimは、ブログをやっている人なら便利に使えると思います。

Bundle 'mattn/zencoding-vim'



私がよく使う記法は、以下のものです。記法を入力した後に、C-y-,を入力すると、記法がHTMLに変換されます。
span.code[C-y,]

<span class="code"></span>




excitetranslate.vim



Vim上から翻訳を行うには、 excitetranslate.vim が一番のオススメです。おすすめの理由はそのシンプルさです


Bundle 'mattn/excitetranslate-vim'



ここで、バッファにあるものを :ExciteTranslate で翻訳できます。また、ビジュアル選択することで 翻訳範囲を広げることもできます。 :'<,'>ExciteTranslate


simplenote.vim



私はメモ帳にSimplenoteを多用しています。`Cloud`に保存されることと、端末向けのSimplenote Clientが用意されていることや、URLを手軽にクリップできるのも大きいです。今回は、`Vim`上で動作するSimplenote.vimの紹介です。

Bundle 'mrtazz/simplenote.vim'



あとは、~/.vimrcSimplenoteのアカウント情報を入力しましょう。

" Simplenote アカウント情報
let g:SimplenoteUsername = "your simplenote username"
let g:SimplenotePassword = "your simplenote password"



これで例えば、:Simplenote -lとすると、リストが表示され、直感的な操作でメモを閲覧、編集できます。



viewoutput.vim



viewoutput.vimとは、コマンドの出力結果を読みやすい形で表示してくれるプラグインです。特に、 :let , :map などのコマンドの出力結果をじっくり読みたい時には便利です。


curl -o viwoutput.vim http://www.vim.org/scripts/download_script.php?src_id=2722

mv viewoutput.vim ~/.vim/plugin




これで、 :VO の後にコマンドを入力し実行することで、その結果を読みやすい形で表示することができます。




str2htmlentity.vim



HTMLは、特定の文字列をそのまま表示することはできません。よって、そのような文字列を表示するには、ちゃんと表示出来るように変換する必要があります。以下の方法で簡単に変換できます。

mkdir -p ~/.vim/plugin

curl http://www.serendip.ws/resource/str2htmlentity.vim > ~/.vim/plugin/str2htmlentity.vim



そして、以下の内容を 設定ファイル に追記します。


vmap <silent> sx :Str2HtmlEntity<cr>
vmap <silent> sr :Entity2HtmlString<cr>



これで、変換したい文字列をビジュアルモードで選択し、 sx を押すHTMLで表示できる形で文字列が変換されます。


TweetVim




TweetVim とは、Vim上で動作するTwitter Clientです。


Vimのプラグイン管理を導入していない場合は、以下のようにしましょう。


git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

echo "source ~/.vim/bundle/vundle/test/minirc.vim" >> ~/.vimrc




"TweetVimとその依存関連のプラグイン
Bundle 'basyura/TweetVim'
Bundle 'mattn/webapi-vim'
Bundle 'basyura/twibill.vim'
Bundle 'tyru/open-browser.vim'
Bundle 'h1mesuke/unite-outline'
Bundle 'basyura/bitly.vim'
Bundle 'Shougo/unite.vim'



そして、 :BundleInstall というVimコマンドを実行します。


$ brew install curl



最初は、 :TweetVimHomeTimelineを実行しましょう。


また、よく使うキーとして以下のようなものがあります。

r リツイートする

o URLを開く

ff 次へ

bb 前へ

<Leader><Leader> ロード

a unite.vimを使いメニューを表示する


open-browser.vim



open-browser.vimを使うことで、URLを簡単に開くことができます。


NeoBundle 'tyru/open-browser.vim'



" カーソル下のURLを「gx」で開く
" http://vim-users.jp/2011/08/hack225/
let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)



nerdcommenter



初期機能では、矩形選択したあとに I+ 任意の文字列 + Escで複数行を一発でコメント化できます。


しかし、 nerdcommenterを使うことで、もっと簡単にコメント化できます。


NeoBundle 'scrooloose/nerdcommenter'



" NERD_commenter.vim
" コメントの間にスペースを空ける
let NERDSpaceDelims = 1
"<Leader>xでコメントをトグル(NERD_commenter.vim)
map <Leader>x, c<space>
""未対応ファイルタイプのエラーメッセージを表示しない
let NERDShutUp=1



vim-quickrun




vim-quickrunは、Vimで編集中のプログラムの実行結果を確認できるプラグインです。 使い方や設定方法は、こちらの記事が参考になります。

NeoBundle 'thinca/vim-quickrun'


デフォルトでは、<Leader>rを押すと、実行結果を確認できます。



teol.vim


Cなどを書くときに行末につける;を忘れてしまうことはありませんか。そんな時は、teol.vimが便利です。

Bundle 'vim-scripts/teol.vim.git'


例えば、<Leader>;を入力すると、行末に;が挿入されます。

vim-smartchr



見栄えを良くするために半角スペースを使用することは多くありませんか。そんな時は、vim-smartchrを使って設定を行なっておくと便利ですよ。

NeoBundle 'kana/vim-smartchr'


例えば、=と入力すると、スペースを含めた = が入力されるようにSettingしてみます。

inoremap <expr> = smartchr#loop(' = ', ' == ', ' === ', '=')


vim-rails


vimでRailsのプロジェクトファイル間を移動〜rails

vim-railsはvimでrailsをやるときに便利な機能を集めたプラグインです。

NeoBundle 'tpope/vim-rails'


"unite-rails " http://blog.scimpr.com/2013/02/24/vim%E3%81%A7rails%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E9%96%93%E3%82%92%E7%A7%BB%E5%8B%95%E3%80%9Crails/ noremap :rc :<C-u>Unite rails/controller<CR> noremap :rm :<C-u>Unite rails/model<CR> noremap :rv :<C-u>Unite rails/view<CR> noremap :rh :<C-u>Unite rails/helper<CR> noremap :rs :<C-u>Unite rails/stylesheets<CR> noremap :rj :<C-u>Unite rails/javascripts<CR> noremap :rr :<C-u>Unite rails/route<CR> noremap :rg :<C-u>Unite rails/gemfile<CR> noremap :rt :<C-u>Unite rails/spec<CR>


taglist.vim


NeoBundle 'taglist.vim'


brew install ctags


" taglist.Vim " https://github.com/yuroyoro/dotfiles/blob/master/.vimrc.plugins_setting " 関数一覧 set tags=tags "set tags+=~/.tags "let Tlist_Ctags_Cmd = '/Applications/MacVim.app/Contents/MacOS/ctags' " ctagsのパス let Tlist_Show_One_File = 1               " 現在編集中のソースのタグしか表示しない let Tlist_Exit_OnlyWindow = 1             " taglistのウィンドーが最後のウィンドーならばVimを閉じる " let Tlist_Use_Right_Window = 1            " 右側でtaglistのウィンドーを表示 let Tlist_Enable_Fold_Column = 1          " 折りたたみ let Tlist_Auto_Open = 1                   " 自動表示 let Tlist_Auto_Update = 1 let Tlist_WinWidth = 30 "map <silent> <leader>tl :Tlist<CR>        " taglistを開くショットカットキー nmap <F7> :CMiniBufExplorer<CR>:TrinityToggleTagList<CR>:TMiniBufExplorer<CR> nmap <Leader>tl :CMiniBufExplorer<CR>:TrinityToggleTagList<CR>:TMiniBufExplorer<CR>



colorizer


vimでCSSを編集するときに色をプレヴュー〜colorizer&unite-webcolorname



NeoBundle 'lilydjwg/colorizer'





unite-webcolorname



NeoBundle 'pasela/unite-webcolorname'




vim-surround


vim-surround は、テキストオブジェクトを拡張するものです。デフォルトのテキストオブジェクトでは簡単にはできないこと実現出来ます。

surround.vim のつかいかた


NeoBundle 'tpope/vim-surround'

" surround.vim
" s, ssで選択範囲を指定文字でくくる
nmap s Ysurround
nmap ss Yssurround
let g:surround_{char2nr('e')} = "begin \r end"
let g:surround_{char2nr('d')} = "do \r end"
let g:surround_{char2nr("-")} = ":\r"

vim-fugitive


vim-fugitiveは、gitラッパープラグインです。簡単な Git操作ができます。


VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい


NeoBundle 'tpope/vim-fugitive'


" vim-fugitive
" http://qiita.com/items/4936c4412daa866daf7d
nnoremap <silent> <Space>gb :Gblame<CR>
nnoremap <silent> <Space>gd :Gdiff<CR>
nnoremap <silent> <Space>gs :Gstatus<CR>

" ブランチ名などの補完
" http://qiita.com/items/4936c4412daa866daf7d
"command-line completion
set wildmenu
set wildmode=list:longest


vimfiler



vimfilerとUniteでVimをファイラとして使用する方法


NeoBundle 'Shougo/vimfiler'


"VimFilerエクスプローラーの設定
let g:vimfiler_as_default_explorer=1

"VimFilerセーフモードの設定
let g:vimfiler_safe_mode_by_default=0



また、ファイラーは、コマンドラインから即座に起動したい場合などがあろうかと思いますがは、シェルの設定ファイルに以下のような設定をしておきましょう。

alias f='vim +VimFiler'



vimfilerをNERDTreeのように使う方法



VimFiler で NERDTree のような Explorer を快適に実現する方法

"" vimfilerをNERDTreeのように使う設定 {{{
" http://hrsh7th.hatenablog.com/entry/20120229/1330525683
nnoremap <F2> :VimFiler -buffer-name=explorer -split -winwidth=45 -toggle -no-quit<Cr>
autocmd! FileType vimfiler call g:my_vimfiler_settings()
function! g:my_vimfiler_settings()
nmap     <buffer><expr><Cr> vimfiler#smart_cursor_map("\<Plug>(vimfiler_expand_tree)", "\<Plug>(vimfiler_edit_file)")
nnoremap <buffer>s          :call vimfiler#mappings#do_action('my_split')<Cr>
nnoremap <buffer>v          :call vimfiler#mappings#do_action('my_vsplit')<Cr>
endfunction

let s:my_action = { 'is_selectable' : 1 }
function! s:my_action.func(candidates)
wincmd p
exec 'split '. a:candidates[0].action__path
endfunction
call unite#custom_action('file', 'my_split', s:my_action)

let s:my_action = { 'is_selectable' : 1 }
function! s:my_action.func(candidates)
wincmd p
exec 'vsplit '. a:candidates[0].action__path
endfunction
call unite#custom_action('file', 'my_vsplit', s:my_action)
"" }}}


追記 :

以下の様な手もあります。@manga_osyoさんにご指摘いただきました。ありがとうございます。

:VimFilerExplorer





unite-help



tsukkee/unite-help · GitHub


NeoBundle 'tsukkee/unite-help'



unite-outline



h1mesuke/unite-outline · GitHub

unite-outlineが便利すぎる


NeoBundle 'h1mesuke/unite-outline'



unite-rails



basyura/unite-rails · GitHub

unite-rails.vim


NeoBundle 'basyura/unite-rails'


vimproc



今回は、NeoBundleでVimprocを自動インストールする方法を紹介します。Vimprocを動作させるには、各OSごと用意されたファイルをビルド必要があります。


NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
\ }


そして、Vimを起動し、:NeoBundleInstallコマンドを実行します。



まとめ



Vimが好きです。


明日は、 @thinca さんです。