Help us understand the problem. What is going on with this article?

一週間でVimを身につけるたった2つのルール

こんにちは!Vim初心者のアクマちゃん(@akumachanit)デモ!
このたびめでたく一週間の訓練を経てVimを使えるようになったので、身につけるために定めたルールを紹介するデモ!

はじめに

Vimって知ってるデモか?
そう、なんかあのカッコイイプログラマーたちがみんな使っている魔法の様なエディタ...
一般ピーポーには使うことは出来ない崇高なる存在...
使いこなせるとプログラミングが100倍速くなると言われている...!(妄想)

ワガハイの認識はこんな感じだったデモ。
正確に言うと1週間前までのワガハイはVimといえばLinux上の設定ファイルを書き換えるくらいにしか使っておらず、知っているコマンドはi,esc,Gくらいだったデモ。
もちろん移動は矢印キー!だって覚えるの大変そうだし...別に覚えなくても生きていけてるし...

そんなワガハイだったんデモが、ある日突然こう思ったデモ。
「あれ...脳がプログラミングしたい速度にタイピングがついていかないデモ...」

そうだ、Vimに乗り換えよう!!!

この記事を読んでもらいたい人

  • Vimをはじめてみたけど何からしていいかわからない人

この記事ではVimがどんなものかは説明しないデモ。Vim 何とかでググってくれデモ(適当)
Vimがどんなものかわかったら読み進めてほしいデモ。

Vimを一週間で身につけるための2つのルール

  • 文字入力以外のことをインサートモードでやらないこと
  • 常に最適のコマンドを調べて使用すること

文字入力以外のことををインサートモードでやらないこと

Vimにはいくつかのモードがあるけど、インサートモードは普通のエディタと同じように文字列操作ができてしまうデモ。
だから極端な話、ずっとインサートモードにしておけばメモ帳のように使えてしまうデモ。それだといつまで経っても上達しないので、他のモードで出来ることをインサートモードでやるのは一切禁止デモ。

常に最適なコマンドを調べて使用すること

Vimにはたくさんのコマンドがあるので同じことをやるにも何通りも方法があるデモ。
覚えたコマンドを使い回せばなんとなくやりたいことができてしまうけど、それだと新しいコマンドを覚えなくなってしまうので、必ず最適な方法を見つけて使用するデモ。(この記事における最適の定義は次で説明するデモ。)

もし惰性で最適ではないと思うコマンドを使ってしまったら、アンドゥしてやり直すこと。
これをやるとやらないとじゃ大違いデモ。

(この記事における)最適なコマンドの定義

この記事内で最適なコマンドと言うとき、それは

  1. 意味的に正しく汎用性がある
  2. 1を満たす上で最短

であるコマンドデモ。

意味的に正しく汎用性がある

前述の通り、Vimのコマンドは同じことをするのにも何通りも方法があるデモ。
例えば以下のコードで、{}の中を全て削除」したい場合。
(カーソルはtotaltにあるとするデモ。)

public static int sum(int a, int b) {
    int total = a + b;
    return total;
}

たとえばこんな方法があるデモ(コマンドは理解できなくてもいいデモ)。

1) 0vj$d --- 行の先頭に移動→VISUALモードに移行して選択開始→1行下に移動→末尾に移動→選択範囲を削除

sample1.gif

2) 2dd --- 現在の行から2行を削除

sample2.gif

3) di{ --- {}の中を削除

sample3.gif

問題: このうち「最適」なコマンドはどれ?

A. 3のdi{
今回やりたかったことは{}の中を全て削除」だったデモ。その要件を満たすのは3だけデモ。
2と3は打鍵数もスピードもほぼ変わらないけれど、2のコマンドは「現在の行から2行を削除」するコマンドであって「{}の中を全て削除」するコマンドではないデモ。

今後、他の箇所で{}の中を削除するとき、2の方法では{}の中の行数を数えて数字を変えなければいけないデモ。汎用性がないデモね。
一方でdi{は「{}の中を全て削除したい」場合にいつでもこのまま使うことができるデモ。

なんとなくわかってくれたデモ?

最適なコマンドを見つける方法

さて、最適なコマンドがどういうものかを説明したところで、最適なコマンドを見つける方法を説明するデモ。

やりたいことを正確に言葉にする

すべてはここに尽きるデモ。今から自分がしたい操作を意味的に正しく言葉で表現することで汎用性の高いコマンドにたどり着くことができるデモ。
たとえば先ほどのコードで{}の中を全て削除」が正しいかどうかは場合によるデモ。

もし仮に他の行がこの{}内にあったとしても、削除したいのはこの2行だけである場合は「{}の中を全て削除」ではなく「2行だけ削除」が正しい表現になるはずデモ。

public static int sum(int a, int b) {
    int total = a + b;
    return total;
}

ググる

やりたいことを正確に言葉にできたら、あとはググるだけデモ。
Vim カッコの中 全削除とかググったらすぐ出てくるデモ!
チートシートもいろんな人が作ってくれているからざっと目を通してみるといいデモね。

まとめ

この2つのルールを完璧に守れなくても、意識して練習するだけですぐにVimを使えるようになるはずデモ。ワガハイは(速度はともかく)かなり操作に慣れることができたデモ。

注意してほしいのは、この2つのルールは操作を少しでも早く覚えるためのルールであって、Vimの最適な使い方とは限らないデモ。
たとえば、今回紹介したルールではインサートモードを極力使わないようにと書いたけど、入力中にタイポ(入力間違い)をしてしまった場合は、DELETEを使った方が絶対速いデモ。
そのへんは使っていくうちにわかってくるはずだから、うまくやってほしいデモ。

ワガハイも勉強中の身、なので一緒に成長していこうデモ!
エンジョイVimライフデモ!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした