Blank File

LinuxとかPythonとかVimとか、趣味でいじる感じで

Vim の g で始まるコマンドというかキーマップの一覧

今回、gをプレフィックスとするキーマップの種類別一覧を昔作ったのを思い出したので紹介します。地味に便利なものも結構あります。アルファベット順の一覧は :help g で見られますので、開いているマッピングを探す時などはそちらをご参照下さい。

2015年2月11日 整理し直しました。ついでに目次を追加。

目次

移動・ジャンプ

カーソル移動

表示行単位の移動

コマンド 動作
gj jと同様。ただしスクリーン行で下へ移動
g<Down> gjと同じ
gk kと同様。ただしスクリーン行で上へ移動
g<Up> gkと同じ
g^ ^と同様。ただし折り返されている時は表示上の行頭の非空白文字へ移動
g0 0と同じ。ただし折り返されている時は表示上の行頭へ移動
g<Home> g0と同じ
g$ $と同じ。ただし折り返されている時は表示上の行末へ移動
g<End> g$と同じ

gなしと逆方向の移動

コマンド 動作
ge eの逆。直前の単語の末尾に移動
gE Eの逆。直前のWORDの末尾に移動
g_ _の逆。N行下の最後の非空白文字に移動 (:help g に記載なし)

ジャンプ

ファイル内移動

コマンド 動作
gg 一行目へジャンプ。数字指定があればN行目へジャンプ
gm スクリーン上行の中央文字へジャンプ
go バッファ中のNバイト目へジャンプ
g; チェンジリスト(:changesで表示)のN個前に戻る (:help g に記載なし)
g, チェンジリスト(:changesで表示)のN個後に進む (:help g に記載なし)

検索移動

コマンド 動作
gd カーソル位置の単語の定義を現在の関数内で探しジャンプ
gD カーソル位置の単語の定義を現在のファイル内で探しジャンプ
gn nと同じ。ただしマッチしたパターンを選択し、ビジュアルモードに入る
gN Nと同じ。ただしマッチしたパターンを選択し、ビジュアルモードに入る
g# #と同じ。ただし単語区切りしない("< >"で囲まれない)
g* *と同じ。ただし単語区切りしない("< >"で囲まれない)

タグジャンプ

コマンド 動作
g<C-]> <C-]>と同様だが:tagのかわりに:tjumpを用いる
g] カーソル位置の単語をタグとして:tselectを実行する

マーク

コマンド 動作
g'{mark} 'と同じだがジャンプリストを更新しない
g`{mark} `と同じだがジャンプリストを更新しない

タブ移動

コマンド 動作
gt 次のタブに移動
gT 前のタブに移動

ファイル移動

コマンド 動作
gf カーソル位置のファイル名のファイルを開く
gF カーソル位置のファイル名のファイルを開き、ファイル名の後に書かれた行番号にジャンプする

テキスト編集

貼り付け

コマンド 動作
gp pと同様だが、挿入後カーソルは挿入テキストの直後に移動
gP Pと同様だが、挿入後カーソルは挿入テキストの直後に移動

行連結

コマンド 動作
gJ Jと同様だが、空白文字を挿入せず行を連結

オペレータ

後ろにiwなどを続けて指定範囲に作用する

大文字・小文字変更

コマンド 動作
gu 小文字にするオペレータ(例:guiwでカーソル下の単語を小文字に)
gU 大文字にするオペレータ(例:gUiwでカーソル下の単語を大文字に)
g~ 大文字、小文字を変換するオペレータ

テキスト整形

コマンド 動作
gq テキストを整形する(折り返しなど)
gw テキストを整形する(折り返しなど)。カーソル移動なし

エンコード

コマンド 動作
g? Rot13エンコード。(abc → nop)
g??, g?g? 現在行をRot13エンコード

テキスト更新履歴を遡る・進む

コマンド 動作
g- 古いテキスト状態に移動する(uよりも高機能) (:help g に記載なし)
g+ 新しいテキスト状態に移動する(<C-r>よりも高機能) (:help g に記載なし)

別モードに入る

挿入モード

コマンド 動作
gI Iと同様だが、空白文字を無視し1カラム目から挿入モードに入る
gi iと同様だが、前回挿入モードを抜けた箇所('^マーク)から挿入モードに入る

選択モード

vなどで開始するビジュアルモードではなく、選択モードに入る

コマンド 動作
gh 選択モードを開始(v相当?)
gH 選択モードで行選択を開始(V相当?)
g<C-h> 選択モードで矩形選択を開始(<C-v>相当?)
gV 選択モードでマップやメニューを使用した後、選択していた選択範囲を再選択しない

仮想置換モード

仮想置換モードに入る

コマンド 動作
gr rと同様だが、置き換えるのではなく仮想上書きする(※)
gR Rと同様だが、置き換えるのではなく仮想上書きする(※)

※: 仮想上書きと通常の上書きの違いは<CR><Tab>で上書きするとわかりやすい。

abc|defg
hij klmn

という文字列の上で(カーソルは|、dの上)、r<CR>gr<CR>では以下のようになる。

r<CR>

abc
efg
hijklmn

gr<CR>

abc
hijklmn

その他

再利用

コマンド 動作
gv 前回の選択範囲を再選択する
g& 最後に実行した":s"を全ての行で実行する
g< 前回のコマンド出力を表示する

情報表示

コマンド 動作
g<C-g> 現在のカーソル位置の情報を表示
ga カーソル位置の文字のASCIIコード値を表示する
g8 UTF-8環境でカーソル位置の文字のバイト列を16進数で表示する
g<C-a> メモリプロファイルをダンプする

その他

コマンド 動作
gs N秒間スリープする。デフォルトは1秒
g@ "operatorfunc"を呼ぶ(プラグインでたまに使われてるような)
gx カーソル下のファイル名に対応したアプリケーションを起動
gQ Qと同様Exモードに切り替えるが、:同様に補完などが利用可能

未使用の組み合わせ(2015年1月31日)

gと以下の英数字記号の組み合わせはデフォルトでは使われていないようです。 マッピングを考えるときのご参考になれば。

ABCGKLMOSWXYZ
1〜7, 9, !, {, }, [, b, c, y, z, >, /, ., % *1

Ctrlキーとの併用では g<C-A>, g<C-G>, g<C-H>, g<C-]> 以外

おわりに

Vimは最初から様々なキーがマッピングされています。 マッピングは主に1キーに一つの意味で設定されています *2 が、今回紹介したg始まりの組み合わせのように2ストローク以上のキーで意味を持つものもあります。 *3

今回紹介した以外にも、zzで先頭に移動するなど複数ストロークで意味を持つマッピングは多くあります。ノーマルモードでは、それらは主に z, [, ] をプレフィックスとして設定されています。というわけで、どなたかz[ or ] で始まるデフォルトキーマッピングの一覧表を機能別で作ってくれないかな、と期待しております。

*1:g% はmatchitで使われています

*2:h, j, k, l や i, I, a, A など

*3:ciw や dap なども複数キーですが、これらは各キーに一つの意味が設定されています。