vi コマンドを整理してみた
#vi#tips
◆カーソルの移動 ・[1G] ⇒ 1行目に移動 ・[gg] ⇒ 1行目に移動 ・[:1] ⇒ 1行名に移動 ・[G] or [:$] ⇒ 最終行に移動 ・[10G] or [10gg] or [:10] ⇒ 10行目に移動 ★[5|] ⇒ 5桁目に移動 ・[H] ⇒ 画面内の最上行に移動 ・[L] ⇒ 画面内の最下行に移動 ・[M] ⇒ 画面内の中央に移動 ・[0] ⇒ 行頭に移動(インデントに関係なく先頭) ・[^] ⇒ 行頭に移動(インデントの先頭) ・[$] ⇒ 行末に移動 ・[w] ⇒ 右へ単語単位に移動(単語の先頭へ) ・[W] ⇒ 右へ空白文字毎に移動 ★[e] ⇒ 右へ単語単位に移動(単語の末尾へ) ・[E] ⇒ 右へ単語単位に移動(単語の末尾の次へ) ・[b] ⇒ 左へ単語単位に移動 ・[B] ⇒ 左へ空白文字毎に移動 ★[f + 任意1文字] ⇒ 右の特定の文字へジャンプ([;]⇒次を検索/[,]⇒前に戻る) ★[t + 任意1文字] ⇒ 右の特定の文字へジャンプ、手前でストップ([;]⇒次を検索/[,]⇒前に戻る) ・[F + 任意1文字] ⇒ 左の特定の文字へジャンプ([;]⇒次を検索/[,]⇒前に戻る) ★[Ctrl + o] ⇒ カーソルを移動前の位置に戻す(反対のコマンドは [Ctrl + i]) ◆画面のスクロール ★[zz] ⇒ カーソル行を真ん中に ・[zl] ⇒ 右へスクロール ・[zh] ⇒ 左へスクロール ★[zL] ⇒ 右へ半分スクロール ★[zH] ⇒ 左へ半分スクロール ◆選択 ★[v] ⇒ 通常選択(カーソル位置から) ★[V] ⇒ 通常選択(カーソルがある行から) ★[Ctrl + v] ⇒ ブロック選択 ★[1GVG] ⇒ ファイル全体を選択 ★[viw] ⇒ 単語の選択(カーソル位置にある単語を選択) ・[v$] ⇒ カーソル位置から行末まで選択 ・[v0] ⇒ カーソル位置から行頭まで選択(インデントに関係なく先頭) ・[v^] ⇒ カーソル位置から行頭まで選択(インデントの先頭) ◆挿入 ・[A] ⇒ カーソルのある行の最後に追加 ・[I] ⇒ カーソルのある行の先頭に追加 ★[Ctrl v](矩形ビジュアルモード)+ 0 + [I] + 挿入文字 ⇒ 選択範囲の先頭に一気に挿入 ★[Ctrl v](矩形ビジュアルモード)+ [Shift $] + [A] + 挿入文字 ⇒ 選択範囲の行末に一気に挿入 ★[>>] ⇒ タブ幅分右にずらす ★[<<] ⇒ タブ幅分左にずらす ◆削除 ★[diw] ⇒ 単語の削除(カーソル位置にある単語を削除) ・[d1G] ⇒ カーソル行から先頭行までを削除 ・[dG] ⇒ カーソル行から最終行までを削除 ・[D] or [d$] ⇒ カーソルの位置から行末までを削除(改行残す) ・[0D] ⇒ 行の先頭から行の最後までを削除(改行残す) ★[:g/string/d] ⇒ "string"を含む行を削除する ★[:v/string/d] ⇒ "string"を含まない行を削除する ◆複写 ・[yw] ⇒ 単語の複写(カーソル位置から単語の末尾までを複写) ★[yiw] ⇒ 単語の複写(カーソル位置にある単語を複写) ★[V](選択モード) + カーソル移動 + [y] ★[yy10p] ⇒ カーソル位置から10行を複写 ・[p] ⇒ カーソルの後に貼り付け ・[P] ⇒ カーソルの前に貼り付け ★[Ctrl Insert] ⇒ 選択文字をクリップボードへ ★[Shift Insert] ⇒ クリップボード内容をペースト ◆書き換え ・[cw] + 単語の入力 ⇒ 単語の書き換え ・[ciw] + 単語の入力 ⇒ 単語の書き換え ★[~] ⇒ 選択文字を大文字小文字相互変換 ◆検索 ★[/\<string\>] ⇒ 単語単位の完全一致検索 ★[/\<the] ⇒ theからはじまる単語を検索する("the","theater", "then") ★[/the\>] ⇒ theで終わる単語を検索する("the","breathe") ★[*] ⇒ カーソル位置の単語を下方検索 ★[#] ⇒ カーソル位置の単語を上方検索 ★[/Ctrl v + TAB] ⇒ TABの検索 ★[/Ctrl r + "] ⇒ ヤンクしている文字を検索文字列として使用したい場合 ・[:noh] ⇒ 検索後にハイライトを消す ◆取消し ・[u] ⇒ 通常取り消し ・[U] ⇒ 行に対する変更の取消し ・[Ctrl R] ⇒ 取消しの取消し ◆置換 ・[:s/pattern/string/g] ⇒ 行内の文字列置換 ・[:'a,'bs/pattern/string/g] ⇒ 範囲支店の文字列置換 ・[:%s/pattern/string/gc] ⇒ ファイル全体の文字列置換(cは確認を求めるオプション) ★[:%s/^/string] ⇒ 全ての行頭に任意の文字を付加する ★[:%s/$/string] ⇒ 全ての行末に任意の文字を付加する ★[:%s/^M$//g] ⇒ 行末の ^M を削除する ◆バッファ操作 ・[:ls] ⇒ バッファ一覧を表示する ・[:bn] ⇒ 次のバッファを開く ・[:bp] ⇒ 前のバッファを開く ・[:b #9] ⇒ 指定した番号のバッファを開く ★[:bd #9] ⇒ 指定した番号のバッファを削除する ★カーソルの下に書かれたテキストと同じ名前のファイルを一気に開く ★[gf] ⇒ 現在のウィンドウに開く ★[Ctrl w + f] ⇒ 分割ウィンドウに開く ★[Ctrl w + gf] ⇒ 新しいタブに開く ★[:e #] ⇒ 直前に編集していたファイルを再編集する ◆分割ウィンドウ ★[Ctrl w + 10+] ⇒ 分割ウィンドウの高さを広げる ★[Ctrl w + 10-] ⇒ 分割ウィンドウの高さをせばめる ★[Ctrl w + 10>] ⇒ 分割ウィンドウのサイズを広げる ★[Ctrl w + 10<] ⇒ 分割ウィンドウのサイズせばめる ・[:sp] ⇒ 画面の水平分割(同一ファイルを分割)[Ctrl w + s]と同じ ・[:vs] ⇒ 画面の垂直分割(同一ファイルを分割)[ctrl w + v]と同じ ・[:sp filename] ⇒ 画面の水平分割(既存ファイル) ・[:vs filename] ⇒ 画面の垂直分割(既存ファイル) ・[:new] ⇒ 画面内上に空ウィンドウを開く [Ctrl w + Ctrl n]と同じ ・[:vnew] ⇒ 画面内右に空ウィンドウを開く ★[Ctrl w + Ctrl w] ⇒ 分割画面間のカーソル移動 ★[Ctrl w + l] ⇒ 分割画面間のカーソル移動(右へ) ★[Ctrl w + h] ⇒ 分割画面間のカーソル移動移動(左へ) ★[Ctrl w + k] ⇒ 分割画面間のカーソル移動移動(上へ) ★[Ctrl w + j] ⇒ 分割画面間のカーソル移動移動(下へ) ・[Ctrl w + L] ⇒ 分割画面を右へ移動 ・[Ctrl w + H] ⇒ 分割画面を左へ移動 ・[Ctrl w + K] ⇒ 分割画面を上へ移動 ・[Ctrl w + J] ⇒ 分割画面を下へ移動 ★[:set scrollbind] ⇒ 分割ウィンドウを同時にスクロールさせる。それぞれのウィンドウに設定する必要有り! ◆タブ画面操作 ・[:tabnew] ⇒ 新規タブを開く(空のファイル) ・[:tabe filename] ⇒ 既存ファイルをタブで開く ・[:tabn][gt] ⇒ 右隣のタブに移動 ・[:tabN][gT] ⇒ 左隣のタブに移動 ・[:tabr] ⇒ 先頭のタブに移動(tabrewind の意味) ・[:tabl] ⇒ 最後のタブに移動(tablast の意味) ・[:tabc] ⇒ 現在のタブを閉じる(tabclose の意味) ・[:tabo] ⇒ 現在のタブ以外を閉じる(tabonly の意味) ◆折り畳み ・[zc] ⇒ 折り畳みを閉じる ・[zo] ⇒ 折り畳みを開く ★[za] ⇒ 折り畳みを開く/閉じる ◆文字コード/改行コード ★[:set fileformat?] ⇒ 改行コードの確認 ★[:set fileencoding?] ⇒ 文字コードの確認(fileencodingに何もセットされていない場合は set encoding? とする) ★[:set fileencoding=utf-8] ⇒ 文字コードの変更(cp932,euc-jp,sjis,utf-8,utf-16)(指定できる文字コード) ★[:set fileformat=dos] ⇒ 改行コードの変更(dos,mac,unixが指定可能) ◆ファイルエクスプローラ ・[:e .] ⇒ 同画面に開く ・[:Sex] ⇒ 分割画面内に開く ・[Enter] ⇒ ファイルを開き、ディレクトリを移動する ・[o] ⇒ ファイルを分割画面に開く ・[p] ⇒ ファイルを分割画面にプレビューとして開く ★[x] ⇒ ファイルを関連付けられたアプリケーションで開く ◆ファイル入出力 ・[:'a,'b w aaa.txt] ⇒ 範囲指定でファイルへの出力 ・[:r aaa.txt] ⇒ ファイルの読込み ★[:1,10 w >> outfile] ⇒ 1行目から10行目を outfile に追記する ◆システムコマンド ★[:!cmd] ⇒ cmdを実行してステータスラインの下へ結果を表示(編集中のバッファには影響しない) ★[:範囲指定!cmd] ⇒ 選択範囲のバッファをcmdの標準入力に流し込み、代わりにcmdの出力で置換する。 例えば :%!sort を実行すればバッファ全行がsortされる。 ★[:r!dir] ⇒ 外部コマンドの結果をカーソル位置に読み込む ★vimコマンドで「%」を入力すると、自動的に今開いているファイルのフルパスに置き換えられる。 参考HP [:!svn ci %] ⇒ [:!svn ci c:\temp\aaa.txt] となる。 ◆ctagsを利用する ★インストールする ⇒ 参考HP ・[c:\> ctags -R] ⇒ タグ作成(コマンドプロンプトからの場合) ★[:!ctags -R] ⇒ タグ作成(vimからの場合) ★[Ctrl + ]] ⇒ カーソル位置のクラス等にジャンプ ★[g Ctrl + ]] ⇒ カーソル位置のキーワードにマッチするタグが複数ある場合に選択可能 ★[Ctrl + t] ⇒ ジャンプ元に戻る ★[[ + d] ⇒ #defineなどの定義値を参照する ★[gd] ⇒ 変数の宣言にジャンプ(ローカル変数) ★[gD] ⇒ 変数の宣言にジャンプ(グローバル変数) ★[:find abc.h] ⇒ コーディング中に、あのヘッダファイルが開きたい!(vim内で path を設定しておく必要有り) ★タグファイルの位置をVimに知らせる ⇒ :set tags=./tags,/usr/src/tags ★複数のディレクトリに対してctagsを実行したい ⇒ ctags -f ~/.tags -R ~/myprojects/src $JAVA_HOME/src ◆ソースコード上のメソッド宣言、変数宣言の一覧を表示する(taglistの利用) ★[:Tlist] ⇒ クラスのアウトライン表示 ◆入力補完 ・[Ctrl p] ⇒ 入力補完(前方へ) ・[Ctrl n] ⇒ 入力補完(後方へ) ・[Ctrl y] ⇒ 入力補完(候補決定) ◆統合開発環境としてのvim ・GnuMakeのインストール ・GnuMakeのインストール ⇒ GnuMakeをインストールしたら fgrep も一緒にインストールされた ・コンパイラ MinGWのインストール ・MinGWの使い方 ⇒ C のソースをコンパイルする時は gcc hello.c ⇒ C++ のソースをコンパイルする時は g++ hello.c ・:copen, :ccloseの使い方 ・vim で make ◆Tips ★[:set scrolloff=999] ⇒ 常にカーソル位置をウィンドウに中央に表示する ・[:set list] ⇒ タブの表示(反対は :set nolist) ★F1キーをESCにマップするには? ⇒ F1キーをEscの代わりにするには?(その1) ⇒ F1キーをEscの代わりにするには?(その2) ⇒ 結局、自分は _vimrc に以下を追記した inoremapnoremap ★スペースキーでスクロール ★[:sh] ⇒ vi操作中に一時的にシェルを起動する ★[:sort u] ⇒ 重複行の削除 ★[:W] ⇒ ウィンドウの横幅最大に ★vimでバイナリ編集するには? ・[vim -b ファイル名] ⇒ バイナリモードでファイルを開く ・[:%!xxd] ⇒ バイナリ表示する ・[ファイルを編集する]⇒ 16進表記への変更だけが反映される ・[:%!xxd -r] ⇒ テキスト表示に戻す ・[ファイルを保存] ⇒ バイナリ編集結果を保存する ★[q字] ⇒ キー入力の記録を開始する。[:@]⇒記録内容を確認する ★[:marks] ⇒ マークの位置と一覧の参照 ★[:global] ⇒ ファイル内の各行毎に編集処理を実行する ★[ga] ⇒ ★[:pwd] ⇒ カレントディレクトリを確認する ★[c:\> vim -d filename1 filename2] ⇒ ファイルの差分を確認する(コマンドラインから) ★[:vert diffsp filename] ⇒ ファイルの差分を確認する(vimから) ・[q:] ⇒ コマンド履歴を表示する。カーソル移動(j,k,h,l)で履歴コマンド選択可能。 ・[J] ⇒ 行の連結コマンド ・[:%j] ⇒ ファイル内の全ての行を連結する ・[:cd ***] ⇒ ディレクトリの移動 ・[:cd ~] ⇒ ホームディレクトリへ移動 ★[:cd %:h] ⇒ 編集中ファイルのディレクトリに移動する ・[m[A-Z]] ⇒ ファイル自体をマークし、['[A-Z]]で一気にファイルを開く この機能が効かない場合は _vimrc に [:set viminfo+=f1] を設定する ・[8a---------+] ⇒ 80文字分のメモリを作る ・[8i---------+] ⇒ 80文字分のメモリを作る ・[:vimgrep /string/ **/*.java | cwin] ⇒ vimgrepの使い方 ⇒ ★ ⇒ ★ ・[:DiffOrig] ⇒ 最後にバッファに保存時点からの差分を表示(終了するには :diffoff) ◆ヘルプ ・[:help visual-operators] ◆設定(オプション一覧) ・私の設定(_vimrc) "--------------------------------------------------------------------------- " 検索の挙動に関する設定: set noignorecase " 検索時に大文字小文字を無視しない set noincsearch " インクリメンタルサーチしない set hlsearch " 検索文字列をハイライトする set nowrapscan " 検索時にファイルの最後まで行ったら最初に戻らない "--------------------------------------------------------------------------- " 編集に関する設定: set tabstop=2 " タブの画面上での幅 set expandtab " タブをスペースに展開する set shiftwidth=2 set noautoindent " 自動的にインデントしない set nosmartindent " 自動ンデントしない set noshowmatch " 括弧入力時に対応する括弧を表示しない "--------------------------------------------------------------------------- " GUI固有ではない画面表示の設定: set number " 行番号を表示 set noruler " ルーラーを表示しない set list " タブや改行を表示 set listchars=tab:>-,trail:-,eol:< " どの文字でタブや改行を表示するかを設定 set nowrap " 長い行を折り返さない set laststatus=1 " ステータスラインの表示(ウィンドウが複数の場合だけ) set cmdheight=1 " コマンドラインの高さ set wildmenu set cursorline " カーソル行の強調表示 set scrolloff=999 " 常にカーソル行を真ん中に "--------------------------------------------------------------------------- " その他設定 set nobackup " バックアップファイルを作成しない set backupdir=c:\tmp" directory for backup set directory=c:\tmp" directory for swap set hidden " 保存しないで他のファイルを表示できるようにする colorscheme default " 家のマシンだとこの色が綺麗! "set tags=C:\eclipse\jdk1.6.0_25\src\tags ・私の設定(_gvimrc) " フォント設定: set guifont=MS_Gothic:h9:cSHIFTJIS "--------------------------------------------------------------------------- " ウインドウに関する設定: :winpos 400 300 set columns=100 " ウィンドウの幅 set lines=25 " ウィンドウの高さ set guioptions-=T colorscheme desert "set tags=C:\eclipse\jdk1.6.0_25\src\tags