Swap values
Well, swap the values...
問題
name=www-data, groups=developer
この行を以下のように書きかえる
name=developer, groups=www-data
www-dataとwww-dataを入れ替えればよい。
愚直な方法
大体こんな感じの答えを第一に考えてしまうfwdt,fdvwpF,PZZ
- fwdt,
www-dataの先頭へ移動し、www-dataを切り取る。 - fd
developerの先頭へ移動する。 - vwp
ビジュアルモードでdeveloperを選択し、先ほど切り取ったwww-dataに置き換える
この際、developerが無名レジスタに入る。 - F,P
,の位置まで戻り、developerを前方に挿入する。 - ZZ
保存して終了する。
この回答のスコアは15点である。
頭からしっぽへ、しっぽから頭へカーソルが移動しており、思考の流れと一致しているため、それほど悪くないと思われる。
しかし、もっと良い方法があるのだ。
解説
現時点での最高のキーストロークを以下に示す。
E8X)vbp<C-O>PZZ
E8X)vbp<C-O>PZZ
- E8X
連続した文字列の後端まで移動し、前方に8文字削除する。
これは先ほどのfwdt,と等価であり、キーストロークを2回減らせている。 - )
行末まで移動する。
ここがポイントで、あえて$ではなく)を用いることにより、現在のカーソル位置をジャンプリストに残すことができる。
また、先ほどは移動にfdを用いていたが、これでキーストロークを1回減らせている。 - vbp
ビジュアルモードでdeveloperを選択し、先ほど切り取ったwww-dataに置き換える
この際、developerが無名レジスタに入る。 - <C-O>P
ジャンプリストに登録された,の位置まで戻り、developerを前方に挿入する。
これは先ほどのF,Pと等価であり、キーストロークを1回減らせている。 - ZZ
保存して終了する。
この回答のスコアは11点である。
だいぶ減らせていることが分かる。
キーストローク削減のヒント
- 移動系コマンドの代わりにジャンプリストを使う
Ctrl-Oはジャンプリストの古い地点にジャンプする
Crtl-Iはジャンプリストの新しい地点にジャンプする。
大事なのは、ジャンプリストに登録されるコマンドは決まっているという点だ。
以下のコマンドがjump-motionsであり、これらはジャンプリストに登録される。
一部、object-motionsが含まれている。
', `, G, /, ?, n, N, %, (, ), [[, ]], {, }, :s, :tag, L, M, H
以下のコマンドはvarious-motionsであり、これらもジャンプリストに登録される
(普段使えていないコマンドもあり、全部確認できてはいないが)
%, [(, [{, ]), ]}, ]m, ]M, [m, [M, [#, ]#, [*, [/, ]*, ]\
以下のコマンドはword-motionsであり、これらはジャンプリストに登録されない
w, W, e, E, b, B, ge, gE
編集系コマンドのdwとかd$とかやってもCTRL-Oで戻れないけど、d)とするとCTRL-Oで戻れるのは、こういう仕組みがあったのかと納得した。 - dwやdt○の代わりにxコマンドを使う
実際の編集では、いちいち文字数を数えたりしない。
しかし、Vimgolfでは頭を柔らかくして、あえて実用的でないこともやる。
0 件のコメント:
コメントを投稿
コメント表示は承認制に設定しています