【Vim】 マークとレジスター

この記事は9年以上前に書かれたものです。 情報が古い可能性があります。

マークとレジスターは、Vimでのテキスト編集をより効率的に行うために、是非とも憶えておきたい機能です。

1. マーク

マークは文字どおり、ファイル中の任意の場所に(見えない)印を付ける機能です。いったん付けた印は、ファイルを開いている間だけ、もしくはファイルを閉じて別のファイルを開きなおした後も、Vimの中で保持されます。

現在のカーソル位置にマークを設定するには、ノーマルモード又はビジュアルモードで

などと入力します。aはマークの名前を表し、大文字・小文字併せて52個のマークを設定する事ができます。小文字のa~zはカレントバッファ(現在編集中のファイル)のみで有効で、大文字のA~Zはファイルを閉じても有効です(~/.viminfoに、ファイルのパスとともに”ファイルマーク”として保持されます)。

設定したマークへカーソルを移動させるには、ノーマルモード又はビジュアルモードで

などと入力します。なお大文字のA~Zの場合は、そのマークした場所が現在編集中でないファイルであっても、そのファイルが自動的に開いた上でマークの箇所へ移動します。また、バッククォートの代わりに

と入力すると、マークのある行の先頭(カラム0)へカーソルが移動します。

マークは、単にカーソル移動として使うことももちろん可能ですが、テキストのヤンク(コピー)や削除の際の範囲指定に使用することもできます。例えば、現在のカーソル位置からaのマークを設定した場所までのテキストをヤンクしたい場合は、ノーマルモードで

と入力します。バッククォートの代わりにシングルクォート(')を使用すれば、aのマークを設定した行の先頭からのヤンクになりますので、行単位でのヤンクの場合はシングルクォートの方が少ない手間でヤンクできます。

また上記の他に、特殊なマークが用意されています。役に立ちそうなものを、いくつかかいつまんでご紹介します。

なお、これらは全て読み取り専用のマークで、ユーザーが位置を任意に設定することはできません。また、ほとんどのマークは、いったんファイルを閉じて再度ファイルを開いた場合でも有効です。例えば、あるファイルを開いた直後に

と入力すれば、そのファイルの直前の編集位置にカーソルを移動することができます(これは、そのファイルに対する作業内容を思い出すのに役に立ちます)。

現在設定されているマークの一覧を表示するには、コマンドモードで

を実行します。実行例は以下のとおりです。

Vimでマークの一覧を表示する

Vimでマークの一覧を表示する

上図の0~6のマークは、(上記のとおり)直近にVimで開いたファイルの一覧を表しています。これは、0~6のマークへ移動することで、そのファイルを素早く開くことができる、ということを意味します。例えば上図の状態で、

と入力すると、すぐさま~/.bashrcが開き、そのファイルを前回閉じた際の位置へカーソルが移動します。これは非常に便利な機能です。

より詳しい情報は、Vimの:help markで確認することができます。

2. レジスター

レジスターは、ヤンク又は削除したテキストを格納する変数のようなものです。例えば、aというレジスターにヤンクした1行分のテキストを格納するには、ノーマルモード又はビジュアルモードで

と入力します。先頭のダブルクォートが、これから行う操作にレジスターを割り当てる、という宣言になります。また、レジスターaに格納されたテキストをプット(貼り付け)するには、同様にダブルクォート(及びレジスター)を前置して、

と入力します。なお、レジスターを指定せずにヤンク、削除もしくはプットした場合は、無名レジスター(")が暗黙的に指定されます。

レジスターには、主に以下の種類があります。なお一部、読み取り専用のレジスターもあります。

名前付きレジスターは通常、ヤンク又は削除したテキストを格納し、同時にそれまで保持していたテキストをクリアしますが、ヤンク又は削除時にレジスターを**大文字**にすると、現在保持しているテキストの**末尾に**新たなテキストを追加します。これは、あちこにち散らばったテキストを繋げながらコピーするのに役立ちます。

レジスターが現在保持しているテキストを確認するには、コマンドモードで

を実行します。実行例は以下のとおりです。

Vimでレジスターの一覧を表示する

Vimでレジスターの一覧を表示する

ここで^Jは、改行文字を表します。

より詳しい情報は、Vimの:help registersで確認することができます。

なお、マークとレジスターの基本的な機能は旧Viにも搭載されています。ちなみにViにはビジュアルモードがないため、範囲指定のヤンクや削除を行う場合には、マークを使わないと作業効率が格段に落ちてしまいます。Vi派/Vim派に係らず、作業効率アップを図るなら、是非とも憶えておきたい技術だといえます。

以上、簡単ですがVimに関するHowToをご紹介しました。


ご意見やお問い合わせについて

この記事へのご意見やお問い合わせについては、こちら(お問い合わせフォーム)もしくは
Hinemos営業担当【hsd-sales@atomitech.jp】までご連絡ください。

※お問い合わせフォームからご連絡の場合には、お問い合わせ内容で「Hinemosについて」を選択し、
 本文の冒頭に「Hinemos研究日記_【タイトル名】」とご記載ください。
※メールアドレスへご連絡の場合には、件名を「Hinemos研究日記_【タイトル名】」でご連絡ください。