読者です 読者をやめる 読者になる 読者になる

Vimのコマンドまとめを作ってみた

仕事で、一日中使うってわけでもないけれども、Vimをちょいちょい使うようになって、はや一年。
コマンド自体や、やりたいことの名称を知っていればhelpも引けるんだけど、存在を知らないまま、使わずにいる機能ってたくさんあるんだなぁーと、実感することが多いです。

こんな機能あったんだって(自分にとって)発見だったことや、たまにしか使わないから忘れてしまってすぐ毎回ぐぐるコマンドだなーとか、そーゆーものをまとめてみました。

同等機能で、もっと便利な別のプラグインがあるよって場合もあるかとは思いますが、基本的にはデフォルトのvimで使えそうなものに絞りました。

さっそく、vimの起動から!

Vim起動

個人的に、おお!これあったんかい!って感動したヤツは、ssh越しでファイルが編集できる起動方法です(もうひとつは、Exploreでの起動)。

(シェルの)コマンド 意味 補足
$ vim Vimよ、立ち上がれ
$ vim -R file readonlyで起動 消しちゃいけないファイルをうっかり消さないために・・・。
$ vim - 標準出力の結果を取り込んでvimが立ち上がる シェルでなんかのコマンドの出力を受けたりできる
$ vim . Vimでファイルブラウズします。 カレントディレクトリに日付ファイルがだらだら並んでいて、シェルのファイル名補完が微妙に使いにくい場合にかなり重宝する。さらに詳しくは:Explore
$ vim file1 file2 ... 複数のファイルを編集する こうやって起動しても、1つのウィンドウで1つのファイルの編集が始まるだけですが、:argsにファイルのリストがあるよ。
$ vimdiff file1 file2 二つのファイルでdiffをとりつつ起動する :diffsとフォールディングを参照。
$ vim -q fixfile quickfixで開きます この直後は特になにも変化ないけど、:copenでリスト開けます。
$ vim scp://[user@]host/path/filename ssh越しにファイルを編集する userとかhostとかは適宜読み替えください。ちなみに、ルートにアクセスしたければ最後はhost//とスラッシュが2つ。
Vim起動直後のこまったとき編

よくあるのは、文字コードが違って読めないので、別の文字コードで開きなおしたい。ついでに、文字コードutf-8に変換したい。インデントぐちゃぐちゃなので、直したい(保存するかはともかくとして・・・)。の3パターンかなーと思います。

コマンド 意味 捕捉
:e ++enc=utf-8 指定した文字コードで開き直す
:set fileencoding=utf-8 指定した文字コード 文字化けしてない状態で使って、自分はこの文字コードで保存したいんや!というやつ
== インデントなおす gg V G ==みたいな感じで全部選択してやるといい感じになる(ことが多い)。
:Explore

あるファイルを編集しようとして、誤ってディレクトリを指定して起動してしまって、「あああああディレクトリをvimで開いちゃったーとほほ→:q 」と何百回とやったことか・・・。その画面で、カーソルを移動して、ファイル名の上でEnterを押せば、そのファイルが編集できる(個人的にもっと早く気がつきたかった機能No.1)

コマンド 意味 補足
:Explore ファイラーを開きます
:e . 同上 :e fileで編集開始だと知っていれば、Vim起動のvim .の同じ組み合わせ
:Sexplore スプリットなExplore. ウィンドウ操作は、ウィンドウ操作編へどうぞ
:Vexplore :Secploreすると、水平分割ですが、これは垂直に分割されます。 同上

Exploreの画面の操作は、ファイル編集のときと同じように移動(もちろんjk)スクロール・検索ができますし、QuickHelpにも書いてありますが、sを押せば、名前・サイズ・時間で並べ替えできます。詳しくは、ヘルプ読みましょう。*1

:args

起動時に渡した引数は、":args"でみることができます。

コマンド 意味 補足
:args 一覧表示だよーん []で囲まれているものが、現在編集中のもの。
:next つぎのファイルに移動するよーん 反対は:previous
:previous 前のファイルに移動するよーん 反対は:next
:first 先頭のファイルに移動するよーん
:last 最後のファイル

あるファイルを編集して、保存せずに移動しようとすると、怒られます。保存して移動は、:wして:nextとしてもよいですが、:wnextみたいなコマンドがあります。破棄して移動は、:next!です。

:diffs[plit]

vimdiff file1 file2で開くこともできますが、画面分割でvimから開くこともできます。

コマンド 意味 補足
:diffs file 水平分割でvimdiffします
:vertical diffs file 垂直分割します

ウィンドウの操作は、「ウィンドウ操作」のところへ。
畳み込みが(たぶん)現れるので、「畳み込み」へ。

畳み込み

僕はほぼ使わないので、現れるのは、vimdiffしたときぐらいで、開けるためのzaと全開のzRしか覚えていない・・・。

ヘルプは、:help fold-commands

アンドゥ/リドゥ
コマンド 意味 捕捉
u アンドゥ
U アンドゥ 一行まとめて
CTRL-R リドゥ
g- 戻る
g+ 進む
:undol[ist] undotreeを表示する 詳しくは、下のサイトを参照。

ファイルごとにundoとかの履歴を残すことができます。
Undoを管理する - Qiita

もう一回やる系(?)
コマンド 意味 捕捉
gv さっきやった選択やり直し 一回囲んでコマンドラインモードを間違えて、全キャンセルしたあととかに、gvしてやり直す。
gi もう一回同じところでインサートモードで入り直す
q: コマンドラインモードの過去の履歴がみれるので :historyでもいいけど、これは表示するだけ。
q/
q?
検索履歴をみる。/と?の違いは、前方/後方検索 http://nanasi.jp/articles/howto/editing/use-command-history.html
:history /で表示するだけ

:historyは、一度ちゃんと把握しておきたい・・・。)
あと、頭にgがつくものは、Vim の g で始まるコマンドというかキーマップの一覧 - Blank Fileにまとめがありました(多謝)。

ウィンドウ操作
コマンド 意味 捕捉
:split 水平分割
:vsplit 垂直分割
CTRL-W CTRL-W ウィンドウ間を移動する これを連打すれば、いつかは望んだウィンドウへ行ける・・・
CTRL-W j 指定した方向のウィンドウへ移動する jklmにかえれば、方向がかわります
CTRL-W CTRL-R 隣接ウィンドウを交換する
CTRL-W J 指定した方向のウィンドウと交換する JKLMにかえれば、方向がかわります
CTRL-W = ウィンドウの幅/高さを等分
CTRL-W + ウィンドウの幅/高さを変える 1回実行ごとの1つずつ(なので、いい感じの回数を頭につける)。+-< >にかえれば、高さ方向だったり幅方向だったり変わる。
CTRL-W _ ウィンドウの幅/高さを最大化 縦ボーに買えたら幅の方向です。
スクロール

ただ単にスクロールするだけなら、画面半分ずつ移動するのがなんとなく好きで、CTRL-UCTRL-Dだけしか使ってないような気がする・・・。yとeがいまいち覚えられない・・・。

スクロールの幅 上へ 下へ
全部 CTRL-B(Backward) CTRL-F(Forward)
半分 CTRL-U(Up) CTRL-D(Down)
1行 CTRL-Y CTRL-E

もうひとつは、見やすい位置にもってくる(つまりカーソルの場所は動かさないで、真ん中にスクロールする)zz。他のコマンドをよく忘れる。これはtopとbottomなので、まだ覚え易いけど・・・。


カーソルの位置を上(Top)ztへ。中央(?)zz、下(Bottom)zbになるようにスクロール。

ジャンプ

人類はもっとvim本来の機能を使うべきだった - うどん よこみち ここがめっちゃ親切にまとめてくれています。

コマンド 意味 捕捉
:ju[mps] jumplistを表示する
CTRL-O きほんのジャンプ 過去にジャンプした場所に戻りたかったら、これを雰囲気で連打
CTRL-I きほんのジャンプ
:tags タグスタック一覧表示 タグジャンプ関連
CTRL-T
:pop
:tag
make/quickfix/vimgrep

qucikfixリストは、makeがあればmakeと実行のところに書いてあるコマンドで作ることができます。
さらに、vimgrepでも作られるようです。vimgrepは、ファイルを横断して、ジャンプする候補を表示してくれるコマンドさんです。

コマンド 意味 捕捉
:make qucikfixリストができます 実行は:make run
:vimgrep // {} リスト生成する //は正規表現の部分。{}は範囲を指定します(*とかやると全部のファイルが対象)
:vimgrepadd // {} 既にあるリストに追加する

quickfixリストの操作方法は、

コマンド 意味 捕捉
:copen 開きます 上でエンター押せば、そこにジャンプする
:cclose 閉じます
:cn[ext] リストの順番で、次の場所にジャンプします
:cp[previous] リストの順番で、前の場所にジャンプします
タグジャンプ

雑な使い方の説明

$ ctags filename  #ファイルを指定した場合
$ ctags -R *      #再帰的にファイルを全部指定した場合

みたいな感じで、tagsのファイルを作っておく。...力つきた(ぱたり

*1:ファイルを誤って開いたあとに、ちゃっと戻る方法ってないんですかね・・・