cookies.txt      .scr

ただのテキストファイルのようだ

お誕生日プレゼントvimrc

この記事はTSG Advent Calendarの8日目の記事として書かれました。

www.adventar.org

先月はyamaguchi氏のお誕生月でした。おめでとうございます。
今年のお誕生日プレゼントは.vimrcを書いてあげることにしました。昨年はTwitterの三文字アカウントをあげました。

リクエストは大きくは、

  • 複数ファイルの編集を楽に
  • ファイル全体をインデントできるように
  • プロジェクトに含まれるファイルを表示

という感じでした。

バッファ移動

ちょうど最近、vim-airlineというものを知ったところでした。
github.com
powerlineというvimzshもtmuxもすごくなるやつがあったんですが、専用のフォントが必要だったり大変なので、(SSHでやるし...)

これにはtablineというextensionがあって、バッファ一覧が上に出てきてよかったのでこれを使いました。
https://github.com/vim-airline/vim-airline#smarter-tab-line
https://camo.githubusercontent.com/ba79534309330accd776a8d2a0712f7c4037d7f9/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f3330363530322f313037323632332f34346332393261302d313439352d313165332d396365362d6463616461336631633533362e676966

あとは移動が楽になるように

nnoremap <silent> <C-p> :bN<CR>
nnoremap <silent> <C-n> :bn<CR>

とだけ書いておきます。

全体インデント

vimで現在行をインデントするには

==
と打ちますが、ファイル全体をインデントするのは現状
gg=G
くらいせざるを得ません。カーソル位置ずれるし。
ということで、

nnoremap === gg=G<C-o><C-o>

として、

===
でファイル全体のインデントをできるようにしました。
といってもカーソル位置はだいたいしか同じ場所でないし、さらにはカーソル位置のy座標が大きくずれたりするのですが。

プロジェクトのファイル一覧

"project"というのは定義しづらい言葉ですが、カレントディレクトリからの先祖で.gitを含む直近のところ以下でいいだろうってことになりました。
vim-rooterによってgitなどのrootまでchdirしてくれるようにして、project.vimでそこからのファイルを隣のバッファに表示してくれるようにしました。
しかし規定の\cというやつ、インタラクティブに.vimprojectsを作ってくれるのは良いのだけれど、質問事項が4つって多い...
ということで、先人の記事を参考に、元のrepositoryをforkして、\A(autoのつもり)を実装しました
質問事項は一つだし、それも答えを省略できるので実質ゼロです。

あとは規定ではHOMEの.vimprojectsに全部はいるってのもつらい話なので、

nmap \p <Plug>ToggleProject
nnoremap \P :Project .vimproject<CR>
if getcwd() != $HOME
    if filereadable(getcwd() . '/.vimproject')
       autocmd VimEnter * Project .vimproject
    endif
endif

くらいしておきます。

他にも色々設定して、全部で342行のvimrcを贈りました。まだまだ短いですね。

他のものの中でおすすめは、ぼくのかんがえたさいしょうのvimrc - derisの日記で紹介されている

inoremap jk  <Esc>

とか

nnoremap <Space>w  :<C-u>w<CR>
nnoremap <Space>q  :<C-u>q<CR>
nnoremap <Space>Q  :<C-u>q!<CR>

です。この記事の他のやつも使ってみたら便利なのかもしれませんが、ハマって普通のvimに戻れなくなりそうなのでまだ手は出していません...