昨日、マッドマックスを観てきました。
冒頭の20分くらいでの世界観や目的の描き方であったり、その後のメリハリがありながらも わかりやすく しっかりとテンションを上げていくアクションに 「すばらしいな」と、コメンタリーやメイキングを楽しみに待っています。
こんにちは、Vim歴 20年ほどのタマキです。
(途中にEmacsに移行していた時期が2〜3年あったり、Sublime TextやAtomなども事あるごとに試してたりします。)
マッドマックスの話ではなくて、Vimというエディタの紹介をしようと思います(今更感はありますが…)。
「Vim、触ってみたけど よくわからん」、「一文字も入力できんかった」、「興味はあるけど…」な人が対象です。
※「カーソル移動、挿入モードとノーマルモード移行、:q と :q! を覚えてれば、必要なときには十分!」な人は対象にしてませんw
始めて触れたのは学生時代。
商用UNIXで仕事をされてきた数学を得意とする先生の「viを使ったことないの?」という言葉からでした。
(DECのノートPCにLinuxを入れて仕事をしていた先生で、「まだおもちゃだけど、化けるかもね」と言っていたことが印象的でした。)
それまではVZ Editorを使ってました。
軽いというのもありましたが、「カーソルキーやファンクションキーを使わず、ホームポジションから移動せずに使える」というところが大きかったです。
早速、Viクローンを入れて試しますが、最初はなかなか思い通りにはいかず。
ですが、時間が経つにつれ、大分馴染んできます。
馴染んでくる感覚は「おもしろい」という要素になりますし、また「ホームポジションでほぼ完結する」というのは日常的に使えそうだなと。
そんな中、Viに対しての感想は「編集に強い」でした。
ということで、今回はテキスト編集にフォーカスして紹介します。
* * *
テキスト編集の前にVimの特徴であるモード切り替えについて紹介します。
というのもココを理解しないと編集できないからですね…。
Vimではモードを切り替えて、テキスト編集を行います。
モードも下記のようにいろいろあるのですが、今回はノーマルモードと挿入モードだけを使います。
・ノーマルモード
ベースとなるモード。立ち上げ時はこのモードです。
文字の入力はできない。
カーソルの移動やテキストのコピー/ペースト/削除などを行う。
・挿入モード
文字を入力するモード。
・ヴィジュアルモード
テキストを選択するモード。
・コマンドラインモード
検索・置換、ファイルのオープン、プラグインの実行など。
などなど。
実例を挙げた方がわかりやすいと思うので、 実際にはこんな感じで編集していきます。
1. ノーマルモードで、カーソルの移動。
h, j, k, l : 左下上右
この操作やモード切り替えで「なんでやねん」ってなる方が多いのですが、ホントに慣れですね。
このキーで移動できるツールも結構多いです(gmailなんかも。同様にEmacs系も多いですね)。
2. 挿入モードに移行し、文字を入力。
i : カーソル位置の前から挿入開始。
a : カーソル位置の後ろから挿入開始。
3. ノーマルモードに移行(挿入モードを抜け)。 1. へ。
ESC or Ctrl+[
(私は Ctrl+[ を使っています)
これだけだと、「なんだコレ。モード変更って必要なん?」と面倒くさい感が強いですよね…。
ですが、 このモード変更が他のエディタを大きく異なるところですし、これが編集に強い理由になっています。
* * *
そして、本題のテキスト編集。
コマンドを組み合わせて編集していきます。
※ ここでのコマンドはノーマルモードで入力するキーの意。
h は「左へのカーソル移動」コマンド。
a は 「挿入モードへ移行し、カーソル位置の後ろから挿入を開始」のコマンド。
では、「テキストの削除」の例を。
削除はdコマンドになり、このあとにカーソル移動コマンドを入力すると削除できます。
このような感じ。
例1) 現在行から120行目まで削除。コマンドは d120G
→ dの削除コマンド後に120行まで移動コマンドを実行。
120Gが”120行目までカーソル移動”の意味になります。
例2) 1単語分削除。コマンドは dw
→ dの削除コマンド後に1単語移動コマンドを実行。
wが”次の単語の先頭に移動”の意味です。
つまり、移動コマンドや挿入モードへの移行が多彩であれば、目的のところまでの削除が素早く終わるということになります。
さて、「カーソル位置の文字を削除するコマンドは?」
そう、dl ですね (x というコマンドもあります)。
d で 削除コマンド。
l が右に一文字分移動コマンド。
では、少しレベルを上げます。
テキスト「hoge foo bar」のgの位置にカーソルがあるとしまして、行内検索移動のf/tコマンドと組み合わせてみると。
※f コマンド : その行の順方向に一文字検索。 fx でカーソルより先のxという文字まで移動します。
※t コマンド : その行の順方向に一文字検索(カーソルは文字の手前)。tx でカーソルより先のxという文字の一文字前まで移動します。
イメージ)
hoge foo bar
例3) oまで削除(oも削除)。コマンドは dfo
hoo bar
例4) fooの(最初の)oまで削除(oは残す) 。コマンドは dto
hooo bar
例5) bまで削除(bは残す)。コマンドは dtb or d2f<spaceキー>
2はそのコマンドを2回続けるの意です。この場合、「2つ先の空白まで移動」となります。
hobar
他にも
例6) カーソル位置から段落の最後まで削除。コマンドは d}
例7) 段落毎削除。コマンドは {d}
{ で段落の始めに移動。その後段落の最後まで削除を実行。
例8) 段落毎削除後、挿入モードへ。コマンドは {c}
例9) 現在行から160行目までをヤンク(コピー)。コマンドは y160G
ちなみにペーストコマンドは p or P。挿入する位置が変わります。
小技として、
例10) カーソル位置の大文字/小文字変換。コマンドは ~
例11) カーソル位置を一文字分修正(文字aに変更)。コマンドは ra
なんかもあります。
慣れれば、アタマで思ったことがすぐに実行できるようになってきます。
(カーソルキーを何度も叩くとか、マウスでの範囲選択で最後を慎重に選択するとかがなくなります)
このスピード感に慣れてくると、他のエディタを試しても(そのエディタの方がいい部分を十分に理解しつつも)戻ってきちゃうんですよね…。
そして、そのエディタのいいところをVimでできないだろうか、となるという…。
今回は、Vimを使っている人はどんな感覚なのか、という紹介でした(触りだけになりましたが)。
アタマで具体的にイメージ/理解できると実際に触れたときに馴染むのも早いと思うので、こういった感覚を意識して触れてもらえると「もうVimは怖くないっ!」となると思います
最後に、カーソル移動や挿入モードへの移行について、少しだけリストアップしておきます。
* * * 付録 * * *
・ ノーマルモードでのカーソル移動
左下上右 : h, j, k, l
この操作だったり、モード切り替えに「なんでやねん」ってなるヒト多いのですが、ほんと慣れです。
また様々なツールでこのキーで移動できたりします(gmailなんかも)。
単語移動 : w/b, W/B, e/ge, E/gE
大文字、小文字で単語として捉える範囲が異なります。
段落移動(上方向) : {
段落移動(下方向) : }
対となっている括弧へ移動( [], (), {} など) : %
最上行にジャンプ : gg
最下行にジャンプ : G
行番号ジャンブ : <行番号>G
例) 120行目にジャンプ : 120G
行の先頭へ移動 : 0
行の先頭(最初の文字)へ移動 : ^
行の末尾へ移動 : $
下の行の先頭へ : +
上の行の先頭へ : –
行検索
その行の順方向に一文字検索 : f
カーソルより先にあるxまで移動 → fx
その行の逆方向に一文字検索 : F
その行の順方向に一文字検索 : t (カーソルは文字の手前)
その行の逆方向に一文字検索 : T (カーソルは文字の手前)
・挿入モードへの移行
カーソル位置の前から挿入開始 : i
カーソル位置の後ろから挿入開始 : a
行の先頭から挿入開始 : I
行末から挿入開始 : A
下の行に空行を挿入し、そこから挿入開始 : o
上の行に空行を挿入し、そこから挿入開始 : O
続く移動コマンドを実行後、挿入開始 : c
・ ノーマルモードに移行
ESC or Ctrl+[
(ホームポジションを崩したくないこともあり、私は Ctrl+[ を使っています)