【実践技術書】実践Vim
Vimの標準機能について説明した本です。 インストールしたまんまの状態のVimでできることが書いてあります。
Vimの概念にしっかりと目を当て、Vimを使ってテキスト編集やコーディングを効率化する方法を解説しています。
プラグインを入れるとどんどん便利になっていきますが、まずはこの本を読んで基礎的な操作をできるようになっておくのがいいです。 基本的な操作から応用的な操作まで網羅的に体験することができますので、Vimに興味を持ち始めた人におすすめです。
121個のTips
Vimを使ってテキスト編集をする上で使える操作を121個のTipsとして紹介しています。
各モードの説明もあれば、基本的なコマンドや組み合わせて使う際のコツや注意なども書いてあります。 そもそもVimのことがあまりわかってない、という人にもかなりおすすめです。とりあえずサーバの設定くらいは書き換えられるようになった、くらいの人であればとても学べることが多いです。実はいろいろなことができ、テキスト編集などでかなり機能を持っています。
Vimの標準機能を学べる
Vimの標準機能に注目している本です。ですのでプラグインは全然出てきません。vimrcの変更もほとんどなく、インストールしたまんまのVimでできる操作を解説しています。 Vimのコマンドの考え方や概念についても触れているので、Vimについての深い理解を得られると思います。正式な用語なども出てくるので、他のVimmerとの共通言語として覚えておくと良いです。Vimのうまい使い方や設定の方法は、先輩Vimmerの人に教えてもらうのがおすすめです。
しかし、カスタマイズして使いたい、その例が知りたいという人には向いていません。 そんな人でも、見落としたり気づいていない標準機能や使い方があるかもしれませんので、一度手にとって見てほしいです。
編集する例のテキストと操作したキーとその結果が書かれているので、わかりやすいです。本を読みながら1つずつ自分の環境でも試してみましょう。
おわりに
副題にもありますが、「思考のスピードで編集しよう」と言うことを考えると、編集操作はいろいろ工夫が必要になります。 Vimを使うことで、同じことの繰り返しを避けたり、複数の対象を選択して編集できたりします。使いこなせるようになれば、大きな成長ができると思います。
覚えておきたいコマンド
以下に覚えておきたい操作をメモしてます。自分用です。 手元に印刷したりしておいて、覚えた・使いこなしたものは捨てていくと、コマンドを憶えるのに便利です。
行をコピー・移動
:t
:m
:3t7 3行目を7行目の下にコピー
:7m. 7行目を現在行の下に移動
ビジュアルモードで選択してから使うことで、rangeを複数行にすることも可能
選択範囲にノーマルモードのコマンドを実行
: nomal .
ビジュアルモードで選択したあとnomal .
とかで選択範囲にコマンドを実行できる「.」ドットなら直前のコマンドの繰り返し。
:%nomal A; ファイル全行に末尾にセミコロン
ウインドウ操作
<C-w>s 水平に分割 上下に別れる
<C-w>v 垂直に分割 左右に別れる
<C-w>c ウインドウを閉じる
:vsplit
とか:q
でやっていましたが、この方法でもできたんですね。
アクティブなファイルのディレクトリの相対パス
:e %:h<Tab>
%
で現在のファイル、:h
でファイル名を除く、タブ
キーで展開するそうです。この操作をすれば現在編集中のファイルのディレクトリが展開されます。
キーバインドの
<Leader>はユーザー定義用の名前空間として設定されているらしく、自由に使えそう。
nnoremap <Leader>n nzz
デフォルトでは<Leader>
は\ (逆スラッシュ)が割り当てられている。他のコマンドとバッティングしないか心配な場合はとりあえずこれで試すのが良さそう
マーク
mm mに場所をマーク
'm mにマークした場所に移動
`m mにマークした行の最初に移動
mM グローバルなMマーク
'M グローバルなMに移動
グローバルにすると編集セッション感で永続化されます。いつも:e $MYVIMRC
でVIMRCを開いてましたが、一度mV
でマークしておけば、'V
ですぐに開けるようになりました。
ヤンクレジスタ
"Op ヤンクレジスタの中身を貼り付け
Oはヤンクしたやつのみ記録されるレジスタ
マッチしたハイライトを一時的に消す
:noh 一時的にハイライトを消す
次検索したときにはハイライトがつくようになります。
自動補完
<C-n> 通常
<C-x><C-n> 現在のバッファ
<C-x><C-i> インクルードされているファイル
<C-x><C-]> tagsのキーワード
<C-x><C-k> 辞書
<C-x><C-l> 行全体を補完
<C-x><C-f> ファイル名
<C-x><C-o> オムニ補完