VIM
Table of Contents
コマンド系
- 以前実行したコマンドを vi のウィンドウ上で編集して実行
:control + f
- 編集を中断する
control + c, control + c
- 修正した ~/.vimrc の内容を即座に反映させる。
:source ~/.vimrcファイル系
- 文字コードを指定してファイルを開き直す
:e ++enc=文字コード (例):e ++enc=sjis
- 文字コードを変更して保存する
:set fileencoding=utf-8
:set fenc=utf-8
- 指定可能な文字コード例
utf-8, euc-jp, shift_jis
- 改行文字を指定して保存する
:set fileformat=dos
:set ff=dos
- 指定可能な改行文字
dos, mac, unix
- バイナリモードで開く
- -b パラメータを付けてファイルを開き
vi -b xxx.bin
- xxd コマンドを実行して、16進数表示し
:%! xxd
- 編集したら -r を付けて xxd コマンドを実行して表示モードを元に戻し
:%! xxd -r
- 保存する
:w
- 開いているファイルを再読み込み
:e!
- カーソル位置のファイルを開く
gf
検索
- 検索前の位置に戻る。
- `` (バッククォートを 2つ)
- Ctrl + O 押す都度戻る
- Ctrl + I 押す都度進む
- ヤンクした文字を検索欄にペースト
/ で検索開始
Ctrl + r, ” でペースト
- 検索文字列を編集するバッファを表示
q/
- 大文字・小文字
- 同一視する: set ic
- 識別する: set noic
- 末尾まで検索したら先頭に戻らないようにする
set nowrapscan
netrw
- ファイル選択
mf
- 選択したファイルを比較(最大3個まで)
md
表示系
- ステータス行表示
(常に表示) (ファイル名、編集状態、読み取り専用、文字コード、改行コード、行番号)
:set laststatus=2
:set statusline=%<%f\ %m%r%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l/%L,%v
- カーソル位置にある文字の文字コードを表示
ga
範囲選択
- 単語選択
viw
- 文を選択
vis
- 段落を選択
vip
- タグ内を選択
vit
- 記号(クォートや括弧)でくくられた範囲を選択
vi’, vi”, vi`, vi(, vi{, vi{, vi<
- 選択中に逆の端点にカーソルを移動
o (矩形選択時は O)
- 再選択
gv
編集系
- 数字をカウントアップする。(1 ⇒ 2 ⇒ 3 …)
control + a
- 数字をカウントダウンする。(3 ⇒ 2 ⇒ 1 …)
control + x
- カーソル位置の文字を [大文字 ⇔ 小文字] 変換して、カーソル位置を次に進める。
~
- カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を [大文字 ⇔ 小文字] 変換する。
g~[移動操作]
- カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[小文字]に変換する。
gu[移動操作]
- カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[大文字]に変換する。
gU[移動操作]
削除系
- 行削除
dd
- 3行削除
3dd
- 行頭まで削除
d0
- 行末まで削除
d$
- 文頭まで削除
d1G
- 文末まで削除
dG
- 直前の単語を削除
control + w
Undo
移動系
- 対括弧に移動
%
- 最後の編集位置に移動
`.(バッククォート + ビリオド)
- 最後の編集位置の行頭に移動
‘.(シングルクォート + ビリオド)
- 画面内で移動
- 画面の一番上に移動
H
- 画面の真ん中に移動
M
- 画面の一番上に移動
L
- カーソル位置から最初に見つかった指定された文字に移動
- 順方向
f + <文字>文字>
- 逆方向
F + <文字>文字>
- 次に見つかった文字の位置に移動
;(セミコロン)
- 前に見つかった文字の位置に移動
,(カンマ)
- カーソル位置の行番号を保存しておき、その行にジャンプ
- 保存
m<アルファベット>
(例) maアルファベット>
- 保存しておいた行にジャンプ
`<アルファベット>
(例) `aアルファベット>
スクロール系
- カーソル行がページの先頭にくるようにスクロール
zt または z + Enter
- カーソル行がページの中央にくるようにスクロール
zz または z + .
- カーソル行がページの先頭にくるようにスクロール
zb または z + -
- 画面半分スクロール
上 : Ctrl + d
下 : Ctrl + u
- 1行スクロール
上 : Ctrl + y
下 : Ctrl + e
置換
- 置換後の文字列に改行文字を指定する。
Ctrl + v, m または Ctrl + v, Enter
- 置換後の文字に ~(チルダ)を指定する。
(バックスラッシュ)でエスケープする。
- :% で行った変換をもう一度行う。
&
バッファ
- バッファ切替え
:b<バッファの番号>
(例) `:b3`バッファの番号>
- バッファ一覧
:ls
- 編集中のバッファを保存せずに、別のバッファに切り替える
:set hid
正規表現
- 置換後に使う範囲を指定するためのかっこ ‘(‘, ‘)’ はバックスラッシュ \ でエスケープする。
Mac の場合は option + ¥ で入力する。
- 複数ファイルにまたがった置換
:args **/*.txt
:args
:argdo %s/foo/bar/gc | update
- 最短マッチ
{-}
(例) /^[0-9]\{-}:
ウィンドウ
- 分割(水平)
:sp
ctrl + w, s
- 分割(垂直)
:vs
ctrl + w, v
- 分割したウィンドウ間の移動
ctrl + w, w
ctrl + w, p
- カーソルがあるウィンドウのみにする
:on
ctrl + w, o
- カーソルがあるウィンドウを閉じる
:clo
ctrl + w, c
- ひとつに戻す
:q
- 分割したウィンドウのサイズ調整
- 同じサイズにする
ctrl + w, =
- 垂直分割
- カーソルがある方のウィンドウを大きくする
ctrl + w, +
[数値]ctrl + w, +
- カーソルがある方のウィンドウを小さくする
ctrl + w, -
[数値]ctrl + w, -
- 水平分割
- カーソルがある方のウィンドウを大きくする
ctrl + w, >
[数値]ctrl + w, >
- カーソルがある方のウィンドウを小さくする
ctrl + w, <
[数値]ctrl + w, <
タブ
折りたたみ
- 折りたたみの切り替え
za
- すべての折りたたみを開く
zR
- すべての折りたたみを閉じる
zM
- 選択した範囲を折り畳む
zf
- カーソル位置の折りたたみを1 段階開く
zo
- カーソル位置の折りたたみをすべて開く
zO
- 再度折り畳む
zc
- 再度すべて折り畳む
zC
実行系
- 外部コマンドの実行結果をカーソル位置に取り込む
:r! []
- grep の検索結果を行番号付きで取り込む。
:r!grep -n <検索文字列> <対象ファイル>対象ファイル>検索文字列>
grep
vimgrep
ファイルに対して
grep実行
:vimgrep /検索文字列/j 対象ファイル
※「j」:最初にマッチしたファイルを開かない
※対象ファイル:ワイルドカード使用可
:vimgrep /検索文字列/j 対象ファイル | cwin
または
:vim /検索文字列/j 対象ファイル | cw
最後に「 | cwin」を付けると、検索後すぐに結果一覧が表示される
単語検索
- <>で検索文字列を囲む
:vim /\<検索文字列\>/j 対象ファイル | cw
- ディレクトリ階層を再起的に検索
ディレクトリ指定に ** を入れると、そのディレクトリ階層以下のファイルが対象となる
:vim /検索文字列/j java/src/**/*.java | cw
- 検索結果の一覧ウィンドウを開く
:copen
- 検索結果の一覧ウィンドウからファイルを開く
カーソルを開きたいファイルに移動して Enter
- Quickfix の操作
- 次の検索結果に移動
:cn
- 前の検索結果に移動
:cp
- 開いたファイルを閉じる
:ccl
vimgrep 実行前にカレントディレクトリを変更する。
:cd ~/doc/html
バッファに対して
- すべてのバッファに対して grep 実行
:bufdo vimgrepadd /<検索文字列>/ %検索文字列>
- 現在のバッファに対して grep 実行
:windo vimgrepadd /<検索文字列>/ %検索文字列>
grep コマンドを使う
- 指定したディレクトリ以下を再帰的に大文字/小文字を区別せず検索して、結果をバッファに取り込む
:r! grep -ir –include “ファイルパターン” “検索文字列” <検索ディレクトリ>
(例)
:r! grep -ir --include "*.rb" "connect" src
指定したディレクトリ以下を再帰的拡張正規表現で検索して、結果をバッファに取り込む
:r! grep -Er –include “ファイルパターン” “検索文字列” <検索ディレクトリ>
(例)
:r! grep -Er --include "*.java" "0x[0-9]+" src
ソート
- 全体をソートする
:1,$!sort
- 範囲指定してソートする
- 開始位置でマークする。
(例) 開始位置にカーソルを置き、mx。(xでマークする)
- 終了位置で以下をタイプ。
:'x,.!sort
- 行番号を指定してソートする。
(例) 10行目から20行目までをソート
:10,20!sort
- ソートしてユニーク化(重複排除)
:sort u
スキーマ
- ~/.vim/colors ディレクトリを作成。
- 作成したディレクトリにカラースキーマファイルをコピー。
:colorscheme <スキーマファイル名>
(ディレクトリ ~/.vim/colors/ と、拡張子 .vim は付けなくてよい)スキーマファイル名>
- 起動時にスキーマファイルを読み込む場合は、~/.vimrc に指定。
colorscheme <スキーマファイル名>スキーマファイル名>
Tips
- 複数の行頭に同じ文字列を挿入する。
- カーソルを行頭に移動。
- Ctrl + v で範囲選択。
- Shift + i を押して、挿入する文字列を入力。
- Esc で追加終了。
※行頭でなくとも良い。(行頭はイメージをつかみやすくするため)
- 連番を入力する
- r!jot -w’(\%d)’ 10
- r!ruby -e ‘puts (1..10).to_a.join(“\n”)’
Mac
コマンド行で正規表現を使う時などのエスケープ文字 ‘¥’ は、option + ¥ で入力する。(バックスラッシュ)
diff
2つのファイルを比較
- プロンプトから
vimdiff <sourcefile> <targetfile>
または、比較元を開いている状態で
:vertical diffsplit <target>
省略形
:vert diffs <target>
- diff を実行してファイル比較し、結果をウィンドウに表示。
:r!diff -s -X ~/tmp/diffexcludefiles.txt source/ target/
- (diffexcludefiles.txt の中身)
*.gif
*.jar
*.exe
*.dll
「Kaoriya 版」の場合、現在のバッファと、すでに開いているバッファの番号を指定して比較することができる
:VDsplit <バッファの番号>
すでに開いているバッファの番号は :ls で確認
(例) 現在のバッファと、3番のバッファを比較
:VDsplit #3
元に戻すときは :only
初期設定
- 拡張子 rb に対して 2桁でのインデント設定
au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2
- Unix系 vim の場合
~/.vimrc
- Windows用 Kaoriya版 vim の場合
ホームディレクトリの _vimrc
- Undoファイル .*.un~, スワップファイル *.swp を ~/.vim/tmp ディレクトリに作成するように設定
- mkdir ~/.vim/tmp
- vi ~/.vimrc
set directory=~/.vim/tmp
set backupdir=~/.vim/tmp
set undodir=~/.vim/tmp
Windows用 Kaoriya版 vim
- 画面のテーマ
colorscheme koehler
ホームディレクトリの _gvimrc に記述
トラブルシューティング
- Mac に VNC 接続して vi を起動したあと、コロンが入力できない時の回避方法
Shiftキーを押しながら 11 をたたく。
すると :.! が入るのでバックスペースで 2文字削除する。