UNIX for Bioinformatics

7. vim

vi あるいは vim はテキストエディタと呼ばれているものである。テキストエディタは、プログラムを書くために使われるエディタである。vim のほかに、emacs、nano、Sublime Text、Atom、メモ帳などがある。これらのテキストエディタは、名前の通りで、文字の編集のみが可能なエディタである。画像を埋め込んだり、見出しや段落の文字のサイズを調整したりするような機能が備え付けられていない。ワードなどのアプリケーションに比べれば、テキストエディタの機能は少ないが、プログラムを書く上でお節介な機能がなく、実に効率いいものである。

テキストエディタには CLI 操作で行うものと GUI 操作で行うものがある。vim は CLI 操作でテキストの入力や編集を行うテキストエディタである。自分のパソコンなどを使用するときに、CUI 操作できるテキストエディタは便利かもしれない。しかし、スパコン上でプログラムを編集したり、あるいはプログラムの設定ファイルを少しだけ書き換えたりしたい場合は、CLI 操作に頼らなくてはならない。このとき、vim が使われる。vim の操作、テキストの入力、コピー、貼り付け、保存など、すべてがキーボードを通して行われる。そのため、これらの操作を切り替えるための制御キーが多く用意されている。初めからこれらの制御キーをすべて覚えるのがほぼ不可能で、これから毎日使っていく中で徐々に覚えいくのがよい。

vim のモード

vim ではキーボード入力のみで様々な編集機能を果たす必要がある。これらの機能は、normal mode、insert mode、cmdline mode、visual mode などのモードに分類されている。例えば、入力や編集を行うときは、vim を insert mode に切り替えて行い、また、文字列の検索をしたければ、cmdline mode に切り替えて行う。初めのうちは normal mode、insert mode、cmdline mode を使えるようになれば十分である。

モード機能
normal modevim のデフォルトのモード。入力カーソルの移動は可能だが、文字の入力や削除ができない。normal mode から他モードに切り替えることができる。他のモードを使用しているときに、Esc キーを入力するだけで、normal mode に戻ることができる。
insert mode文字の入力や削除が行える。normal mode の状態で I キーを入力することで、insert mode に切り替えることができる。
cmdline modeファイルの保存、検索などの動作命令を行うときに使用するモードである。normal mode の状態で、: キーを入力すると、cmdline mode に切り替えることができる。その状態で、コマンドを入力すると保存や検索ができるようになる。コマンドの実行後に、normal mode に戻る。
visual modenormal mode とほぼ同じだが、カーソルで文字列の選択ができるようになる。選択した文字列は必要に応じてコピーや切り取りなどが行えるようになる。normal mode の状態で v キーを入力することで、visual mode に切り替えることができる。

vim の起動と終了

編集したいファイルのパスを指定して vim を起動する。例えば、samples ディレクトリにある murphys_law.txt ファイルを編集する場合は、次のように vi コマンドに murphys_law.txt のパスを指定して実行する。なお、ここで vim を起動するときに vi コマンドを使うが、代わりに vim コマンドを使っても良い。vivim コマンドは厳密には異なるが、最新ばの vim がインストールされているコンピュータでは、同じプログラムを起動できるようになる。

起動直後の vim は normal mode になる。この状態で、カーソルの移動だけが可能で、そのほかの操作は行えない。試しにこの状態で、キーボードの j、k、h、l のキーを何回か入力してください。カーソルが、上下左右に移動されることが確認できる。昔のキーボードには上下左右の矢印キーがなかったために、こうした j、k、h、l キーがカーソルの移動に使われた経緯がある。現在は、最新版の vim では j、k、h、l のキーに加えて、上下左右の矢印キーでもカーソルの移動ができるようになっている。しかし、一部の古い版の vi/vim は上下左右の矢印キーをサポートしていない。そのため、上下左右のキーを押しても反応しないときは、j、k、h、l キーを試してみてください。

normal mode では基本的に j、k、h、l キーのみを使って操作を行った方が無難である。その他のキーを入力したとき、他のモードに切り替わる可能性がある。例えば、i キーや a キーを入力すると、insert mode に切り替わる。また、v キーを入力すると、visual mode に切り替わる。vim を使っているときに、不明なモードに切り替わった場合、Esc キーを入力してください。Esc キーを入力することによって、normal mode に戻ることができるようになる。

vim を終了させたいときは、まず、Esc キーを入力して、vim を normal mode に切り替える。続けて、normal mode の状態で : キーを入力する。: を入力することで、vim は cmdline mode に切り替わる。このとき、vim に対して終了命令を出せばよい。vim を終了したい場合は q キーを入力して Enter/Return キーを押す。ファイルの編集内容の保存して終了する場合は、wq を入力して Enter/Return キーを押す。また、編集した結果を保存せずに終了したい場合は q! を入力して、Enter/Return キーを押す。これをまとめると次の表ようになる。

命令機能
:qvim を終了(quit)させる。
:wq編集内容を保存(write)してから vim を終了(quit)させる。
:q!編集内容を保存せず(!)に vim を終了(quit)させる。

vim で起動と終了をスムーズに行えるように、何回か繰り返して、練習してみてください。

新しいファイルを vim で作成したとき、作成したいファイルのパスを vi コマンドに付けて実行すればよい。指定したパスにファイルが見つからない場合は、vim は空ファイルを新規作成する。指定したパスにファイルが存在する場合は、上述のように、該当ファイルが読み込まれ、内容が表示される。

テキストの入力

vim を使って新しいファイルを作成してみる。ここでは、unix4bi ディレクトリで donguri.txt というファイルを作成してみる。ターミナルで、unix4bi ディレクトリに移動し、vim を起動する。

起動直後の vim は normal mode の状態である。テキストの入力や編集を行うために、insert mode に切り替える必要がある。normal mode の状態で i キーを入力して Enter/Return を押す。i キーは insert の i に由来する。i キーによって、vim が insert mode に切り替わると、入力可能な状態にある。試しに、様々な文字を入力してみてください。

入力した文字を削除するときは Delete キーを使ってください。一部のシステムは Backspace キーをサポートしていない。また、カーソルを上下に移動したいときは、上下矢印を使ってみてください。上下矢印を入力したときに ABCD のようなアルファベットが表示されている場合は、現在使用している vim が矢印キーをサポートしてない可能性がある。その場合、修正内容のところまでの文字をすべて消して入力し直すか、一度 normal mode に切り替えて、j、k、h、l キーでカーソルを訂正位置に移動させてから、もう一度 insert mode に切り替えて訂正作業を行う。

テキストの編集が終わったあとに、この内容を保存したい場合は、cmdline mode で操作する。テキストの編集が終われば、Esc キーを押して normal mode に切り替える。続けて、: キーを入力して cmdline mode に切り替える。cmdline モードで w キーを入力して、Enter/Return キーを押す。これで、これまでの内容が donguri.txt に保存された。

編集を再開するには、normal mode から insert mode に切り替える必要がある。まず Esc キーを押して normal mode に切り替えて、続けて i キーを入力し、Enter/Return キーを押す。これで再び insert mode に切り替わり、入力可能な状態になる。入力内容を保存するには上述のように、再び normal mode に切り替えて、cmdline mode で保存操作を行う。

ファイルの編集が終われば、cmdline mode で vim を終了させる。まず、Esc キーを押して normal mode に切り替える。続けて、: キーを入力して cmdline mode に切り替えて、q キーを入力して vim を終了させる。

このように、vim を利用したファイル編集は、このように normal mode を介して、insert mode と cmdline mode を切り替えながら行う。初めは非常に使いづらくと感じる。しかし、スパコン上でファイルを編集したい場合は、このようなテキストエディタを使うしかできなく、慣れるしかない。vim にはコピーやペースト、検索などの機能もあるが、初めは意識しなくても大丈夫。とにかく vim の起動、テキストの編集、保存、 vim の終了がスムーズできるようにするのが第一目標である。

コピー、カット、ペースト

次に vim を利用して、行のコピー、カット、ペーストについて説明する。これ以降に紹介する機能は今すぐ覚えなければならない機能ではなく、今後 vim を使っていく上で徐々に覚えておくといい。

行のコピー、カット、およびペーストについて説明する。これらの操作を行うには、vim を normal mode に切り替える必要がある。normal mode で、順に y キー、1 キー、y キーを入力すると、カーソルのある行の内容が、バッファにコピーされる。コピーした行を貼り付けるには、normal mode で、p キーを入力する。コピーの代わりに、その行をカット(切り出し)したい場合は、normal mode で d キー、1 キー、d キーを入力する。

複数行の内容をコピーすることもできる。カーソルのある行から数えて下 3 行までの内容をコピーしたい場合は、y3y の順でキーを入力する。このように、2 つの y キーに挟まれた数字が、実際のコピー対象の行数となる。同様に、行をカットしたい場合は、d3d のように使う。

行ではなく、特定の文字列や単語をコピーしたりカットしたりすることもできる。まず、normal mode で、カーソルをコピーしたい単語の先頭に移動する。続けて、v キーを入力する。その後、右矢印(あるいは l キー)を何回か入力して、カーソルを移動させながら、コピーしたい単語を選択する。コピーしたい単語がすべて選択されてから、次に y キーまたは d キーを入力する。すると、選択された単語は、コピーあるいはカットされる。コピーまたはカットされた単語はバッファーに保存され、normal mode で p キーを入力すると、カーソルの位置にペーストされる。

検索

ファイルの内容に対して検索を行うとき、normal mode で操作する。normal mode で、/ キーを入力すると、検索可能な状態になる。このとき、/ キーに続けて検索したいキーワードを入力して、Enter/Return キーを押す。検索キーワードには正規表現も使える。検索対象のキーワードが、ファイルにあれば、カーソルがその場所に移動される。キーワードが見つからなかった場合は、"no hit" のメッセージが表示される。

検索で複数箇所が見つかった場合、n キーを入力すると次の箇所に移動することができる。前の箇所に戻る場合は、N キーを入力する。検索を終えたいときは、Esc キーを入力して、normal mode に切り替える。

置換

置換を行うときも、normal mode で操作し始める。たとえば、ファイルの中にある orrange をすべて orange に置換したい場合は、まず normal mode で : キーを入力して、cmdline mode に切り替える。続けて、置換命令を使って orrange を orange に置換する。この命令は、次のように s/ を組み合わせて書く。これを実行すると、最初に見つかった orrange が orange に置換される。

ファイル中のすべての orrange を orange に置換したい場合は、次のように g を付け加える。

ここでは説明しないが、置換元パターンを正規表現で書けば、置換後では後方参照することができる。

エディタ戦争

UNIX システム使用するテキストエディタには vi/vim と Emacs の 2 代流派がある。かつて、ある情報系カンファレンスの懇親会において、vi/vim 愛好家と Emacas 愛好家がちょっとした口喧嘩で、殴り合い喧嘩などに発展し、多くの死傷者が出たことがある。それをきっかけに、vi/vim 愛好家と Emacs 愛好家らゲリラ戦争に突入した。現在でも、vi/vim あるいは Emacas ユーザーが反対側から襲撃される事件が起きている。そのため、この資料で、vi/vim の基礎を学んだとしても、身の安全のために、決して自分はどのテキストエディタを使用しているのかを言わないことをおすすめする。

 

 

CC BY 4.0