Vimを使う - バッファをタブのように表示する「minibufexpl」

【連載】

にわか管理者のためのLinux運用入門

【第235回】Vimを使う - バッファをタブのように表示する「minibufexpl」

[2020/06/23 08:00]後藤大地 ブックマーク ブックマーク

Vimではいったんファイルを開くと、開いたファイルは「バッファ」に入ったものとして扱われる。NERDTreeを使うなどして複数のファイルを開いた場合、開いたファイルはバッファに入っている。バッファに入っているファイルは、次のように「:ls」で表示させることができる。

バッファを一覧表示させる:ls

次のスクリーンショットでは、バッファ1で「logrotate.conf」が、バッファ2で「selection.txt」が、バッファ3で「typescript.xml」が編集された状態にある。

バッファとファイル

バッファ間の移動を行う方法として、次のような操作がある。

操作 内容
:bn 次のバッファへ移動
:b1 バッファ1へ移動
:b2 バッファ2へ移動
:b3 バッファ3へ移動
:b4 バッファ4へ移動
:b5 バッファ5へ移動
:b6 バッファ6へ移動
:b7 バッファ7へ移動
:b8 バッファ8へ移動
:b9 バッファ9へ移動

バッファはVimの最も基本的な機能の一つだ。しかし、どのファイルがバッファに入っているか調べる方法が少し煩雑で、バッファ間の移動も面倒な部分があるのが否めない。ここはプラグインを使って、もっと直感的にバッファ間を行ったり来たりしたいところだ。

プラグイン「minibufexpl」でバッファをタブのように表示

バッファを扱うプラグインはいくつもあるのだが、ここではバッファ一覧をタブのように常に上部に表示するプラグイン「minibufexpl」を紹介したい。このプラグインを使うと、複数のファイルを開いた場合に上部に開いているファイル(バッファ)の一覧がタブのように表示される。今どのファイルを開いているのか、何番がどのファイルなのかがひと目でわかるようになるのだ。

本連載でこれまでに作成してきたVimの設定ファイル(~/.vimrcファイル)は以下の通りだ。

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein/.')
  call dein#begin('~/.cache/dein/.')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here
  call dein#add('junegunn/seoul256.vim')
  call dein#add('vim-airline/vim-airline')
  call dein#add('vim-airline/vim-airline-themes')
  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

"End dein Scripts-------------------------

set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase

まず、設定ファイル内で次の記述を探してほしい。

  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')

上記を次のように変更してminibufexplを読み込ませる。

  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')
  call dein#add('fholgado/minibufexpl.vim')

「minibufexpl」は表示するだけなので、操作内容は上記表に挙げた内容となる。複数のファイルを開いて編集する作業が頻繁に発生する場合、これではちょっと面倒だ。少しでも素早くバッファを切り替えたい。

そこで、新しく設定を追加する。次のように「NERDTree」の設定の辺りを探してほしい。

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

上記を次のように編集し、バッファ移動のショートカット設定を追加する。

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

" minibufexpl
nnoremap <silent> bn :<C-u>:bnext<CR>
nnoremap <silent> b1 :<C-u>:b1<CR>
nnoremap <silent> b2 :<C-u>:b2<CR>
nnoremap <silent> b3 :<C-u>:b3<CR>
nnoremap <silent> b4 :<C-u>:b4<CR>
nnoremap <silent> b5 :<C-u>:b5<CR>
nnoremap <silent> b6 :<C-u>:b6<CR>
nnoremap <silent> b7 :<C-u>:b7<CR>
nnoremap <silent> b8 :<C-u>:b8<CR>
nnoremap <silent> b9 :<C-u>:b9<CR>

これにより、次のような操作が可能になる。

ショートカットキー 内容
bn 次のバッファへ移動
b1 バッファ1へ移動
b2 バッファ2へ移動
b3 バッファ3へ移動
b4 バッファ4へ移動
b5 バッファ5へ移動
b6 バッファ6へ移動
b7 バッファ7へ移動
b8 バッファ8へ移動
b9 バッファ9へ移動

ご覧の通り、「:」の入力分だけ操作が短くなる。ちょっとしたショートカットでしかないのだが、目線がコマンドラインモードに移動しないので、思った以上に高速化したような感覚があるはずだ。この辺りのショートカットには好みもあるので、自分の扱いやすいものに変更してもらえればと思う。

minibufexplの使用例

次のスクリーンショットは、ファイルを3つ開いた状態だ。ファイルを1つしか開いていない状態はこれまでと変わらないが、ファイルを2つ以上開くと、このように上部にタブのようにバッファ一覧が表示されるようになる。

minibufexplが動作しているところ

次のスクリーンショットは、バッファ3へ表示を移したものだ。「b3」または「bnbn」という操作でバッファ3へ表示を移動させている。

バッファ3へ表示を移動させた場合

操作がわかりやすいという理由で「1Vimあたり1ファイルだけ編集するようにする」というのは一つの手ではある。だが、Vimをファイル編集作業の中心に据え始めると、バッファを使って複数のファイルを編集するという作業は必須になってくる。minibufexplはシンプルなプラグインだが、その効果はなかなかのものだ。バッファの表示や移動にイマイチ感を感じているなら、ぜひこのプラグインを試してみていただきたい。

今回の成果物

前回も補足したように、もしプラグイン管理機能「Dein」のセットアップしていない場合は、プラグインを追加/利用する前にまず次の操作が必要だ。

mkdir -p ~/.cache/dein
cd ~/.cache/dein/
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh .
rm ./installer.sh

Deinの詳細については、第229回を参照していただきたい。

今回のプラグイン設定を追加した設定ファイルは以下の通りだ。

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein/.')
  call dein#begin('~/.cache/dein/.')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here
  call dein#add('junegunn/seoul256.vim')
  call dein#add('vim-airline/vim-airline')
  call dein#add('vim-airline/vim-airline-themes')
  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')
  call dein#add('fholgado/minibufexpl.vim')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

" minibufexpl
nnoremap <silent> bn :<C-u>:bnext<CR>
nnoremap <silent> b1 :<C-u>:b1<CR>
nnoremap <silent> b2 :<C-u>:b2<CR>
nnoremap <silent> b3 :<C-u>:b3<CR>
nnoremap <silent> b4 :<C-u>:b4<CR>
nnoremap <silent> b5 :<C-u>:b5<CR>
nnoremap <silent> b6 :<C-u>:b6<CR>
nnoremap <silent> b7 :<C-u>:b7<CR>
nnoremap <silent> b8 :<C-u>:b8<CR>
nnoremap <silent> b9 :<C-u>:b9<CR>

"End dein Scripts-------------------------

set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る