103.8基礎
viのノーマルモードで、カーソルがある現在行を内容ごとコピーする。
元の行を残したまま、その直下へ同じ行を1行追加する。
適切なキー操作はどれか。
× 不正解
yyは現在行を行単位でヤンクし、pはカーソル行の後へ貼り付ける。続けてyypと入力すると現在行を直下へ複製できる。
詳細解説
誤り
ddpddは現在行を削除してから貼り付けるため、行の移動となり複製されない。
誤りです。ddで元の行を削除し、pで別位置へ戻します。
行数は増えず、現在行を下へ移動しただけになるため複製ではありません。
誤り
yy現在行をヤンクするだけで、直下への貼り付けを行わない。
誤りです。yyにより現在行のコピーはレジスタへ入ります。
バッファへ新しい行を追加するpがないため、画面上の内容はまだ変わりません。
正しい
yypyyで現在行をヤンクし、pで現在行の直後へ貼り付ける。
正しい選択肢です。最初のyyが現在行を行単位でヤンクします。
続くpがその内容を現在行の直後へ貼り付けるため、元の行を残した複製になります。
誤り
p直前のレジスタ内容を貼り付けるだけで、現在行をコピーした保証がない。
誤りです。pは現在レジスタにある内容を貼り付けます。
直前に現在行をヤンクしていないため、何が貼られるかは過去の操作に依存します。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'alpha
beta
gamma
' > sample.txt
vim -Nu NONE -n -es sample.txt <<'VIM'
2
normal! yyp
wq
VIM
cat sample.txt期待される結果
alpha
beta
beta
gamma理解のポイント
- yyは行単位のヤンク
- pはカーソル位置の後へ貼り付け
- ddpは複製ではなく移動
確認時の注意
- 確認環境: Vim 9.x / 個人設定なし
- 検証は個人設定を読まないvim -Nu NONEを使用します。
- exモードで自動実行し、元のsample.txtは検証用に新規作成します。
基礎のおさらい
ヤンク
viではコピーをyankと呼びます。yyは現在行を改行を含む行単位でレジスタへ保存します。
pとP
行単位の内容ではpが現在行の後、Pが現在行の前へ貼り付けます。文字単位ではカーソル位置との関係になります。
削除もレジスタへ入る
ddで削除した行もレジスタに入るため、ddpは行移動として使えます。複製とは結果が異なります。
問題IDKP-103-010
確認環境Vim 9.x / 個人設定なし
最終技術確認2026-08-12
誤り・権利侵害を報告