はじめてのVim

Vimを使い始めて戸惑うことは,なんといっても,マウス操作で今まで当たり前のように行っていた操作ができなることでしょう.この投稿ではそちらを意識して,余り凝った機能はせずに,まずはマウスで行っていた操作がVimではどうするのかに焦点を当てたいと思います.自分のメモ用とも言います.

ちなみに,筆者が今更この投稿を書こうと思ったきっかけはWindowsにbashを入れることが出来るようになったためです.次の投稿を全面的に参考させていただき,Windowsでbashを使えるように設定しました.

Bash on Ubuntu on Windowsをインストールしてみよう! – Aruneko – Qiita

以前,WindowsでVimを使おうとしたことがあるのですが,いろいろカスタマイズしたいとなると面倒だということになり,WindowsでVimを使うのは諦めていました.しかしこの”Bash on Ubuntu on Windows”を使えば,LinuxでVimを使うときと同じようにWindowsでもVimを使ったり設定できるということがわかったので,今一度WindowsでのVim利用を試みました.

そして,この機会に簡単な機能をメモしておこうと思った次第です.







モードについて

Vimでは様々な機能をキーボード上の操作だけで実現させてくれますが,限られたキーボードで様々な機能を実現するには複雑にならざるを得ません.その解決策として,似たような用途に応じて「モード」というものを用意しています.Vimを使っている間,ユーザーは必ず何かしらのモードになっているのですが,Vimを使い始める方はまずそれを把握することが大事です.

ノーマルモード

一番基本的な状態です.様々な機能を使う際には,このモードになった状態で何かキーを打ちます.Wordやメモ帳の一番基本的な状態との違いは「ノーマルモードでは文字入力ができない」ということです.

なんでこんなモードがあるかというと,キーボードだけでいろんな機能を実現させるためです.例として「一行丸ごと消す」ということをしたいとき,Vimではノーマルモードで”dd”とキーボードを二回打つだけでよいのですが,今書いている文章に文字として”dd”と入力したいときはすぐ後で説明する挿入モードで”dd”と入力します.

自分がどんなモードにいようが,どんな操作中であろうが,Escを数回押すことで必ずこのモードに戻ってこれます.困ったときはEsc押しまくってこのノーマルモードまで戻りましょう.

挿入モード

文章に文字を追加するときのモードです.Wordやメモ帳の基本的な状態はこの挿入モードであるといってよいでしょう.文字を入力できる状態そのものです.

ノーマルモードから”i”を押すと挿入モードに切り替わります(挿入が英語でinsertだから).この状態ではマウスを使わないこと以外通常のエディターと全く同じです.

入力が終わったら余計な入力をしないように,Escでノーマルモードに戻っておきましょう.

ビジュアルモード

Wordやメモ帳など多くのエディターでは,マウスでドラッグして区間を選択できるのが常識です.しかしVimを使う以上はキーボードだけでいろいろやりたいので,特に設定をしない限りマウスが使えないようになっています.区間選択ができないと,「コピペ」や「まとめて削除」などが出来なくなってしまうのでこれは困ったです.

しかし,Vimでもちゃんとこのような区間選択をできるようになっています.それがビジュアルモード,平たく言えば,区間選択モードです.ノーマルモードからvを押すとビジュアルモードになります(visualの頭文字).押したところから区間選択が始まり,矢印キーなどで藩士選択したい部分までカーソルを動かします.矢印で動かし終わったら,その区間に対してやりたいことに応じてキーを押します.

例として,よく使う「コピーして貼り付け」いわゆるコピペをVimで行うにはどうするか簡単に説明します.まずノーマルモードで範囲選択したいの最初(もしくは最後)の部分までカーソルを移動させます.移動させたらvを押してビジュアルモードに入ります.そしてビジュアルモードの状態で選択したい範囲の最後(もしくは最初)までカーソルを移動させます.これでビジュアルモードの状態で範囲選択がされているかと思います.次にこれをコピーします.ビジュアルモードで範囲選択された状態でyを押してあげます.Vimでは選択部分をコピーすることを「コピー」とは言わずに「ヤンク」といいます.ヤンクは動詞”yank”のことで「グッと引っ張る」みたいな意味です.選択範囲を丸ごと引っ張り出してどこかに置いておくイメージですね.yを押した時点でビジュアルモードが解除されてノーマルモードに戻りますが,この時点で貼り付けの用意はすでにできている状態です.最後に,貼り付けたい位置に移動してpを押すと.カーソルの位置の後に先ほどyを押してコピーしたものが貼り付けられます.

yを押してビジュアルモードが解除された後に入力モードで書き込みをした後でも,pを押せばyでコピーした文章がいつでも貼り付けられます.

途中で作業をやめたいときは,Escを数回連打しましょう.

矢印を使わない

Vimを使っている人は,基本的にキーボードを入力している手の形を変えたくありません.肘の位置を変えたくないとも言ってよいでしょう.そのような人にとって右手を矢印キーの場所に持っていくのはとてつもない労力です.

そんなVimmerのために,Vimでは矢印キーの代わりがあります.それが”hjkl”キーです.ノーマルモードでhを押すとカーソルが左に(左矢印と同じ),jを押すとカーソルが下に(下矢印と同じ),kを押すとカーソルが上に(上矢印と同じ),lを押すとカーソルが右に(右矢印と同じ)動きます.

矢印キーの代わりにこの”hjkl”を用いてカーソル移動をするのは大変でしょう.最初からこれを使おうとするよりは,最初は普通に矢印キーを使って,ある程度Vimに慣れてきて手の位置を変えたくないとなったら”hjkl”になれるようにした方がよいでしょう.

反復操作

Vimmerは効率化を追求します.キーボードをカチカチするのがいくら好きとはいえ,同じキーを何度も押すのは彼らにとっては指の筋肉を大変疲労させてしまいます.

Vimには反復操作を簡単に実現してくれるようになっています.例えば,8文字分カーソルを右に動かしたいとします.Wordやメモ帳を使っていた人は「8回右矢印押せばいいじゃん」もしくは「8文字分右の位置をクリックすればいいじゃん」となりますが,Vimmerは「ノーマルモードにして,8を押して,lを押そう」もしくは「ノーマルモードにして,8を押して,右矢印を押そう」となります.Vimを使えば2回(Escキーを押すとしても3回)キーボードを打つだけで文字分の移動ができてしまうわけです.

例としてカーソル移動を上げましたが,ほかの操作も「数字+操作」の組み合わせで反復することができます.例えば,カーソルがいる行を丸ごと消すときには,ノーマルモードで”dd”と打ってあげればよいのですが,今いる行から下4行を丸ごと消したいときは「ノーマルモードで,4を押して,dd」とすればよいです.

例として8回,4回の反復操作を上げましたが,例えば20回反復操作をしたい場合は「2を押して,0を押して,やりたい操作」のように入力すればよいです.2桁3桁の反復操作も簡単ですね.このように,Vimを使えば反復作業を手軽に処理できるので,コードを書く際の効率化につながります.

今まで通り使うための,基本的機能

Vimに移行するときに困ることは,「今まで当たり前のように使っていた機能のいくつかをVimでどう使えばわからない」ということかと思います(自分がそうだった).どんなことでも,当たり前だと思っていたのが当たり前でなくなる時は,良くも悪くも精神的にストレスです.

このストレスで「やっぱVim使うのヤーメタ」とならないように,「スムーズにVimに移行できるようにするための,基本的コマンド」を思いつく限り書いていこうと思います.

コピー,ペースト

先ほど説明しましたが,もう一度箇条書きで書き直します.

  1. ノーマルモードで,範囲選択したいの最初(もしくは最後)の部分までカーソルを移動させる.
  2. 移動させたらvを押してビジュアルモードに入る.
  3. ビジュアルモードの状態で,選択したい範囲の最後(もしくは最初)までカーソルを移動させる.
  4. ビジュアルモードで範囲選択された状態で,yを押す.yを押したときノーマルモードに戻っている.
  5. 貼り付けたい位置に移動してpを押すと.カーソルの位置の後に先ほどyを押してコピーしたものが貼り付けられる.

Vimでは選択部分をコピーすることを「コピー」とは言わずに「ヤンク」といいます.ヤンクは動詞”yank”のことで「グッと引っ張る」みたいな意味です.選択範囲を丸ごと引っ張り出してどこかに置いておくイメージですね.yを押した時点でビジュアルモードが解除されてノーマルモードに戻りますが,この時点で貼り付けの用意はすでにできている状態です.

yを押してノーマルモードに戻った際にすぐ貼り付けをしないことも可能です.挿入モードでいくつか文字を入力した後にpを押しても,ヤンクした範囲が貼り付けされます.

切り取り,貼り付け

コピーペーストの操作のyankをdeleteに変えるだけでよいです.つまり

  1. ノーマルモードで,範囲選択したいの最初(もしくは最後)の部分までカーソルを移動させる.
  2. 移動させたらvを押してビジュアルモードに入る.
  3. ビジュアルモードの状態で,選択したい範囲の最後(もしくは最初)までカーソルを移動させる.
  4. ビジュアルモードで範囲選択された状態で,dを押す.dを押したときノーマルモードに戻っている.
  5. 貼り付けたい位置に移動してpを押すと.カーソルの位置の後に先ほどyを押してコピーしたものが貼り付けられる.

となります.

戻る,戻るのキャンセル(進む)

  • 戻る:ノーマルモードで,uを押す.
  • 戻るのキャンセル(進む):ノーマルモードで,”Ctrl+r”を押す.

uは”undo”,rは”redo”の略です.「数字+u」とすれば好きなだけ戻ることができます.

便利でとっつきやすい,Vimの機能

コピペと戻るができるようになれば,今までメモ帳などで行っていたことはほぼ同様にできるでしょう.ここまででVimのイントロは終わりにしますが,せっかくVimを使うので,筆者が使ういくつかの便利な機能を書いていきたいと思います.

今いる行の削除

丸ごと消したい行までカーソルを動かして”dd”と押す.

行ごとコピー

  1. コピーしたい行まで行って”yy”と押す.
  2. 移動したところでpを押すと,カーソルの位置の下の行に新しい行が挿入されコピーされる.

範囲選択の色々

マウスで行うような基本的な範囲選択方法はビジュアルモードで実現できますが,Vimではこれ以外にもいろんな形の範囲選択ができます.

行単位の範囲選択

ノーマルモードから”Shift+v”,つまり大文字のVを押すと,行単位の範囲選択モードになります.このモードを「ビジュアル行モード」といいます.この状態でカーソルを動かすと上下に動かすとその行が丸ごと選択されて,カーソルを左右に動かしても選択範囲は一切変わりません.

長方形の形で区間選択

ノーマルモードから”Ctrl+v”で,長方形の形をした区間選択が可能になります.このモードを「ビジュアル矩形モード」といいます.このような区間選択をしてコピーとすると「長方形の形で」コピーされます.貼り付けると,これもまた長方形の形で貼り付けされます.

この区間選択の応用として,次で説明する,複数行をコメントアウトする方法があります.

複数行をコメントアウト

プログラムによってコメントアウトの方法は違いますが,ここではpythonのコメントアウトの方法として,数行にわたって行頭に#を入れる方法を紹介します.

  1. 削除したい行の先頭で”Ctrl + v”(ビジュアル矩形モード)
  2. カーソルを上下に動かして,縦長の選択領域を作る.
  3. 入れたい行頭の範囲をすべて選択したら,”Shift+i”つまり大文字のIを押す.これで挿入モードに入る.
  4. “#”を押す.このときはまだ一行分しか”#”が表示されない.
  5. “Esc”を押す.このとき選択した範囲全部の行頭に一気に”#”がつく.

逆にこの操作で付けたコメントアウトの記号”#”を取り除くには,取り除く行のノーマルモードから”Ctrl + v”(ビジュアル矩形モード)にして,”d”を押して切り取りをすればよいです.

余談:コピーペーストについて

次の投稿でVimのコピペに関してむずむずするところを説明してくれていました.一度目を通してみると,ためになるのではないかと思います.

Vimでは,クリップボードでなくレジスタというんですね.

最後に

後は慣れるのみ

ここまでできれば,あとは無理やりでもVimを使えば,毎日使って3日もしないうちになれるかと思います.

だんだん使い方が手についてきたなら,欲を出して「こんな機能ないかなー」と調べてみましょう.きっと,同じ悩みや欲を持った方が解決策をネットにアップしてくれているはずです(プログラム系は難しい方向に行くほど優しい人がいっぱいいる気がするのですが,気のせいでしょうか).

チートシート:新しく学んだ操作については,必ずメモを

新しく学んだ操作は,多用しない限り忘れてしまう可能性が大です.Twitterでもブログでもメモ帳でもよいので,必ずメモを着けるようにしましょう.

「Vim チートシート」でググると,様々な操作一覧をまとめた紙がヒットします.最初は他人のチートシートを利用するのが効率が良いでしょう.ネットに公開されているチートシートのほとんどは著作権フリーなはずです[要出典].そして,いずれかは自分のメモをまとめて,自分だけのチートシートを作りましょう.チートシートを作り始めたころには,もう立派なVimmerでしょう.

カラースキーム,vimrc(設定ファイル)をいじってみよう

さらにVimを使いこなしていくと,自分用にいろいろカスタマイズしたくなってくるかと思います.その時は「vimrc」とググってみると幸せになれるかもしれません.一般に「.vimrc」というファイルをVimが参照できる場所に置いておくと,その設定をVimが自動的に読み込んできてくれます.一昔前の言葉を使うのであれば,自分用にVimをデコることができます.

また,Vimはプログラムの特別な指示(ifとかnotとか)の色をデフォルトで変えてくれたりしますが,このような色の設定を「カラースキーム」といいます.これも調べてみると,カスタマイズ欲により一層拍車がかかるでしょう.

このブログについて

IAtLeX です.ブログをはじめてさほど時間がたっていないので,未熟な内容が多々あるかと思いますが,それも時間が解決してくれるはず...Python系の記事を着々と充実させていきたいです.投稿主についてはこちらを参照してください.

このブログについて - http://iatlex.com/about_blog/

コメントを残す

*