高機能エディタ:vim の機能逆引き一覧です。ほとんど自分用のメモですが、公開してみます。
誤りやツッコミがありましたらコメントをお願いします。
[コマンドモードへ移る]
[Esc]
[ページスクロール]
※下スクロールは左手系・上スクロールは右手系gg 先頭
C-b 1ページ戻る C-u 半ページ戻る
C-y 1行戻る 次の単語の 次の単語のC-e 1行進む
C-d 半ページ進むC-f 1ページ進む
G 最後尾nG n行目に移動
ngg n行目に移動:数字 指定行へジャンプ
[カーソルの移動]
k 上
j 下h 左
l 右
[行内のカーソル移動]
0 行頭へ^ 先頭文字へ
b 前の単語へw 次の単語の先頭へ
e 次の単語の末尾へ$ 行末へ
[画面内のカーソルの移動]
H 画面の一番上へ-High
M 画面の中段へ-Middle L 画面の一番下へ-Low
C-l 再描画
[カーソル位置における画面の移動]
zz カーソル位置が中心になるように画面をスクロール
[入力モードへ移る]
O 上行をOpen I 行頭から入力
i カーソルの前に入力a カーソルの後に入力
A 行末から入力 o 下行をopen
[編集]
X/x バックスペース/デリート
P/p カーソルの前にペースト/カーソルの後にペースト J 下の行と連結(同行の改行記号を削除)
gJ 下の行と、空白文字を除いて連結 C-a カーソルの数値をインクリメント(8,16進数対応)
C-x カーソルの数値をデクリメント(8,16進数対応) ga カーソルの文字の文字コード(アスキーコード)を返す(get ascii)
[プログラム内での移動]
% 対応する括弧"{ }","[ ]","( )"、コメント("/* */")にジャンプ
( 今の文の先頭へジャンプ ) 次の文の先頭へジャンプ
{ 今の段落の先頭へジャンプ } 次の段落の先頭へジャンプ
[[ 今のセクションの先頭へジャンプ ]] 次のセクションの先頭へジャンプ
gd ローカル宣言にジャンプ gD グローバル宣言にジャンプ
gf カーソル下の単語をファイル名として開く
[矩形選択]
C-v 矩形選択。その後、dやyで編集し、あるいはpで貼り付け。 v 行をまたぐ文字単位の領域選択
V 行単位の領域選択(ggVG :すべて選択) ~矩形選択応用~
> 現在の行を、インデント
= インデントの体裁を整える ~ 大文字小文字を入れ換え
u 全て小文字へ変換 U 全て大文字へ変換
[編集中のファイル情報を表示]
C-g ファイル名、変更の有無
1C-g ファイル名(フルパス) 2C-g ファイル名(フルパス)他
[ファイル]
:q/:q! 保存せず終了/保存せず強制終了
ZZ or :wq 保存して終了 :w 上書き保存
:w ファイル名 ファイル名で保存 :e ファイル名 ファイルを開く
:e! 最後に保存した内容に戻す :r ファイル名 カレント行にファイル内容を読み込む
:n 複数開いている場合は次のファイル :h ヘルプ
[書き込み権限]
:set ro 読み取り専用にする
:set noro 書き込み可能にする
[バッファ]
dd 行削除(4dd 4行削除) yy 行ヤンク(vi:ヤンク=コピー) d$ or D カーソルから行末までを削除 y$ or Y カーソルから行末までをヤンク
d^ or d0 カーソルから行頭までを削除 y^ or y0 カーソルから行頭までをヤンク dw カーソルから次の単語までを削除 yw カーソル-次単語までをヤンク
[上書き]
r 1文字を1文字で上書き
R 1文字を[Esc]が押されるまで上書き s 1文字を任意の文字列で上書き
S 1行を、任意の文字列で上書き cw 単語の末尾まで置き換え
c$ 行末まで置き換え cc 1行全体を置き換え = S
[履歴]
u アンドゥ
U 行に対する変更のすべてを取り消し C-r アンドゥのアンドゥ(リドゥ)
. 前回の繰り返し
[行指定コマンド]
:1,5d 1~5行目を削除 :.,$d カレント行(.)から行末($)までを削除
:%d 全行削除 (%は編集バッファ内の全行を意味する)
[検索]
:/パターン カーソルから末尾に向かって検索
:?パターン カーソルから先頭に向かって検索 n/N 次を順方向に検索/次を逆方向に検索
:noh ハイライトを消す(:nohlsearch) * カーソル上の単語を検索して回る
# *の逆順検索 :set ic 検索時に大文字/小文字を区別しない。IgnoreCase (:set noic)
:/パターン\c 検索時に大文字/小文字を区別しない(一時的な処置) :/パターン\C 検索時に大文字/小文字を区別する(一時的な処置)
:set smartcase 検索文字列に大文字が含まれている場合のみ、大文字と小文字を区別する。 :set list タブ文字、行末など不可視文字を表示する(:nolist)
[一括検索](grep:正規表現OK)
:g/XXX ファイル中最後のXXXを見つけてそこに移動
:g/XXX/d XXXを含む全ての行を削除する :g/XXX/p XXXを含む全ての行を表示する
:g!/XXX/nu XXXを含まない全ての行を、行番号を含めて表示
[置換](sed:正規表現OK)
:s/XXX/OOO/ 現在の行の、最初のXXXをOOOに置換 :s/XXX/OOO/g 現在の行の、全てのXXXをOOOに置換(gはグローバル)
:50,100s/XXX/OOO/g 50行~100行の全てのXXXをOOOに置換 :1,$s/XXX/OOO/g 全行の、全てのXXXをOOOに置換(1,$ = 全行)
:%s/XXX/OOO/g 上と同義(% = 全行) :%s/XXX/OOO/gc 全行のXXXをOOOに確認しながら置換
:sは置換コマンド。 最後のgは一行に幾つあっても置換を行う(逆に gが無い場合は一行に一置換)
:/~は検索。 つまり :/XXX でハイライトしておいて :%s//000/g としても同じこととなる
[組合せ置換]
:g/SSS/s/XXX/OOO/g SSSを含む行の、XXXをOOOに置換
[マーク]
m? マークを付ける ? は a-Z の一文字
`? マークの場所に移動 '? マークの行に移動
別位置で d`? マーク?から現在を、カット 別位置で y`? マーク?から現在を、ヤンク
別位置で d'?, y'? マーク行から現在の行を、カット・ヤンク
[マクロ]
qx 操作の記録 x は a-z の一文字 qX 操作の追記 X は a-z のに該当する大文字
q 記録終了 @? 記録を再生 @a , 5@a
@@ 直前のマクロを再生 :dis qで記憶したバッファの一覧を表示
[Shell]
:sh 一時的にデフォルトシェルを呼び出し⇒exit で vi へ戻る。
:!コマンド viを中断してコマンドを実行(シェル変数は引き継いでいない) viの扱いは、新たなシェルとして扱われているようだ。
:!perl foo.pl
[カレントディレクトリ]
:cd カレントディレクトリを表示 :cd D:/data/ カレントディレクトリを変更
[バッファのリスト]
:ls リストの表示(番号)
:buffer N N番を開く :bN N番を開く
:bn 一つ前のバッファを開く :bp 一つ後のバッファを開く
[マルチウインドウ]
C-w ウインドウモードに切り替え
n (new) 空のウインドウを開く s (share,separate) ウインドウを分割(水平)
v インドウを分割(垂直) C-w(もう一度) 次のウインドウに移動
q (quit) 終了(バッファを消す) c (close) 閉じる(バッファは残る)
r ウインドウの位置を交換 o (only) カレント以外のウインドウを閉じる
[Vim付属のエクスプローラで簡単にファイルを開く]
:Explore ディレクトリとファイルを一覧表示
:Explore D: Dドライブのディレクトリとファイルを一覧表示 カーソル下のファイルを開く、ディレクトリに移動する
o カーソル下のファイル、ディレクトリを別のウィンドウで開く p カーソル下のファイル、ディレクトリをプレビューウィンドウで開く
x カーソル下のファイルを関連付けられたアプリケーションで開く s ファイルの並び順を変更する(押すたびに、ファイル名、サイズ、日付が切替る)
r ファイルの並び順を逆にする i ファイルの詳細情報を表示する
- 一つ上のディレクトリに移動する ? ヘルプを表示する
[grepコマンド]
:grep (-r) pattern filename 検索/再帰検索
:copen 検索結果一覧を見る :clist(:cl) リスト表示
:cc[n] n番目に見付かった位置へ :cnext(:cn) 次に見付かった位置へ
:cprevious(:cp) その前に見付かった位置へ
[入力中の補完]
C-p カーソル位置よりも前にある単語で補完 C-n カーソル位置よりも後にある単語で補完 C-x C-f ファイル/ディレクトリの補完
[数値の増減]
C-a インクリメント(10進/8進/16進を自動判別)
C-x デクリメント(〃)
[Diff機能]
:diffsplit "filename" 水平分割 :vert diffsplit "filename" 垂直分割(verticalが本当)
[タブ/スペース変換]
:set expandtab タブをスペースに変換する
この状態で :retab 現在表示されているtabを、全てスペースに変換 :set unexpandtab タブをスペースに変換しない
この状態で :retab![new_tabstop] スペースがtabに変換される。 new_tabstopが設定されないときは、:set tabstopにより設定されている値で置換される。
[コマンドラインへのペースト]
C-r C-w カーソルの乗っている単語をペースト
C-r C-a カーソルの乗っているスペース区切りの一文をペースト
[設定について]
:set デフォルトから変更した設定一覧 :set all 全設定項目一覧
[クリップボード操作]
(+, * はクリップボードのレジスタを表す。" は C^R と同意)
"+x クリップボードへ切り取り "+y クリップボードへコピー
"+p クリップボードから貼り付け(下の行へ) "+P クリップボードから貼り付け(上の行へ)
[フォルダを再帰的にgrep(要grep)]
:grep -r 検索文字列 * カレントフォルダ以下を検索 (-riで大文字小文字を無視)
:copen 検索結果を表示 :ccl 検索結果を閉じる
[シンタックスの指定]
拡張子の無いファイルを開いた場合、シンタックスが判別できず
viのような真っ白なテキストを編集することになる。 明示的にファイルタイプを指定して、シンタックスを適用するには、下記コマンドを実行する。
:set filetype=sh sh のシンタックスを使用する場合
最終更新: