Vimでファイルを開いた後で、別のファイルを編集したくなることもよくある。操作方法を知らないと、一度Vimを終了させてから、編集したいファイルを指定しVimを起動し直すということをしてしまう。これはとてもスマートな方法とは言えない。
第一、今回は複数のファイルを同時に開いて、表示するファイルを切り替えながら編集することを前提に解説している。一度Vimを終了させてしまうと、開いている複数のファイルをすべて閉じることになる。Vim起動中に別のファイルを起動する方法は覚えておきたいところだ。「:e パス」とすれば、指定したファイルを追加で開ける。
「:e」でファイルパスを入力する段階で、タブ補完が働くと便利だ。タブ補完を利用するには、~/.vimrcの先頭の方に次の設定を追加すれば良い。この設定にある「nocompatible」は、ほかの設定と比べて順序が後になると正しく設定できない。できるだけ設定ファイルの先頭の方に記述した方が良い。
set nocompatible
そして次の設定を有効にする。これでパス入力時にタブ補完が機能するようになる。
set wildmenu wildmode=list:full
:eを使って追加で開けるファイルは1つだけだ。複数のファイルをまとめて開きたいときは:eではなく「:args」を使うとよい。以下の例のように:argsに続いて、開きたいファイルのパスを列挙すると、指定したファイルをすべて開ける。
:args パス パス パス ...
:argsで、開くファイルを指定するときはワイルドカード(*)を使える。拡張子などの「目印」を指定してまとめてファイルを開くこともできる。「**」と指定すると、条件に合致するファイルを再帰的に調査して開く。サブディレクトリ以下も含めて再帰的にファイルを探して開きたいときは「**」を使用する。例えば「**/*.php」のように指定できる。
そして、:eを実行するときに、開く対象としてカレントディレクトリ(.)を指定する、つまり「:e .」とすると、簡易的なファイルセレクタのような画面が現れる(図1)。この画面からファイルを選択して開いたり、ディレクトリを指定して親ディレクトリへ移動したり、サブディレクトリへ移動したりということができる。どこにファイルがあったか確認しながら作業したいようなときに便利に利用できるだろう。
:e .をよく使うなら、これもやはりショートカットキーを設定しておくべきだろう。例えば、次のように設定を書く。こうすると、[Ctrl]+[f]で:e .を実行できる。
nmap :update:e . imap :update:e . vmap :update:e . cmap :update:e .
ファイル一覧を開いた後、ファイルを何も選択せずに編集画面に戻りたいときは:bdを実行すればよい。これも、ショートカットキーを設定しておけば、作業のスピードが上がる。
Vimで開いているすべてのファイルに対して、一斉に置換処理をしたいということもあるだろう。例えば関数名や何らかのIDを一斉に変更したいといった要望はよくある。また、名前は同じだが大文字小文字を変換したいということも多い。特に開発期間中は、開発しながら名前やIDを変更しなければならないということが少なくない。
Vimを使わない方法もある。例えばPerlで一斉に置換処理を実行するとか、sed(1)を利用するシェルスクリプトを組んで変換処理をしてしまうなど、いくつか方法がある。UNIX系のOSを使っている人ならこういった方法も簡単に実行に移せるが、Windowsなどの環境では難しい。こういうときは、Vimが備える一斉置換機能を利用するとよい。
一斉置換は「:argdo」で処理できる。次の例のようにすると、開いているすべてのファイルを対象に文字列変換を実行できる。
:argdo %s/置換対象の文字列/置換後の文字列/g
置換後にそれぞれのファイルを保存したいという人は、次のように:argdoに続いてupdate命令も追加すればよい。
:argdo %s/置換対象の文字列/置換後の文字列/g | update
複数のファイルを対象にした文字列一斉置換はなかなか便利だ。処理の対象とするファイルは、これまで説明したように後から:argsで読み込ませたり、不要なものは:bdで閉じておけばよい。:argsを引数なしで実行すれば、処理対象ファイルの一覧を確認できる。
:argdoは一斉置換のみならず、開いているファイルすべてに対して任意の処理を実行できる。先ほどの例では:argdoの後に置換処理を記述したため、一斉置換を実行したわけだが、ここをほかのコマンドに変えれば、開いているすべてのファイルに対してこのコマンドを実行できる。例えばキーワード検索なら次のようすれば実行できる。
:argdo /キーワード
:argdoはかなり便利なコマンドだ。特に複数のファイルを編集しているときにかなりの力を発揮してくれる。ぜひ覚えておきたいコマンドだ。
Vimにはさまざまな特長があるが、ここでは多くの種類のファイルに対応していることと、多彩なシンタックスハイライト設定に注目したい。Vimユーザーであれはシンタックスハイライトを便利に活用しているだろう。しかし、標準設定のシンタックスハイライトでは、文字が見にくくなってしまい、とてもではないが読めたものではないという状況になることがある。これには次の理由がある。
まず、背景色や前景色はターミナルごと、または個人の設定ごとに異なっているという理由が挙げられる。そして、フォントの種類や表示色もターミナルの実装ごと、または個人の設定ごとに異なる。利用するターミナルソフトウェアによって、シンタックスハイライトを利用しても、読みやすくなったり、読みにくくなったりする。どんな状況にも対応する、扱いやすいハイライト設定を標準で提供することは困難なのだ。
例えば背景色が白であることを前提としてフォントの表示色などを設定したシステムに、背景が黒のターミナルからアクセスすると、シンタックスハイライトを利用しても、重要な部分をハイライト表示するという効果を得られない可能性がある。例えば、黒い背景に青い文字を表示してしまうと、その部分がほとんど読めなくなってしまう。
このように、アクセスするサーバによって表示設定が異なるときは、状況に合わせてシンタックスハイライトの設定を変更すれば良い。例えば次のように設定を変更する。
highlight StatusLine ctermfg=black ctermbg=grey highlight CursorLine ctermfg=none ctermbg=darkgray cterm=none highlight MatchParen ctermfg=none ctermbg=darkgray highlight Comment ctermfg=DarkGreen ctermbg=NONE highlight Directory ctermfg=DarkGreen ctermbg=NONE
シンタックスハイライトの機能にどのような設定項目があり、どの色が指定できるのかということについてはVimのインストールされた領域にファイルがまとまっているので、そちらを調査して見当を付けてほしい。例えば、今回取り上げた機能を使うなら、次のように操作すればどのファイルにデータがあるのか見当を付けることができる(PC-BSD 9.0の例。/usr/local/share/vim/vim3/以下に*.vimファイルがまとまっている)。
:args /usr/local/share/vim/vim3/**/*vim :argdo /キーワード/j | cw
ちなみにVimはVim専用のgrep機能「:vimgrep」を持っている。上の例は、:vimgrepを使って次のようにも記述できる。
:vimgrep /キーワード/j /usr/local/vim/vim73/**/*vim | cw
キーワードで検索するときは、変更したい色でgrepをかけると、どの設定が対応しているのか探しやすい。
Vimは使い込めば使い込むほど便利になっていく。これは、新しく設定を追加したり、機能を変更したりするために~/.vimrcに設定を追加していくということになるのだが、注意していないといつの間にか~/.vimrcが巨大になっていたということがある。複数のファイルに分割して読み込むようにしても問題の本質はあまり変わらない。むしろ、ファイルを分割すると問題が発生することすらある。
どんな状況においても理想的な設定というものはない。これは~/.vimrcにも言えることだ。ユーザーがVimをどんどん使い込んでいくと、よく使う機能も変わっていく。~/.vimrcには、その時点で多用する機能だけを設定しておき、使わなくなったものはバッサリ削除した方がよい。思い切った方法に見えるかもしれないが、~/.vimrcを運用する方法の1つとして参考にしてほしい。
後藤大地
オングス代表取締役。@ITへの寄稿、MYCOMジャーナルにおけるニュース執筆のほか、アプリケーション開発やシステム構築、『改訂第二版 FreeBSDビギナーズバイブル』『D言語パーフェクトガイド』『UNIX本格マスター 基礎編〜Linux&FreeBSDを使いこなすための第一歩〜』など著書多数。
Copyright © ITmedia, Inc. All Rights Reserved.