この記事は Vim Advent Calendar 2014 の 18日目の記事です。
17日はsimejiさんの「【Vim入門】ノーマルVimで使えると便利かもなコマンド10つ」でした。結構書こうと思ってたことを書かれてしまった感ある・・・汗
さてさて、今年のVACも猛者Vimmerにまぎれて、プラギンもロクに入れない野良Vimmerであるところの私が1日もらってしまいました。
上級者にとっては当たり前すぎて物足りないかもしれませんが、丁度良いレベルに感じてくださる方もいるはずと信じて、
今回は「vim練習帳」と題して、私がOS管理上、vimをどのように使っているかを紹介しながら、vim力の底上げをはかっていただければと思います。
*対象読者
全vimmerです。
Linuxの内容が多く出てきますが、別のOSでも応用可能と思っています。
hjklとかは説明しないので、超初心者には辛いかも?
*はじめに
「ぷらぎん作りまくるぜぇええええ」
「ぷらぎん入れまくるぜええええ」
という方には少々物足りないかもしれません。プラグインの話は出てきません。
その代わり、OSインストール直後の素VIMで使える機能ばかりであり、いうなれば、vimの基礎力がつくものと考えています。
いきなり、客先や先輩のvimを使わないといけないかもしれません。
そんな時、普段からプラグイン中毒になっていると(自分のvimなら・・・こんな変更一発なのに・・・っ!)と悔しい思いをするかもしれません。
*能書きはいいので、まずは基本。
題材1:httpd.conf
まずはじめにご紹介するのはhttpd.confです。
手元のcygwinから抜いてきましたので、なにそれって方は、こちらからダウンロードして、vimで開いてください。
さて、httpd.confの最初の方はコメントだらけです。
有効な設定を確認するために、コメントの行はひとまずとばしてしまいたいですね。
jjjjjjjjjjjjjjjjj
でも、いいのですが、
[Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f][Ctrl+f]
でもいいのですが、
サクッと、「先頭が#でない」ところだけどんどん読んでしまいましょう。
ということで、私の提案はこちら。
/^[^#]nnnn
さて、これの意味ですが、先頭の/は検索を開始。
次の^は「行頭の文字が、「後に続く1文字」の時「合致」」という意味です。
では、あとに続いている1文字は何かというと・・・
[^#]・・・ですね。これは、#以外のすべての文字1文字、を指します。
これにより、コメントアウトされてない行がマッチするのですね。
^の意味が2種類あるのに注意してください。
/の直後にあると、行頭にマッチ、
[の直後にあると、その次の文字を除外した文字集合、です。
続いてはある設定値を変えてみましょう。
例として、
Listen 80
を
#Listen 80
Listen 1234
にしましょう。
カーソルは今、Lの上にあります。
私の提案は、
kylj[Shift]P
yyp
x
f8R
1234[esc]
ですかね。
1行目。一行上に移動し、1文字コピー(#をコピー)し、元の行に戻り先頭に貼り付け。
2行目。1行コピーして貼り付け。yyは[Shift]Yでもいいですが、個人的にはyyのほうが早いと思ってます。(Vimgolfでは1文字減らせるテクニック)
3行目。先頭の#を削除。
4行目。8までジャンプし、置換入力。
5行目。入力してescで終了。
通は[esc]の代わりに[Ctrl]+[です。
ポイントは、
・なるべく入力モードに入らず打つ。(今回で言うと、#)
さらにhttpd.confをnで読み進めていくと、
行頭はTabで、その後に#、という行が出てきます。
この行もコメント行なので検索にはマッチしてほしくありません。
検索文字列を少し直しましょう。
/^\s*[^# ]
変更点は2箇所。
・^のあとに\s*を入れました。
\sはTabやスペースにマッチする文字、*は何文字でも、という意味です。
・#のあとに半角スペースを入れました。
#の他に、半角スペースも除外しないと、「半角スペース2文字」がマッチしてしまいます。
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
を
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
に変えてみましょう。
カーソルをvarに持っていくために、いろいろな方法があると思いますが、
もちろん、自分の素直に思いつく行き方があるかたは無理にそれを変えなくていいと思います。
自分は、
fs;
cw
var[esc]
ですね。
fのあと1文字でその1文字にマッチする行内の位置に移動します。
;はfの移動を繰り返します。
明らかに2個めだ、とすぐに分かるなら2fsで一回で飛べますが、そういうケースは稀で、
おすすめは、;で目的地につくまで繰り返す。行き過ぎたら、,で戻る(逆方向に検索)を繰り返して、目的地につくのがいいと思っています。
wをつかう、f"のあとずらす、など、色々な行き方を使ってみるのがいいと思います。
カーソル移動がうまくなると、そこまでの削除、そこまでのコピーも同じようにできるようになるので。
あとがき。
推敲時間が足りず乱文になってしまいましたが、
実際の設定ファイルを使って、vim操作を解説してみました。
時間があったら別の設定ファイルの例なども紹介したかったのですが、
思いの外長くなってしまったので、今回はこのくらいにします。