読者です 読者をやめる 読者になる 読者になる

.logbook

学んだことを書き綴る、言わば航海日誌です。

Vimで複数ファイルを行き来する

Vim Ubuntu C言語

以前の記事にて、C言語ソースを解析するためのVim環境を構築した。

C言語のソースコードを解析するため、Vimにプラグインを追加する - .logbook

これで環境は万全かのように思えたが、問題が生じた。複数ファイルを行ったり来たりするのが面倒なのである。複数Vimを起動するしかないのだろうか?

調べてみた結果、Vimは複数のファイルを同時に管理する方法を幾つか持っていることがわかった。

タブ機能

Vim7.3から、タブ機能が追加された。秀丸エディタサクラエディタのように複数のファイルをタブ管理することができるようになっている。

Vim上で下記コマンドを入力するとタブ操作が可能である。

" 新しいタブで{filename}をオープンする
:tabe {filename}

" タブを全て閉じる
:tabc

" 番号{N}のタブに切り替え
{N}gt

" 次のタブに切り替え
gt

これで快適になるはず!と思ったのだが、意外と不便だった。なぜなら、タグジャンプでオープンしたファイルが新しいタブで開かれないからである。これではタグジャンプする度に、ジャンプ先のファイルを新しいタブでオープンしなければならない。

バッファリスト

Vimは読み込んだファイルをバックグラウンドで管理している。:lsと入力すると、バックグラウンドのファイル一覧が表示される。これをバッファリストと呼ぶ。

バッファ機能は下記で操作可能である。

" バッファリストを表示する
:ls

" 次のファイルへ
:bnext

" 前のファイルへ
:bprev

" 最初のファイルへ
:bfirst

" 最後のファイルへ
:blast

;bnext, :bprevと入力するのは面倒なので、.vimrcにキーマップを追加する。これで、[b, ]bと入力するだけでファイルを切り替えられる。

set nocompatible               " be iMproved
filetype off


if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle/'))
endif
" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'
" コード解析用にここから追加
NeoBundle 'The-NERD-tree'
NeoBundle 'taglist.vim'
NeoBundle 'https://github.com/wesleyche/SrcExpl.git'
NeoBundle 'https://github.com/wesleyche/Trinity.git'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

filetype plugin indent on     " required!
filetype indent on

" ▼バッファリスト操作
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> ]b :bnext<CR>
nnoremap <silent> [B :bfirst<CR>
nnoremap <silent> ]B :blast<CR>
" ▲バッファリスト操作