はじめに
macOSやLinuxのターミナルで設定ファイルなどの編集にVIM使うことがあるが編集コマンドとしてdd、cw、xなどをよく使っていますが、1文字あるいは単語のコピーなどのコマンドを知らないことに気づいたのでChatGPTを使って調べてわかったことをまとめました。
検証環境
次の環境で確認しました。
- macOS 26.4
- vim 9.2 (Homebrewでインストール)
$ sw_vers
ProductName: macOS
ProductVersion: 26.4
BuildVersion: 25E246
$ vim --version
VIM - Vi IMproved 9.2 (2026 Feb 14, compiled Mar 25 2026 22:04:13)
macOS 版 - arm64
適用済パッチ: 1-250
<以下略>
コピーコマンド
vimのコピーはカーソルの位置からの1文字、カーソル行、カーソル位置からの単語、行頭、行末までが対象になり、下記の表のコマンドで実行できます。
vimはコピーのことをヤンクyank(...を...からぐいっと引っ張るという意味)と呼んでいます。コマンドyはyankの頭文字です。
ヤンク(コピー)した内容は**無名レジスタ(")**と呼ぶ領域に保存され、ペーストできます。直前にヤンクされた内容はヤンクレジスタ("0)に保存されます。これらのレジスタ以外に名前付きレジスタ("a〜"z)にも保存できます。
| コマンド | コピーされる内容 |
|---|---|
| yl | カーソル位置の1文字 |
| yy または Y | カーソル行全体 |
| Nyy | カーソル行からN行分 |
| yw | カーソル位置から1単語 |
| y$ | カーソル位置から行末までの文字列 |
| y0 | カーソル位置から行頭までの文字列 |
削除コマンド
vimの削除もコピーと同様にカーソル位置およびカーソル前の1文字、カーソル行、カーソル位置からの単語、行頭、行末までの文字列が対象になり、下記の表のコマンドで実行します。
削除された文字列は削除レジスタ("1)および削除履歴レジスタ("2〜"9)、小削除レジスタ("-)に保存され、再利用できます。コマンドdはDeleteの頭文字です。
| コマンド | 削除対象 |
|---|---|
| x | カーソル位置の1文字 |
| X | カーソル前の1文字 |
| dd | カーソル行 |
| Ndd | カーソル行からN行分 |
| dw | カーソル位置から1単語 |
| diw | カーソル位置の単語全体 |
| daw | カーソル位置の単語全体とその後ろのスペース |
| d$ | カーソル位置から行末まで |
| d0 | カーソル位置から行頭まで |
削除履歴はデフォルトで~/.viminfoファイルの保存されます。
修正・変更コマンド
カーソル位置の文字や単語、あるいは行末までを削除して挿入モードに移行する、あるいは上書きモードに変更して編集できるようできます。下記の表のコマンドを使用します。
コマンドcはchangeの頭文字です。
| コマンド | 削除対象 |
|---|---|
| C | カーソル位置から行末まで削除して挿入モードに移行 |
| ccまたはS | カーソル行全体を削除して挿入モードに移行 |
| cw | カーソル位置の単語を削除して挿入モードに移行 |
| c$ | カーソル位置から行末までを削除し、挿入モードに移行 |
| s | カーソル位置の文字を削除して挿入モードに移行 |
| r | カーソル位置の一文字のみを変更 |
| R | カーソル位置以降の文字を上書きモードで変更できるようにする |
ペーストコマンド
無名レジスタに保存された文字列は下記の表のコマンドでカーソル位置や次あるいは前の行にペーストできます。コマンドpはpasteの頭文字です。
| コマンド | 内容 |
|---|---|
| p | カーソル後または次行にペースト |
| P | カーソル前または前行にペースト |
名前付きレジスタを利用する
名前付きレジスタを使ってヤンクする時はコマンドの前に名前付きレジスタを指定します。
例えば、カーソル行をヤンクしてそれを名前付きレジスタ"aに保存する時は次のコマンドを実行します。
"ayy
名前付きレジスタには保存されている内容に追記できます。レジスタ名を大文字にすると追記されます。名前付きレジスタ"aにヤンクした内容を追記する時はレジスタ名を大文字にした次のコマンドを実行します。
"Ayy
名前付きレジスタの文字列を貼り付けるときはコマンドの前に名前付きレジスタを指定します。名前付きレジスタ"aの内容をペーストする時は次のコマンドを実行します。
"ap
ブラックホールレジスタ
削除したときに無名レジスタの内容を壊したくないときはブラックホールレジスタ("_ )を使います。
行削除した内容をブラックホールレジスタに格納するときは次のようにコマンドを実行します。
"_dd
レジスタの内容を確認する
レジスタに格納された内容は:registerあるいは:regコマンドを使います。
さいごに
vimの使っていない機能を確認できました。これで少しは編集効率が上がるでしょう。