====== vi ======
===== コマンド系 =====
* 以前実行したコマンドを 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
===== netrw =====
* ファイル選択\\
mf
* 選択したファイルを比較(最大3個まで)\\
md
===== 表示系 =====
* ステータス行表示\\
(常に表示)
(ファイル名、編集状態、読み取り専用、文字コード、改行コード、行番号)
:set laststatus=2
:set statusline=%<%f\ %m%r%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l/%L,%v
===== 編集系 =====
* 数字をカウントアップする。(1 => 2 => 3 ...)\\
control + a
* カーソル位置の文字を [大文字 <=> 小文字] 変換して、カーソル位置を次に進める。\\
~
* カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を [大文字 <=> 小文字] 変換する。\\
g~[移動操作]
* カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[小文字]に変換する。\\
gu[移動操作]
* カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[大文字]に変換する。\\
gU[移動操作]
===== 削除系 =====
* 行削除\\
dd
* 3行削除\\
3dd
* 行頭まで削除\\
d0
* 行末まで削除\\
d$
* 文頭まで削除\\
d1G
* 文末まで削除\\
dG
===== Undo =====
* undo\\
u
* redo\\
control + r
===== 移動系 =====
* 対括弧に移動\\
%
* 画面内で移動
* 画面の一番上に移動\\
H
* 画面の真ん中に移動\\
M
* 画面の一番上に移動\\
L
===== スクロール系 =====
* カーソル行がページの先頭にくるようにスクロール\\
zt または z + Enter
* カーソル行がページの中央にくるようにスクロール\\
zz または z + .
* カーソル行がページの先頭にくるようにスクロール\\
zb または z + -
* 画面半分スクロール\\
* 上 : Ctrl + d
* 下 : Ctrl + u
* 1行スクロール
* 上 : Ctrl + y
* 下 : Ctrl + e
===== 置換 =====
* 置換後の文字列に改行文字を指定する。\\
Ctrl + v, m または Ctrl + v, Enter
* 置換後の文字に ~(チルダ)を指定する。\\
\(バックスラッシュ)でエスケープする。
* :% で行った変換をもう一度行う。\\
&
==== 正規表現 ====
* 置換後に使う範囲を指定するためのかっこ '(', ')' はバックスラッシュ \ でエスケープする。\\
Mac の場合は option + ¥ で入力する。
==== 複数ファイルにまたがった置換 ====
:args **/*.txt
:args
:argdo %s/foo/bar/gc | update
===== ウィンドウ =====
* 分割\\
:sp
* 分割したウィンドウ間の移動\\
ctrl + w, w\\
ctrl + w, p
* カーソルがあるウィンドウのみにする\\
ctrl + w, o\\
* カーソルがあるウィンドウを閉じる\\
ctrl + w, c\\
* ひとつに戻す\\
:q
==== 分割したウィンドウのサイズ調整 ====
* 同じサイズにする\\
ctrl + w, =\\
* 垂直分割
* カーソルがある方のウィンドウを大きくする\\
ctrl + w, +\\
[数値]ctrl + w, +\\
* カーソルがある方のウィンドウを小さくする\\
ctrl + w, -\\
[数値]ctrl + w, -\\
* 水平分割
* カーソルがある方のウィンドウを大きくする\\
ctrl + w, >\\
[数値]ctrl + w, >\\
* カーソルがある方のウィンドウを小さくする\\
ctrl + w, <\\
[数値]ctrl + w, <\\
===== タブ =====
* タブ幅を設定\\
:set tabstop=4\\
:set ts=4
* オートインデント\\
:set autoindent\\
:set ai
* C言語を意識したオートインデント\\
:set cindent
* インデント幅\\
:set shiftwidth=4\\
:set sw=4
* ソフトタブ\\
:set expandtab
===== copy & paste =====
* 過去にyankした内容を貼付ける\\
* 1つ前 "0p
* 2つ前 "1p
* yankの一覧を見る\\
:di
===== 折りたたみ =====
* 折りたたみの切り替え\\
za
* すべての折りたたみを開く\\
zR
* すべての折りたたみを閉じる\\
zM
===== 実行系 =====
* 外部コマンドの実行結果をカーソル位置に取り込む\\
: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
===== スキーマ =====
- ~/.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
または、比較元を開いている状態で
:vertical diffsplit
省略形\\
:vert diffs
* diff を実行してファイル比較し、結果をウィンドウに表示。
:r!diff -s -X ~/tmp/diffexcludefiles.txt source/ target/
(diffexcludefiles.txt の中身)
*.gif
*.jar
*.exe
*.dll
===== 初期設定 =====
==== 拡張子 rb に対して 2桁でのインデント設定 ====
au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2
* Unix系 vim の場合\\
~/.vimrc
* Windows用 Kaoriya版 vim の場合\\
ホームディレクトリの _vimrc
==== Windows用 Kaoriya版 vim ====
=== 画面のテーマ ===
colorscheme koehler
ホームディレクトリの _gvimrc に記述