Vimでプログラムを書いたり、文章を編集していると、「この部分から行の最後まで一気に消したい」と思うことがありませんか?
マウスでドラッグして選択して削除するよりも、キーボードだけで瞬時に操作できたら便利ですよね。
Vimには、カーソルがある位置から行末まで一気に削除できる便利なコマンドがあります。
この操作を覚えるだけで、プログラミングや文書編集の効率がグッと上がりますよ。
この記事でわかること
- 行末まで削除する基本コマンド
- 似ているコマンドとの違いと使い分け
- 実際のプログラミングでの活用例
- 複数行での応用テクニック
行末まで削除ってどんなときに使うの?
よくある使用場面
プログラミングでの例
# 元のコード
let message = "Hello, World!"; // 古いコメント
# この行の「//」以降を削除したい場合
# カーソルを「//」の位置に移動してコマンド実行
# 結果
let message = "Hello, World!";
文章編集での例
# 元の文章
今日は晴れていて気持ちがいいです。でも風が強いかも。
# 「でも」以降を削除したい場合
# カーソルを「でも」の位置に移動してコマンド実行
# 結果
今日は晴れていて気持ちがいいです。
データ編集での例
# 元のデータ
name,age,city,country
Alice,25,Tokyo,Japan
# 「,country」の部分を削除したい場合
# カーソルを「,」の位置に移動してコマンド実行
# 結果
name,age,city
Alice,25,Tokyo
なぜ便利なのか
時間の短縮
- マウスでドラッグする必要がない
- キーボードから手を離さなくて済む
- 一瞬で長い部分も削除できる
正確な操作
- マウスでの選択ミスがない
- 決まったコマンドなので確実に実行される
- 行末の見えない空白文字も含めて削除
作業のリズム
- コーディング中の思考を中断しない
- スムーズな編集フローを維持できる
- 他のVimコマンドとの組み合わせも簡単
では、実際のコマンドを見ていきましょう。
基本コマンド:d$の使い方
基本的なコマンド
コマンド:
d$
コマンドの意味:
d
:削除(delete)を表すコマンド$
:行末までを表すモーション(移動コマンド)
この2つを組み合わせることで、「カーソル位置から行末まで削除」という操作になります。
実際の使用例
例1:コメントの削除
元のコード:
function hello() {
console.log("Hello"); // これは古いコメントです
return "world";
}
手順:
- 2行目の「//」の位置にカーソルを移動
d$
と入力
実行結果:
function hello() {
console.log("Hello");
return "world";
}
例2:文章の修正
元の文章:
今日は学校に行きました。でも途中で雨が降ってきて大変でした。
手順:
- 「でも」の位置にカーソルを移動
d$
と入力
実行結果:
今日は学校に行きました。
例3:HTMLタグの削除
元のHTML:
<div class="container">
<p>メインコンテンツ</p> <!-- 古いコメント削除予定 -->
</div>
手順:
- 2行目の「 <!–」の位置にカーソルを移動
d$
と入力
実行結果:
<div class="container">
<p>メインコンテンツ</p>
</div>
カーソル移動のコツ
効率的なカーソル移動方法:
文字検索での移動:
f文字 : 行内で指定した文字を前方検索
F文字 : 行内で指定した文字を後方検索
使用例:
# 元の行
let name = "Alice"; // コメント
# 手順
1. f/と入力(「/」を検索)
2. カーソルが「//」の最初の「/」に移動
3. d$と入力でコメント部分を削除
単語単位での移動:
w : 次の単語の先頭に移動
b : 前の単語の先頭に移動
e : 現在の単語の末尾に移動
使用例:
# 元の行
const result = calculateSum(a, b); // 計算結果
# 手順
1. 行の先頭から3wと入力(3つ目の単語「calculateSum」に移動)
2. 必要に応じてさらに移動
3. d$で削除
注意するポイント
カーソル位置を確認
d$
はカーソルの位置から行末まで削除されます- 削除したい開始位置に正確にカーソルを置くことが重要
ノーマルモードで実行
- インサートモード(文字入力モード)では動作しません
Esc
キーでノーマルモードに戻ってから実行
元に戻す方法
- 間違って削除した場合は
u
キーでアンドゥ(取り消し) Ctrl + r
でリドゥ(やり直し)も可能
次の章では、似ているコマンドとの違いを詳しく見ていきましょう。
似ているコマンドとの違いと使い分け
Dコマンド(ショートカット版)
コマンド:
D
説明:d$
と全く同じ動作をするショートカットコマンド
使い分け:
d$
:Vimを学習中の人におすすめ(意味がわかりやすい)D
:慣れてきた人におすすめ(入力が早い)
実用例:
# 元のコード
const data = {name: "Alice", age: 25, city: "Tokyo"};
# 「, city: "Tokyo"」を削除したい場合
# どちらのコマンドでも同じ結果
1. カーソルを「,」の位置に移動
2. d$またはDを入力
# 結果
const data = {name: "Alice", age: 25};
Cコマンド(削除+編集)
コマンド:
C
説明:行末まで削除した後、すぐにインサートモード(文字入力モード)に切り替わる
d$
との違い:
d$
:削除のみ、ノーマルモードのままC
:削除+インサートモードに移行
実用例:
# 元のコード
let message = "古いメッセージです";
# 「"古いメッセージです"」を「"新しいメッセージ"」に変更したい場合
# d$を使う場合
1. 「"」の位置にカーソル移動
2. d$で削除
3. iでインサートモードに入る
4. "新しいメッセージ"と入力
# Cを使う場合
1. 「"」の位置にカーソル移動
2. Cで削除+インサートモード移行
3. "新しいメッセージ"と入力
使い分けのポイント:
- 削除だけしたい場合:
d$
またはD
- 削除してすぐに新しい内容を入力したい場合:
C
その他の類似コマンド
行全体の削除:
dd : 行全体を削除
特定の位置まで削除:
dt文字 : 指定した文字の直前まで削除
df文字 : 指定した文字を含めて削除
実用例:
# 元のコード
function test(a, b, c) {
# 「, c」だけを削除したい場合
1. 「,」の位置にカーソル移動
2. dt)と入力(「)」の直前まで削除)
# 結果
function test(a, b) {
コマンドの選択フローチャート
行末まで削除したい?
├─ はい
│ ├─ 削除だけしたい → d$ または D
│ └─ 削除後すぐに入力したい → C
└─ いいえ
├─ 行全体を削除したい → dd
├─ 特定の文字まで削除したい → dt文字 または df文字
└─ 1文字だけ削除したい → x
この使い分けを覚えることで、状況に応じて最も効率的なコマンドを選択できるようになります。
実践的な活用例とテクニック
プログラミングでの具体的な活用例
例1:コメントの一括削除
説明:プログラムファイルで不要なコメントを削除する
元のコード:
function calculateTotal(items) {
let sum = 0; // 合計を計算する変数
for (let item of items) { // 各アイテムをループ処理
sum += item.price; // 価格を加算
}
return sum; // 結果を返す
}
手順: 各行のコメント部分(「//」から行末まで)を削除
- 1行目:「//」の位置で
d$
- 2行目:「//」の位置で
d$
- 3行目:「//」の位置で
d$
- 4行目:「//」の位置で
d$
結果:
function calculateTotal(items) {
let sum = 0;
for (let item of items) {
sum += item.price;
}
return sum;
}
例2:HTMLの属性削除
説明:HTMLタグから不要な属性を削除する
元のHTML:
<div class="container" id="main-content" data-test="true">
<img src="image.jpg" alt="画像" width="300" height="200">
<p class="text" style="color: red; font-size: 14px;">テキスト</p>
手順:
- 1行目:「id=”main-content”」以降を削除
id
の位置でd$
、その後>
を追加
- 3行目:
style
属性以降を削除style
の位置でdt>
(「>」の直前まで削除)
結果:
<div class="container">
<img src="image.jpg" alt="画像" width="300" height="200">
<p class="text">テキスト</p>
例3:設定ファイルの値変更
説明:設定ファイルの値を新しい値に変更する
元の設定ファイル:
server_name = "localhost"
port = 8080
debug_mode = true
log_level = "verbose"
手順: 各設定値を変更する場合
- 「”localhost”」を削除:
"
の位置でC
、新しい値を入力 - 「8080」を削除:
8
の位置でC
、新しい値を入力
結果例:
server_name = "production.example.com"
port = 443
debug_mode = true
log_level = "verbose"
複数行での応用テクニック
テクニック1:ビジュアルモードとの組み合わせ
説明:複数行の同じ位置から行末まで一括削除
手順:
- 削除開始位置にカーソルを移動
Ctrl + v
でビジュアルブロックモードに入るj
キーで下の行に移動(複数行選択)$
キーで行末まで選択範囲を拡張d
キーで削除実行
実用例:
# 元のコード
const name1 = "Alice"; // 人物1
const name2 = "Bob"; // 人物2
const name3 = "Charlie"; // 人物3
# 手順
1. 1行目の「//」にカーソル移動
2. Ctrl+vでブロック選択開始
3. jjで3行選択
4. $で行末まで選択
5. dで削除
# 結果
const name1 = "Alice";
const name2 = "Bob";
const name3 = "Charlie";
テクニック2:マクロとの組み合わせ
説明:同じ削除操作を複数行で繰り返し実行
手順:
qa
でマクロ記録開始(レジスタa)- 削除操作を実行(例:
f/d$
で「//」以降削除) j
で次の行に移動q
で記録終了@a
でマクロ実行(または3@a
で3回実行)
実用例:
# 元のコード
let a = 1; // 変数a
let b = 2; // 変数b
let c = 3; // 変数c
let d = 4; // 変数d
# マクロ作成手順
1. qa(記録開始)
2. f/(「/」を検索)
3. d$(行末まで削除)
4. j(次の行に移動)
5. q(記録終了)
# マクロ実行
@a(1回実行)
2@a(2回実行)で残りの行も処理
# 結果
let a = 1;
let b = 2;
let c = 3;
let d = 4;
テクニック3:検索との組み合わせ
説明:特定のパターンを含む行で一括削除
手順:
/pattern
で検索パターンを指定n
で次の検索結果に移動d$
で削除n
とd$
を繰り返し
または、コマンドラインで一括処理:
:g/pattern/s/pattern.*$//
実用例:
# 元のコード
function test1() { // TODO: 実装する
function test2() {
function test3() { // TODO: テストを書く
function test4() {
# 「TODO」コメントだけ削除したい場合
:g/TODO/s/\/\/.*TODO.*$//
# 結果
function test1() {
function test2() {
function test3() {
function test4() {
削除した内容の活用
削除内容の貼り付け
説明:d$
で削除した内容は自動的にコピーされ、後で貼り付け可能
基本操作:
d$ : 削除(内容はクリップボードに保存)
p : カーソル後に貼り付け
P : カーソル前に貼り付け
実用例:
# 元のコード
let message = "Hello, World!"; // 古いコメント
let name = "Alice";
# 手順
1. 1行目の「//」で d$(コメントを削除&コピー)
2. 2行目の行末に移動
3. p で貼り付け
# 結果
let message = "Hello, World!";
let name = "Alice"; // 古いコメント
特定レジスタへの削除
説明:削除内容を特定の場所に保存して後で使用
操作方法:
"ad$ : レジスタaに削除内容を保存
"ap : レジスタaの内容を貼り付け
この活用により、削除した内容を効率的に再利用できます。
効率を上げるコツとベストプラクティス
キーボード操作の最適化
効率的なカーソル移動の組み合わせ
文字検索+削除の組み合わせ:
f文字d$ : 指定文字まで移動して行末まで削除
F文字d$ : 指定文字まで逆方向移動して行末まで削除
実用例:
# 元のコード
const config = {host: "localhost", port: 8080, debug: true};
# 「, port:」以降を削除したい場合
1. f,d$と連続入力
# 結果
const config = {host: "localhost"};
単語境界での移動+削除:
wd$ : 次の単語に移動して行末まで削除
bd$ : 前の単語に移動して行末まで削除
数値との組み合わせ:
3wd$ : 3個先の単語に移動して行末まで削除
2f;d$ : 2番目の「;」に移動して行末まで削除
作業パターンの効率化
パターン1:コメント削除の自動化
問題:コードファイル全体からコメントを削除したい
解決方法:
# 方法1:検索置換
:%s/\/\/.*$//g
# 方法2:gコマンド
:g/\/\//s/\/\/.*$//
パターン2:行末の余分な文字削除
問題:各行末の余分な空白や文字を削除したい
解決方法:
# 行末の空白削除
:%s/\s\+$//g
# 特定文字以降の削除
:%s/特定文字.*$//g
パターン3:条件付き削除
問題:特定の条件を満たす行のみで行末削除を実行
解決方法:
# 「function」を含む行のみ削除対象
:g/function/normal f{d$
# 行番号指定での削除
:10,20s/pattern.*$//
エラー防止のテクニック
操作前の確認習慣
カーソル位置の確認:
- 削除開始位置が正しいかを目視確認
:
でカーソル位置の行番号・列番号を表示可能
削除範囲の事前確認:
v$ : ビジュアルモードで削除範囲を事前確認
ESC : 確認後にキャンセル
d$ : 確認できたら実際に削除
アンドゥの活用:
u : 直前の操作を取り消し
Ctrl+r : 取り消した操作をやり直し
:earlier 1m : 1分前の状態に戻る
設定による効率化
vimrcでの便利設定:
行番号表示:
set number " 行番号表示
set relativenumber " 相対行番号表示
カーソル位置の強調:
set cursorline " カーソル行をハイライト
set cursorcolumn " カーソル列をハイライト
検索の設定:
set hlsearch " 検索結果をハイライト
set incsearch " インクリメンタル検索
キーマッピングのカスタマイズ:
" 行末削除のショートカット
nnoremap <Space>d d$
" 削除+編集のショートカット
nnoremap <Space>c C
チーム作業での活用
コードレビューでの活用:
- 不要なコメントやデバッグコードの削除
- 一時的な変更の取り消し
- フォーマットの統一
ペアプログラミングでの活用:
- 素早い修正でリズムを保つ
- 思考の流れを止めない編集
- 相手に操作方法を共有
ドキュメント作成での活用:
- 下書きの整理
- 不要な部分の削除
- 構造の調整
これらのコツを身につけることで、Vimでの編集作業がより快適で効率的になります。
まとめ
重要なポイントをおさらい
基本コマンド
d$
:カーソル位置から行末まで削除(基本形)D
:d$
と同じ動作のショートカットC
:行末まで削除+インサートモード移行
効率的な使い分け
- 削除のみ:
d$
またはD
を使用 - 削除して新しい内容を入力:
C
を使用 - 1文字だけ削除:
x
を使用 - 行全体削除:
dd
を使用
カーソル移動との組み合わせ
- 文字検索:
f文字d$
で効率的な削除 - 単語移動:
wd$
で単語境界からの削除 - 数値指定:
3wd$
で複数要素の削除
よくある間違いと解決方法
問題:カーソル位置を間違える
- 症状:意図しない部分が削除される
- 解決:操作前にカーソル位置を目視確認、必要に応じてビジュアルモードで範囲確認
問題:コマンドを間違える
- 症状:期待した動作にならない
- 解決:ノーマルモードであることを確認、
Esc
キーでモード切り替え
問題:削除しすぎる
- 症状:必要な部分まで削除してしまう
- 解決:
u
キーでアンドゥ、dt文字
で特定位置までの削除を活用
コメント