Memoize

BasicWerk   EC Support   Technique   Facebook  

20141222201820_Vim_macro

Vim_macro

 

 

Vim で編集中に繰り返し作業が発生したらマクロをその場で登録して実行すると作業効率が上がる。

 

例えばこんな内容の行があったとして、

 
parent=`pwd`
source=$parent/source
data=$parent/data
result=$parent/result
 

source=$parent/source 以下の行を var="value" のように右辺がダブルクォーテーションで囲まれた状態にしたい。

 

  • マクロの登録は <Esc>qa (a はマクロに付ける簡単な名前) で始まり、<Esc>q で終了する。
  • マクロの実行は <Esc>@a (a は登録されたマクロの名前) である。

 

 

ポインタが source=... の行のどこかに居るとする。

 

キー入力はこんな感じ。

 

  1. <Esc>qa でマクロの登録を始める。画面下に recording と表示される
  2. 0 で行頭に移動する
  3. f= で「=」のところにカーソルを合わせる
  4. a を押して「=」の後ろで挿入モードになり
  5. " を入力する
  6. <Esc> で通常モードへ
  7. Shift+a で行末で挿入モードになる
  8. " を入力する
  9. <Esc> で通常モードへ
  10. j で一つ下の行へ
  11. q でマクロの登録を終了する

 

この時点で source=... の行は編集が終了し、カーソルは data=... の行に居るはずだ。

 
parent=`pwd`
source="$parent/source"	<- この行は編集完了
data=$parent/data		<- この行にカーソルがいる状態
result=$parent/result
 

 

ここで @a を2回入力すると data=... の行と result=... の行が編集される。

 
parent=`pwd`
source="$parent/source"
data="$parent/data"
result="$parent/result"
 

 

ポイントはマクロの登録の最後に j (ひとつ下の行へ) を含めること。

でないと、@a 一発で編集と行移動が同時にできない。

なお、仮に result=... の行末が newline ではなく EOF だとしても、Vim のマクロはシーケンスが成功する限り実行する。

つまり最後の j は失敗するがその手前までのマクロシーケンスは実行される。

 


© Shin Nakamura/BasicWerk 2008 - 2014