1. HOME
  2. PC
  3. Linux
  4. テキストオブジェクトで vim 幼稚園を卒園した話
2015年06月05日
エックスサーバーに vim をインストールしてみた
2015年08月13日
git で簡単バックアップしてみる
2015年06月04日
エックスサーバーに Git をインストールしてみた
2014年08月07日
大量のファイルを短時間で確実にサーバーへアップロードする方法 ...
2014年08月04日
SSH 接続してエックスサーバーのディスク使用量を確認する ...
2012年12月11日
エックスサーバーにあるデータのバックアップをしてみた。 ...

テキストオブジェクトで vim 幼稚園を卒園した話

vim ってくせがあるよねー、とちょっと前までそう思ってました。ってか実際にクセありまくり。ただ、テキストオブジェクトなるものを知ってから、だから vim にはいろんなモードがあるんだ、と vim のクセが vim の良さに変わりつつあります。そんな今日この頃。

はじめて vim(vi?) を使ったのは今から15年以上前。ただずーっと使っている訳じゃなくて、vim のスキルと言えばj とか k とかでチマチマとカーソル移動することや wqで終了したり、ノーマルモード( ESC )、挿入モード( i )、コマンドモード( : )とかを行き来して最低限のファイル編集が出来るだけでした。

数年に一度くらい vim な気分になる時があって都度チャレンジてみるもののいまいち進歩せず。vim 幼稚園をいつまでたっても卒園できない。。みたいな。

使える vim っぽいコマンドと言えば gg とか G くらいで進歩なし。

そんな私が昨年くらいから vim を使うようになりました。今度は今までと違う。やっと vim 幼稚園を卒業できたっぽい。

きっかけは、今回紹介するテキストオブジェクト。これが vim 幼稚園卒業の大きなきっかけのひとつです。


テキストオブジェクトとは?

テキストオブジェクトとはカッコ「()」とかダブルクォート「”」だとかシングルクォート「’」などで囲まれた「あるひとかたまり」だと思うとわかりやすい(と思う)。

そして、そのかたまり(テキストオブジェクト)単位で様々な操作がサクッとできることがめっちゃ便利で、めっちゃ vim っぽい(と思う)。


テキストオブジェクトを操作してみる

基本的に、ノーマルモードで操作します。

具体的には、

d (削除)または、
c (削除して挿入モードへ)または、
y (ヤンク)または、
v (選択)

に続けて i または a を押して、

s (文)または、
p (段落)または、
w (単語:word)または、
W (単語:WORD)または、
囲み記号( " とか ' など)

を押します。合計3文字。

1文字目は操作内容、
2文字目は内部/外部指定、
3文字目は操作対象です。

一度に全てを覚えるのは大変なのでとりあえず、

操作内容(1文字目)は、dc のみ。
内部/外部指定(2文字目)は、i のみ。
操作対象は、w と囲み文字( " とか ( など)のみ

から覚えていくと良いとおもいます。これだけでも十分便利です。


テキストオブジェクトの具体的な操作例

例えば、

diw で、カーソル位置にある単語が削除されます。
di" で、”” で囲まれている単語が削除されます。
di' で、” で囲まれている単語が削除されます。
di< で、<> で囲まれている単語が削除されます。
di{ で、{} で囲まれている単語が削除されます。
di( で、() で囲まれている単語が削除されます。
di[ で、[] で囲まれている単語が削除されます。

具体的には「 "T|his is a pen." 」( | はカーソル位置)だった場合に、

diw で、「 "| is a pen." 」となります。
di" で、「 "|" 」となります。

また、1文字目の dc に変えれば、それぞれ削除されたあとに、挿入モードになります。

ciw で、カーソルがある単語が削除されて挿入モードへ。
ci" で、"" で囲まれている単語が削除されて挿入モードへ。
ci' で、'' で囲まれている単語が削除されて挿入モードへ。
ci< で、<> で囲まれている単語が削除されて挿入モードへ。
ci{ で、{} で囲まれている単語が削除されて挿入モードへ。
ci( で、() で囲まれている単語が削除されて挿入モードへ。
ci[ で、[] で囲まれている単語が削除されて挿入モードへ。

ちなみに w (単語)を指定する場合、" とかで何にも囲まれてなくても、
diw とすれば、上記の通りカーソル位置の単語が削除できちゃいますが、実はこれ「空白文字で囲まれている」ということみたいです。


囲み文字の特殊系

3文字目の囲み文字( ( など)として t が指定できます。

これはタグ(HTMLタグ)を表します。なので、

d i t で、HTML タグに挟まれている文字列を削除します。
c i t で、HTML タグに挟まれている文字列を削除して挿入モードへ。

具体的には、

「 <a href="http://www|.yahoo.co.jp">Yahoo! Japan</a> 」( | はカーソル位置)の場合、

d i t で、

「 <a href="http://www.yahoo.co.jp">|</a> 」となります。

c i t で、

「 <a href="http://www.yahoo.co.jp">|</a> 」となり挿入モードへ。

通常の囲み文字(" とか ' とか)の場合は、カーソルが " とか ' で挟まれている中にないといけませんが、t の場合は、行のどこにカーソルがあっても構いません。

HTML を編集する場合、c i t でめちゃくちゃ捗りますよ。


2文字目の内部/外部指定とは?

とりあえず、i のみを使ってきましたが、2文字目には a を指定することもできます。

d a " とか
d a < とか

2文字目に a を指定した場合は、操作対象に囲み文字も含まれます。囲み文字(" とか ' など)を含めて、削除したりできます。

i になれてきたら a も使ってみてください。私はあんまり使いませんが。。なにせ、やっと卒園なもんで。


まとめ

以上、つらつらと説明してきましたがテキストオブジェクトを知ったことによって、「なるほど、vim ってこうやって使うんだ。だから vim なんだ」と勝手に理解しました。もちろん テキストオブジェクトは vim の良さの一部でしかありませんが。

様々なテキストエディタがありますが、テキストオブジェクトの操作感は vim を使うモティベーションのひとつです。

一応、vim で編集できるけど。。いまいち vim の良さがわかんない、って人はぜひぜひテキストオブジェクトにチャレンジしてみてください。きっと「なるほど!」って思いますよ(多分)。

でわでわ。








この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.