ミズノブログ

ミズノです。プログラミング・子育て・経年変化するもの など好きなことを雑多に書きます。

vim:"diw"は "d + i + w" に分けて考える

「vimtutor」で基本操作を勉強したのち、最初につまづいたのが

「"diw" = 単語ごとに削除」

でした。コマンドから意味が推測出来ない。。

色々調べてみたところ、"d"を「operator」、"iw"を「text-object」と言うそうです。勉強したついでに整理してみました。

コマンド入力ルール

"回数" + "操作" + "範囲" + "単位" の組み合わせで決定する。

  • "回数"は省略可能。(省略した場合は"1"回)
  • "範囲"は"操作"によっては省略可能。(省略した場合は"a"選択と同様)

上記ルールに則って、操作、範囲、単位の引き出しを増やしていけばOKのようです。

詳しくは以下を参照。

操作(operator)

ざっくりと代表的なものだけ載せておきます。 | コマンド | 説明 | |:-------:|:----------| | d | 削除 (delete) | | y | コピー (yank) | | p | 貼付け (paste) | | c | 削除+挿入(change) |

範囲

コマンド 説明 詳細
a 単一 (冠詞の'a') 区切り文字を含める。
i 内側 (inner) 区切り文字を含めない。

おそらく一番分かりにくいのがココです。
区切り文字とは、"単位"を区切る文字のことです。
"w"なら空白文字、"t"ならHTMLタグなど。

例1:「this is a pan.」に対する適用範囲(カーソルが先頭"t"に当たった状態)

  • "aw" は「this 」 (空白文字(半角スペース)を含める)
  • "iw" は「this」 (空白文字(半角スペース)を含めない)

例2:「<p>this is a pan.</p>」に対する適用範囲(カーソルが先頭"<"に当たった状態)

  • "at" は「<p>this is a pan.</p>」 (HTMLタグを含める)
  • "it" は「this is a pan.」 (HTMLタグを含めない)

単位

文字

コマンド 説明 詳細
w 単語 (word) アルファベット、数字、アンダースコアの連続した文字
※詳細は「:help word」参照
W 単語 (WORD) word + 非空白文字(括弧や引用符など)で連続した文字
※詳細は「:help WORD」参照
s 文 (sentence) '.', '!', '?' で終わり、その後に行末かスペースもしくはタブが続く文字列
※詳細は「:help sentence」参照
p 段落 (paragraph) 空行で囲われた文節の塊り
※詳細は「:help paragraph」参照
t HTML,XMLタグ (tag)

ブロック

コマンド 説明
b または ( または ) ( )ブロック(block)
B または { または } { }ブロック(Block)
[ または ] [ ]ブロック
< または > < >ブロック

引用符

コマンド 説明
' シングルクォーテーション
" ダブルクォーテーション
` バッククォート

具体例

あとは上記内容を組み合わせればOKです。
タイトルにも挙げた"diw"は

"diw" = (delete inner word) =単語ごとに削除

と分かります。

「this is a pan.」(カーソルが先頭"t"に当たった状態)で"diw"を実行すると、

"iw"(inner word) で指定した適用範囲「this」を"d"(削除)するので

「 is a pen.」

という結果になります。

参考サイト・書籍