header image
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • HOME
  • プログラム・ソフト
  • Vim
  • Vimのレジスタの種類とコマンドの使い方・構造

Vimのレジスタの種類とコマンドの使い方・構造

投稿日:2022年4月11日 更新日:2022年6月15日

  • Tags: [コマンド集], [テキストエディター], [使い方],

サムネイル

コピー&ペースト(コピペ)使用時にはクリップボードが使われますが、
テキストエディターVimはそれとは独立した領域を持ち、それをレジスタと呼びます。
レジスタにはいくつか種類があり、コピーするときと貼り付けるときに使用するレジスタの指定ができます。

  • レジスタとは
    • レジスタの種類
      • ヤンク・削除・変更時に使われるレジスタ
    • レジスタの一覧表示
  • 使い方・コマンドの構造
    • レジスタに入れる
      • ノーマルモードのとき
      • ビジュアルモードのとき
    • レジスタから取り出す
      • ノーマルモードのとき
      • 挿入モードのとき
  • デフォルトの使用レジスタの設定方法
  • まとめ
  • 参考文献

レジスタとは

Vimにおけるクリップボード = レジスタ
Fig.1. Vimにおけるクリップボード = レジスタ

レジスタは、Vim独自のクリップボードで、コピーしたものを一時保管する場所です。
通常のクリップボードとは独立しているので、エディター外のソフトとの間でコピペをするに、
ちょっとした操作 or 設定が必要になります。
またVimではコピー = ヤンク、ペースト = プットと呼びます。

レジスタの種類

名称レジスタ名意味
無名レジスタ"ヤンクや削除・変更時に無差別に入る
番号付きレジスタ0直近のヤンクが入る(名前未指定時)
番号付きレジスタ1 – 9直近の削除・変更したものが1に入り、9へと順に移動していく(名前未指定時)
名前付きレジスタa – z名前を指定して入れられる(上書き)
名前付きレジスタA – Za–zの内容に追加で入れられる
読み取り専用レジスタ.直近に挿入した文字が入る
読み取り専用レジスタ%編集中のファイル名が入る
読み取り専用レジスタ:直近に実行したコマンドモードのコマンドが入る
選択領域用レジスタ+, *クリップボードの中身が入る
最終検索パターンレジスタ/直近の検索パターンが入る
ブラックホールレジスタ_入れたものを消去する

これが全部ではないですが、使用頻度が比較的高いものを上記に載せました。

格納先のレジスタを未指定でヤンク(コピー)を行うと無名レジスタに格納され、
また取り出すレジスタを未指定でプット(ペースト)すると、同様に無名レジスタから取り出されます。

レジスタ + (*) はクリップボードと同期していますが、
使用しているVimが対応していなかったり、環境によっては使用できません。
Linuxでの確認方法、設定方法は下記記事を参考に。

>> Vim (Vi)でコピー&ペーストするコマンドまとめとエディタ外部間で行う方法

ヤンク・削除・変更時に使われるレジスタ

ヤンク時に使用されるレジスタと、消削・変更時に使用されるレジスタ
Fig.2. ヤンク時に使用されるレジスタと、消削・変更時に使用されるレジスタ

Vim内でヤンク(コピー)や削除・変更を行うと、テキストはレジスタに格納されます。
このとき、無名レジスタ " には無差別に入ります。
指定してレジスタa~zに入れない場合は、
ヤンク時にはレジスタ0、削除・変更時にはレジスタ1に入れられます (Fig.2)。

  • レジスタ未指定(ヤンク):", 0
  • レジスタ未指定(削除・変更):", 1 ~ 9
  • レジスタ指定:", a–z (A–Z)

慣れない間は「ヤンクしておいたテキストが、削除したときに無意識に上書きしてしまった」
というようなことが起こるかもしれません。
そうならないよう、削除・変更時にどのレジスタにも入れたくないときには、ブラックホールレジスタを使用します。
このときは無名レジスタにも入らず、上書きされません。
レジスタ未指定時に無名レジスタではなく、ブラックホールレジスタを使用するように設定する方法は後述します。

レジスタの一覧表示

レジスタの中に、現在何が格納されているのか確認したい時には、
Vimのノーマルモードのときに下記を入力します(コマンドモード使用)。

:reg <Enter>

または

:registers <Enter>

使い方・コマンドの構造

レジスタに格納するには、ノーマルモード・ビジュアルモードを、レジスタから取り出すときはノーマルモード・挿入モードを使用する
Fig.3. レジスタに格納するには、ノーマルモード・ビジュアルモードを、レジスタから取り出すときはノーマルモード・挿入モードを使用する

ノーマルモードでレジスタへの格納・取り出しが行えますが、
レジスタへの格納はビジュアルモードでも、
レジスタからの取り出しはインサートモードでも可能です (Fig.3)。

レジスタに入れる

ノーマルモードのとき

ノーマルモードのときのレジスタへの格納(ヤンク使用)
Fig.4. ノーマルモードのときのレジスタへの格納(ヤンク使用)

操作コマンド
1行ヤンクして無名レジスタへ格納yy
1行ヤンクしてレジスタaへ格納"ayy
カーソルから行末までヤンクしてレジスタbへ格納"bY$
カーソル行から最終行まで削除してレジスタcへ格納"cdG

ノーマルモードのときに、テキストをレジスタに格納するコマンドを一般化すると次になります。

" {レジスタ名} {オペレーター} {モーション}

オペレーターというは、ヤンク・削除・変更といった範囲を指定して作用するコマンドのことです。
モーションというのは、カーソルの移動のことです。

ダブルコーテーションの後に格納先のレジスタ名を指定し、コマンドとその範囲を指定するということになります。

オペレーター、モーションについては下記でもっと詳しく説明しています。

>> Vimのコマンドの表記とコマンドの基本構造(オペレーターとモーション)

オペレーターの例

  • ヤンク : y
  • 削除 (切り取り) : d
  • 変更 : c

モーションの例

  • 1単語 : w
  • カーソルから行末まで : $
  • カーソルから行頭まで : 0

コマンドとその範囲指定をするとき、例外的に下記も使用できます。

例外的なオペレーター・モーションの指定

  • {オペレーター} x2 : カーソル行に対してオペレーターを作用
  • (文字で){オペレーター} : カーソルから行末までに対してオペレーターを作用

ビジュアルモードのとき

ビジュアルモードのときのレジスタへの格納(ヤンク使用)
Fig.5. ビジュアルモードのときのレジスタへの格納(ヤンク使用)

操作コマンド
指定した範囲を無名レジスタへ格納{範囲指定}y
指定した範囲をレジスタaへ格納{範囲指定}"ay

ビジュアルモードのときに、テキストをレジスタに格納するコマンドを一般化すると次になります。

{ビジュアルモードでの範囲指定} " {レジスタ名} {オペレーター}

ビジュアルモードでテキスト範囲を指定しておき、ダブルコーテーションの後に格納先のレジスタ名を指定、コマンド入力ということになります。

ビジュアルモードへの入り方(ノーマルモードから)

  • 文字単位のビジュアルモード : v
  • 行単位のビジュアルモード : V
  • 矩形ビジュアルモード : Ctrl-v

レジスタから取り出す

ノーマルモードのとき

ノーマルモードのときのレジスタからの取り出し(プット)
Fig.6. ノーマルモードのときのレジスタからの取り出し(プット)

操作コマンド
無名レジスタから取り出し、カーソルの後方に貼り付けp
レジスタaから取り出し、カーソルの後方に貼り付け"ap
レジスタbから取り出し、カーソルの前方に貼り付け"bP

ノーマルモードのときに、レジスタからテキストを取り出すときにはプット(ペースト)コマンドを使用します。
コマンドを一般化すると次になります。

" {レジスタ名} {プットコマンド}

ダブルコーテーションの後に格納先のレジスタ名を指定し、プットコマンドの構成になります。

挿入モードのとき

挿入モードのときのレジスタからの取り出し(プット)
Fig.7. 挿入モードのときのレジスタからの取り出し(プット)

操作コマンド
無名レジスタから取り出し、カーソルの後方に貼り付けCtrl-r "
レジスタaから取り出し、カーソルの後方に貼り付けCtrl-r a

挿入モードのときにレジスタからテキストを取り出すときには、
Ctrl-rを押すとダブルコーテーション " が表示されるので、
その後にレジスタ名を入力する
とカーソル後方にプット(ペースト)されます。

Ctrl-r {レジスタ名}

デフォルトの使用レジスタの設定方法

vnoremap d "_d
nnoremap d "_d
vnoremap D "_D
nnoremap D "_D
vnoremap x "_x
nnoremap x "_x
vnoremap X "_X
nnoremap X "_X
vnoremap c "_c
nnoremap c "_c
vnoremap C "_C
nnoremap C "_C

レジスタを指定せずにヤンク・削除・変更やプットを行うと、
無名レジスタを指定したコマンドを実行することになります。
しかしそれだと不便に思う人もいるかもしれません。
対応策の1つとして、キーマップを変更する方法があります。

たとえば、削除・変更時に無名レジスタへ入れたくないときは、
削除コマンドキーd(,x)と変更コマンドキーcを押したときに、
ブラックホールレジスタを指定したコマンドを実行するように設定します。

Vimの設定ファイルである .vimrcファイル に左のテキストを追記すればよいです。

これでレジスタを指定せずに削除・変更を行っても、ヤンクしたテキストが上書きされなくなります。

まとめ

  • レジスタとは: Vimエディター固有のクリップボード
  • レジスタの種類
    • レジスタ未指定(ヤンク):", 0
    • レジスタ未指定(削除・変更):", 1 ~ 9
    • レジスタ指定:", a–z
  • コマンド
    • レジスタの中身の一覧表示::reg<Esc>
    • レジスタへ格納
      • (ノーマルモード)"ayy : 1行ヤンクしてレジスタaへ格納
      • (ビジュアルモード){範囲指定}"ay : 指定した範囲をレジスタaへ格納
    • レジスタから取り出し
      • (ノーマルモード)"ap : レジスタaから取り出し、カーソルの後方に貼り付け
      • (挿入モード)Ctrl-r a : レジスタaから取り出し、カーソルの後方に貼り付け

レジスタ以外にもVimにはさまざまな機能が存在しています。
下記の一覧をみれば、ある程度どんな機能があるのか知ることができます。
>> 【動画あり】Vimのコマンドを一覧にまとめてみた

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Raspberry Piで音楽サーバー(Rune Audio)

Vimで便利な小技(よく使うコマンド集)

【超初心者向け】Vim(Vi)でなんとかファイル編集する方法

自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

【動画あり】Vimのコマンドを一覧にまとめてみた

Vim (Vi)でコピー&ペーストするコマンドまとめとエディタ外部間で行う方法

Vimでサクッと置換する方法と置換コマンドの構成

VSCodeのPython(Jupyter)のショートカットと表示設定

  • プロフィール

  • Yoshiharu

  • 現在、ひよっこ光学系エンジニアをやっている一般人です。我流でプログラムをいじったりしています。備忘録、知識整理を兼ねてアウトプットをしていく予定です。

    • 【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

      2022.11.23

      【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較


    • ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

      2022.11.03

      ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!


    • 自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

      2022.10.13

      自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】


    • 【初心者向け】FreeCADの基本的な使い方と手順の流れ

      2022.10.11

      【初心者向け】FreeCADの基本的な使い方と手順の流れ


    • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

      2022.09.07

      【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算


  • アーカイブ

    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年1月
    • 2021年11月
    • 2021年9月
    • 2021年8月
    • 2021年7月
    • 2021年2月
    • 2021年1月
    • 2020年12月
    • 2020年10月
    • 2020年9月
    • 2020年8月
    • 2020年7月
    • 2020年3月
    • 2020年2月
    • 2020年1月
  • カテゴリー

    • Vim
    • ガジェット
    • プログラム・ソフト
    • 光学
    • 情報処理
    • 物理学・工学
    • プログラム・ソフト
    • 物理学・工学
    • ガジェット
    • 当サイトについて
    • お問い合わせ
    Y Lab Desk

    Copyright © Y Lab Desk, 2022 All Rights Reserved.