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] ⇒ 入力補完(候補決定)

◆統合開発環境としてのvimGnuMakeのインストール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 に以下を追記した
       inoremap  
       noremap  スペースキーでスクロール
  ★[:sh] ⇒ vi操作中に一時的にシェルを起動する
  ★[:sort u] ⇒ 重複行の削除
  ★[:W] ⇒ ウィンドウの横幅最大に
  ★vimでバイナリ編集するには?
    ・[vim -b ファイル名] ⇒ バイナリモードでファイルを開く
    ・[:%!xxd]            ⇒ バイナリ表示する
    ・[ファイルを編集する]⇒ 16進表記への変更だけが反映される
    ・[:%!xxd -r]         ⇒ テキスト表示に戻す
    ・[ファイルを保存]    ⇒ バイナリ編集結果を保存する
  ★[q字] ⇒ キー入力の記録を開始する。[:@]⇒記録内容を確認する
  ★[:marks] ⇒ マークの位置と一覧の参照
  ★[:global] ⇒ ファイル内の各行毎に編集処理を実行する
  ★[ga] ⇒ カーソル位置の文字のASCIIコードを表示する
  ★[: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の使い方
                                         ⇒ ★[Ctrl r] + [Ctrl w]でカーソル下の単語をコマンドラインに挿入できる
                                         ⇒ ★[Ctrl r] + " でヤンクした単語をコマンドラインに挿入できる
  ・[: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