TT Lab
はじめる
学ぶ 学習パス コース

vimとtmux

vimはコマンドの一覧ではなく文法だ

TT Labで続きを見る

一言でいうと

vimのキーは、暗記すべき一覧ではなく、組み合わせて使う文法です。{횟수}{동작}{범위}という公式(韓国語の語は、順に「回数」「動作」「範囲」を意味します)を1つ知っていれば、習っていない組み合わせも作って使えます。

なぜ必要なのか

vimを「終了の仕方がわからないエディター」として記憶している人は多いです。しかし、SSHで入ったサーバー、dockerコンテナの中、組み込み機器など、GUIのないほぼすべての場所に、vi系がすでに入っています。設定ファイルの1行を直すために、ファイルをローカルにダウンロードしてまた戻す作業を繰り返しているなら、それはツールの問題ではなく、文法を知らないからです。

vimが1976年のviから出発して今まで生き残った理由は、1つです。モードを分離したおかげで、アルファベットのキー1つ1つがコマンドになれました。ほかのエディターがCtrlの組み合わせにコマンドを詰め込んでいる間に、vimはd、y、c、w、$のような1文字の語彙を手に入れ、その語彙が組み合わされることで、表現力が掛け算で増えました。

どう動くのか

核心の公式は、これ1つです。

{횟수}{operator}{motion 또는 text object}

このコードブロックの韓国語は、順に「回数」と「または」という意味です。

品詞で読むと、動詞 + (前置詞) + 名詞の構造です。

組み合わせ 読み方 何をするか
3dd 3回・削除・行 3行削除
d3w 削除・3単語 単語を3つ削除
ci" 変更・inner・引用符 引用符の内側だけを差し替え
da( 削除・around・括弧 括弧ごと丸ごと削除
yi{ コピー・inner・波括弧 ブロックの中身をコピー

ここでi(inner)とa(around)が、前置詞の役割を果たします。この2文字を知っていれば、「引用符の中の文字列だけを置換」「関数の引数全体を削除」「タグの中身を選択」のような作業が、2文字で終わります。

重要な性質が1つあります。vimでは、削除は切り取りです。ddで消した行はレジスターに入っているので、pで貼り付けられます。そのため、ddp(下の行と入れ替え)やyyp(行の複製)のような慣用句が生まれます。

モードは、4つだけ知っていれば始められます。Normal(デフォルト、コマンド)、Insert(入力)、Visual(選択)、Command-line(:で始まるexコマンド)。方向を見失ったら、いつでもEscです。初心者にとっては、これがサバイバルの法則その1です。

現場での姿

設定ファイルに値を1つ入れる。/etc/nginx/nginx.confでworker_connectionsの値を変える作業です。/worker_connで検索して移動し、ciwで単語だけを差し替えて、:wq。マウスも、スクロールも必要ありません。

インデントが崩れたYAMLの整理。gg=Gは、ファイル全体を文法に合わせて再整列します。1文字ずつスペースを数えるよりも安全です。

設定ファイルは、vimが実際に読み込んで初めて意味があります。.vimrcにオプションを書いてタイプミスがあると、その行だけが静かに無視されます。set number?のように疑問符を付けて尋ねると、vimが現在適用している値を教えてくれます。ラボの最初のステップがこれを確認させる理由です。

.を忘れないでください。直前の編集をそのまま繰り返します。ciw새단어<Esc>(韓国語の語は「新しい単語」という意味です)を実行したあと、次の位置に移動して.を1回押せば、同じ編集が繰り返されます。マクロを使う前に、まず試してみるべきツールです。

見知らぬサーバーで生き残るための最低限

自分のノートパソコンのvimは設定してありますが、入ったサーバーのvimは何も設定がないか、そもそもviしかないかもしれません。そこで、設定がなくても使えるものを別に知っておけば、どこでも作業できます。

まず、何を開いているのかを確認します。:fは、現在のファイルの名前と状態を教えてくれます。そして読み取り専用で開けるなら、そうして開きます。view 파일やvim -R 파일(プレースホルダーはファイル名です)で開けば、誤って編集して保存する事故が、そもそも起こりません。本番サーバーで、設定を確認だけしたい場合が、実は大半です。

元に戻す操作を信頼できるようにします。uは元に戻し、Ctrl-rはやり直しです。何度も元に戻したあとで方向を見失ったら、:e!で、保存後の変更をすべて捨ててファイルを読み直せます。保存する前なら、いつでも元のファイルに戻れるという安心感が、気楽に編集できるようにしてくれます。

保存できないときに、慌てません。権限がなくて保存が拒否される状況は、よくあります。このとき、編集内容を捨てて開き直す必要はありません。別の名前で保存してから移す方法や、権限を取得してその場で保存する方法があります。最悪なのは、:q!で抜けて、最初からやり直すことです。

そして、元のファイルを残す習慣が、見知らぬサーバーでは特に価値があります。設定ファイルを直す前に、日付を付けてコピーを1つ取っておけば、何かがうまくいかなかったときに、戻すのに数秒で済みます。vim自体にも、バックアップファイルを作る設定がありますが、他人のサーバーでは、その設定が有効になっているとは期待できないので、手でやるほうが確実です。

最後に、複数の人が同じファイルを開くと、vimが教えてくれます。スワップファイルが残っているという警告がそれで、ほかの人が今編集中か、以前編集していたセッションが異常終了したかのどちらかです。この警告を習慣的に読み飛ばすと、他人の作業を上書きしてしまうので、誰が開いているかを先に確認するのが正しい対応です。

次のラボですること

.vimrcを作成して、vimがその設定を実際に適用するかを確認したあと、行の削除・複製・入れ替えのような基本編集を、結果ファイルとして残します。最後の2つのステップでは、編集コマンド自体をファイルとして保存して、採点ツールが元のファイルにもう一度適用してみるようにします。結果だけでなく、手順まで再現可能であって初めて、本当に身に付いたと言えます。