LoginSignup
65
75

More than 5 years have passed since last update.

Vim モーション譜

Last updated at Posted at 2014-07-26

Sublime いいよね

昨今の Vim いいよね的な風潮には全く納得がいかない。こんな前近代的な変態エディタがなぜに今更もてはやされているのか。

仕事がら vi/vim 歴十年以上経っているが、いまだ使いこなせず、初心者の域を脱していない。苦手意識を差し引いても、Vim は経験による学習効率が低いツールだと感じている。

技術者のたしなみ程度から、一通りの技を使いこなせるレベルまでの間に、いくつもの越えなければならない壁があるのは確かだ。

その一つはモーションをマスターすることであろう。

Vim モーション譜

以下の図は、ある状況であるモーションコマンドがどのように作用するのか、その動きを洗い出して《見える化》したものである。

黒く反転したカーソル位置から移動できる位置をモーションコマンドと矢印で示した。同じ場所に移動するのにもいくつものやり方があるが、もっとも単純で基本的と思われるものを太字表示しておく。

cd などとノーマルモードで組み合わせて使ったときに対象となる選択範囲をグレー背景で示した。 ビジュアルモードでは、境界文字の取り方が微妙に異なるので注意してほしい。

基本的に1手(1モーション)による動きのみを集めた。1手でできることは限られているが、オペレーションコマンドと組み合わせたあとでドット(.)コマンドによるリピートに使えるのでこだわっておきたい。しかし一部、2手以上かかるものも参考までに追加し、それは青いフォントで区別した。

行の折り返しによる挙動の違いや、sentence, paragraph を扱うモーションもあるのだが、本稿では英文ではなくコーディングを想定しているのでそれらには触れない。

個々のモーションコマンドの解説は省略するが、マニュアルや、すでに良いまとめが(Qiita内を含め)あるので分からないことはそちらに立ち戻って確認して欲しい。

本稿は Cheat sheet や逆引き的に使えないこともないが、暇なときに眺めて「あー、そこに行くかー」とかつっこみながら楽しんでいただければ幸いである。

一応動作確認しているが、間違いや抜けがあったら指摘してほしい。

【基本】

左右移動

vim_basic_hr.png

g_ はあまりみない。行末の空白文字は忌避されるので、コーディング上は $ だけで十分だろう。

モーションではないが挿入コマンドの挿入位置も参考まで。

vim_insert.png

word と WORD の違い

vim_word.png

アンダースコア区切り

vim_us.png

サブ単語の先頭文字(アンダースコアの次の文字)に1手で移動したいところだが、t_f_ では微妙に届かない歯がゆさに悶える。もちろん目標の文字が許せば、f{char} で行けるのだが使いまわしがきかない。

サブ単語だけの範囲選択も1手でとれる方法がない。

カンマ区切り

vim_csv.png

word 系モーションではカンマ( , )でいちいち止まるので、count の数え方に気を使う。

一方 WORD 系なら一見楽そうだが、もし要素間のスペースが詰められていたら行けるところはほとんどない。

上下移動

vim_basic_v.png

ノーマルモードでは行単位、ビジュアルモード( v )では文字単位の選択範囲となる。

ブロック移動

vim_block.png

{} は空行を区切りとして複数行(ブロック)をスキップする。空行の連続は1区切りとみなされる。

() は空行とブロックの先頭を移動する。 ( の1手でブロックの先頭行に移動できるが、逆に最下行へ行く手はない。

【応用】

マークアップ

vim_mkup.png

代入文

vim_asgn.png

関数呼び出し

vim_func.png

JSON

vim_json.png

メソッド

vim_def.png

参考

65
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
75