「Vim」の記事構成
-
Vimmerへの招待
-
あなたがVimmerになる理由
-
Vimを学ぶときの心構え(メイン)
-
今日からVimmerになる
10分程度で読み終える記事です。
これを書いている人はだれか
エンジニア6年目 / Python Django Docker Javascript SQL / 人材関連企業の社内SE / みねぎしれい(minegishirei) / vim練習中です。
1章 Vimerへの招待
注意:Vim使っているからって転職が有利になるわけではありません
年収もリモート率も高いわけではないし、
何より要件として求めている会社はほぼないと言っていい。
にもかかわらずQiitaでは異様なフォロワー数なので、ある意味倍率は高いと言えるかもしれない。
Vimはシンプルなコマンドを複雑に組み合わせて使う
Vimはシンプルなコマンドの塊ですが、それらを組み合わせて複雑な処理をコンピューターにやらせることができます。
たとえば、次の文章で()の言う通りに文字をコピペで移動したいと思います。日本語が分かる人は分かると思いますが、文章が前後逆になってしまってますからね。
だからわたしはモンスターを飲むのです。(これをコピーした)
私は今日夜間のリリース作業を予定しています。
(ここにコピーしたい!)
VimのないVscodeであればどのように対応するのでしょうか。
-
マウスカーソルを持ち
-
(コピーしたい行)をドラッグ
-
Ctrl+X
-
マウスカーソルで(コピーしたい行)まで移動。
-
Ctrl+V
以上のように4~5手順はかかると思います。
同じことをVimは一手で完了させることができます。
具体的には
ddjjjp
を入力すると完了します。
少し解説しますと
-
ddは「一行分をカットする」
-
jjjは「3行下に移動する」
-
pは「ペーストする」
という命令です。
これら一つ一つの命令は実にシンプルですが、シンプルがゆえに応用が利きそれらの組合せで複雑な操作が可能になるのです。
Vimmerへの推薦の声
サーバーでの作業が捗る。ローカルマシンにファイルをダウンロードしなくてもいつも通り作業可能
sedやgrepやsortとか使う編集がvimだけでできるので1回限りのデータの整形や変換はプログラムやスクリプト組まずにvimだけでチャチャっと済ませられる
さらにそれらを使った良く使う編集を1つのキーに割り当てられる(非常に長い1行XMLや1行jsonなどを改行入れてファイルタイプ指定して自動インデントしてみやすくする、みたいな操作をF9キーにマップしたりとか出来る。そういうログファイルやダンプファイルを頻繁にチェックする時に重宝する)
矩形選択のコピーやペーストが何気に便利。矩形選択使う時は確実にvim使っちゃいますね。自分は他のエディタでどうやるのか知らないだけかもしれないけど
対応する括弧への移動が楽。対応括弧をハイライトしたりボールドで表示するエディタは多いけどキータイプだけで瞬時に閉じ括弧の位置まで移動出来るエディタってなかなかないので
自分が多用してるのはこんなもんですかね。
2章 あなたがVimmerになる理由
VscodeとVimのスキルは必ずしも競合しない
エディタはvscode一強時代であるとは言え、それでもマウスを伴わない慣れた環境での編集作業であればvimの方が勝ると思います。
理由はVimのコマンドの存在です。
それに加えてvimによるキーストロークを維持したままの高速なカーソル移動と編集機能がvscode上でできます。(Vscodeの拡張機能を使用することによって)
vscodeの目に優しい編集画面とvimによる高速編集は組み合わせることが可能になっているのです。
ですので、vscodeユーザーであってもVimのコマンドを習得することは無駄ではないのです。
Vimmerのアイコン
Vimのスキルはコーディングだけではなくブラウジングにも役立つ
vimのスキル(hjklによる移動)はvimmerがいる限りすたれることはありません。
例えばGoogleの拡張機能には、Vimと同じ操作でブラウジングを可能にするVimiunと呼ばれる拡張機能が存在します。
「EscもCtrl+{も遠い」と思った人へ
Vimには二つのモードが存在します。
-
Vimのコマンドを実行する「デフォルトモード」
-
通常のテキストエディタの様に書き込む「インサートモード」
Vimエディターではこの二つを切り替えながらテキストの編集を行うのですが、
「インサートモード」と「デフォルトモード」の切り替えには「Esc」キーがデフォルトでセットされています。
このモードの切り替えは編集中に何度も押す必要があり、それを遠いと感じる人が多いみたいです。
これがVimが敬遠される理由にもなるのですが、Vimmerはよく「jj」キーに対して「Esc」キーをバインディング(あるキーの入力を別のキーの入力と捉える設定のこと)することが多いです。
この設定をするだけで、「jj」と入力するだけで簡単にモードの切り替えができるのです。
「この設定が面倒」と感じる人もいますが、ひと手間かけるだけで永続的に解決できます。
Vscodeを使っている人であれば、以下の設定をsettings.jsonに追記するだけで完了です。
"vim.insertModeKeyBindings": [
{
"before": ["j", "j"],
"after": ["<Esc>"]
},
{
"before": ["j", "j"],
"after": ["<Esc>"]
}
],
Vimを使用している人も、まだ使用していない人もこの設定は万人におすすめすることができます。
3章 Vimの特徴と学ぶときの心構え
Vimは必修科目ではない
今の時代Vimは必ずしも必要なスキルではありません。
sshでログインした後に必ずvimを使用しなければならない時代は終わり、vscodeで十分リモートファイルをいじれる環境になりました。
マウスとキーボードを人並に使えれば誰でもプログラミングはできる様になってます。
Vimの本質はストリートファイターだったという話
※この章は個人の感想が多分に含まれます。
前の章で話しましたが、Vimはシンプルなコマンドの複雑な組合せで操作します。
この「コマンド」という概念ですが、自分は「格闘ゲーム」と同じだと思いました。
たとえばみんな大好き「昇竜拳」のコマンドは以下の通りです。
昇龍拳のコマンドは「→↓↘️+P」です。
昔から言われているのが「歩きながら波動拳」、つまり「→↓↘️→+P」という入力です。
この入力は、ほとんどの2D格ゲーで使える、汎用的な昇龍コマンドと言えます。
ストリートファイターとVimは役割も機能も違いますが、共通点があります。
-
コマンドそれぞれに意味があること
-
コマンドそれぞれ自体はシンプルであること
-
移動が最も大切であること
-
たまに革命的なコマンドが存在すること
-
コマンドを組み合わせて画面の表示を理想な状況に持っていくこと
-
頭の中で作戦を組み立てて実行すること
これらの共通点(特に、コマンドを組み合わせて戦うという点)はVim=格ゲーと言えるのではないでしょうか。
4章 今日からVimmerになる(はい/いいえ)
はいを選択した方は、次のいくつかの選択肢があります。
-
Google Chromeの「Vinium」拡張機能をインストールする
-
Vscodeの「VscodeVim」拡張機能をインストールする
-
Vim本体をインストールする
どれから初めても問題ありません。
Vimコマンドを自在に操ってマウスに縛られた生活から脱却しましょう!
地上最強のVimmerを 見たいかーッ!?(Vimコマンドランキング)
Vimのコマンドをランキング形式で紹介します
備考
title:Vimの本質はストリートファイターだったという話(Vimmerへの招待)