Vimmerです。
Vimでタブページを使うのをやめました。どうしたかというと、代わりにバッファを使い始めました。
超快適なので紹介します。
ほぼNeoVimを端末として使うためにしたこと - Qiitaの続きです。
やったこと
Deniteの導入
Shougo/denite.nvim: Dark powered asynchronous unite all interfaces for Neovim/Vim8
まじで速い。Uniteなんて使ってられない。
こんな感じでmappingしてます。
" Denitennoremap<Leader>p :Denite buffer file_rec<CR>nnoremap<Leader>b :Denite buffer<CR>call denite#custom#map('insert',"<Up>",'<denite:move_to_previous_line>','noremap')call denite#custom#map('insert',"<Down>",'<denite:move_to_next_line>','noremap')
さすがにfile_rec
が入るとちょっと時間かかるので、利用は最小限にとどめています。
:set hidden
未保存の状態でバッファを切り替えても警告が出なくなります。
:wq
の代わりを定義
NeoVimを端末として使うためにしたこと - Qiitaにも書いたのですが、こんな感じでやってます。
nnoremap<Leader>q :up<CR>:call CloseBuf()<CR>
<Leader>q
で変更があれば保存+バッファを閉じるという動作になります。
端末のバッファの名前を実行中のプロセス名を含むものに変更
端末のバッファ名ってデフォルトで全てterm://〜:/usr/bin/fish
みたいな感じで、端末で実行中のプログラム名とかは入らないんですよね。これで何が困るかというと、端末を複数開くとDenite上で見分けがつかないんです。
例えば「rails server」を実行中のバッファは、railsとかでfuzzy-searchしたいので、プロセス名を入れることにします。
autocmd BufLeave * if exists('b:term_title')&& exists('b:terminal_job_pid')| execute ":file term" . b:terminal_job_pid . "/" . b:term_title
file
はファイル名を変更するコマンドですが、端末なら何でも大丈夫なようです。端末のタイトルを含めているだけなので、端末の方でタイトルにプロセス名等入れてください。
PIDを入れているのは、Vimではバッファ名が被るとエラーが出てしまうようなので、ユニーク化の意味です。
こんな感じです。
Bufferを使うメリット
- fuzzy-searchできる
- タブバーがでない→かっこいい
- Vimmerっぽい
- file_recと組み合わせると、今開いているファイルと開いていないファイルを意識する必要がない(NERD_Treeいらない)
Bufferを使う(タブを使わない)デメリット
- 画面分割の状態を保存できない
- 基本的に分割せずにやるしかない
- タイプ数が基本的に増えた
- 自分は今のところタブよりストレスが少ないので、好みの問題の気もする
画面分割の問題については、おんなじような操作方法でBufferの代わりにタブページをfuzzy-searchするのも頑張ればできそうなので、気が向いたらやるかもしれません。
良いVim Lifeを!