vi,vimは,UNIXに昔から標準的に使われているテキストエディタです。
viを基にして,機能を拡張したものがvim(vi improved)エディタ。(以下のviは,vimのこととして記載)
viは,Windowsの一般的なテキストエディタとは,かなり印象が違います。
多少とっつきにくい面はあるんだけど,慣れてくると高速で編集作業が出来るようになる,不思議なテキストエディタです。
viを起動するには,単純に,
$ vi
と入力しても構わないし,またファイル名が決まっていれば(または,既に存在するファイルを開くのであれば),
$ vi ファイル名
で使えます。
Windowsで使えるコンパイル済みのvim(日本語対応)を, http://www.kaoriya.net/software/vim/ からダウンロードします。32bit版と64bit版があります。
インストールは,適当なディレクトリに解凍すればOK。環境変数のPathに追加しておくと起動しやすい。
vi,vimは,一般的なテキストエディタと違い,コマンドモード,入力モードがあり,モードを切り替えて使用します。(現在のモードがどっちだかが一見するとわからない)
起動直後は,コマンドモードになっていて,入力モードへの切り替えコマンドを入力すると文字の入力が出来るようになります。
ESCキーを押すといつでもコマンドモードに戻れます。
操作がわからなくなったら,とりあえずESCキーを二回ほど押してみるのが良いです。
太字を覚えればなんとかなります
key | 内容 |
i | 挿入モードへ |
a | 追加(カーソルの次から編集) |
o | 新しい行を追加し挿入モードへ |
R | 上書きモードへ |
v | ビジュアルモードへ |
Ctrl + v | 矩形選択のビジュアルモードへ |
ESC | 入力モード -> コマンドモードに戻る |
ctrl + [ | 入力モード -> コマンドモードに戻る |
ctrl + z | vimを一時停止する |
key | 内容 |
k,Ctrl + p | 1行戻る |
j,Ctrl +n | 1行進む |
h,BS | 1文字戻る |
l,SP | 1文字進む |
w | 次の単語(Word) |
e | 次の単語 |
b | 前の単語 |
f(文字) | カーソルがある行の(文字)に移動(Find) |
F(文字) | カーソルがある行の(文字)に移動(逆向き) |
0,^ | 行頭 |
$ | 行末 |
% | 対応する括弧に移動 |
Ctrl + f | 1画面(Up) |
Ctrl + b | 1画面(Down) |
Ctrl + u | 半画面上(Up) |
Ctrl + d | 半画面下(Down) |
Ctrl + e | 1行(Up) |
Ctrl + y | 1行(Down) |
zt, z<Enter> | カーソルを画面の最初に |
zz, z. | カーソル行を画面の中央に |
zb, z- | カーソル行を画面の最後に |
key | 内容 |
/ | 後方検索(.*[]^%/\?~$は,特別な意味をもつので「\.」のようにエスケープが必要) |
? | 前方検索 |
n | 再検索 |
N | 上方向に再検索 |
* | カーソル下の単語を検索 |
# | カーソル下の単語を検索(上方向に検索) |
:%s/hage/hoge/g | 単語の置換(hageをhogeへ置換)。%はファイル全体の意味。 |
key | 内容 |
yw | 1単語コピー(yank) |
Y,yy | 今いる行をコピー(yank) |
p | カーソルの場所に,ペースト |
yy5p | 現在の行をコピーし,下に5行追加する |
gv | 直前の選択範囲を再選択 |
v | visualモードへ(hjklで範囲選択) |
V | 行全体を選択してvisualモードへ |
Ctrl + V | visualモードへ(矩形選択) |
o,O | (visualモード中)選択範囲の四隅へ移動 |
:set ff=dos #なんか「^M」がいっぱい出たとき :set ff=unix :set ff=mac #「^M」がいっぱい出て、かつ全部一行になってるとき
ffは,fileformatの略。
なお,dosとunixの改行コードが混在しているようなファイルについては,上のコマンドを実行してもうまくいかない場合がある。この場合は手作業で直すしかない。
以下を .vimrcに書いておく。
set fileformats=unix,dos,mac
新規ファイルの場合,fileformatsの最初の改行コードが使われるようなので好みにより順番を変える。
以下のようなコマンドで,編集中のファイルを指定した文字コードで開き直せる。
:e ++enc=euc-jp :e ++enc=sjis :e ++enc=iso-2022-jp
しょっちゅう誤認識が起こるときは,以下を~/.vimrc(or %HOME%\_vimrc)に設定する。
" 文字コードの自動認識 if &encoding !=# 'utf-8' set encoding=japan set fileencoding=japan endif if has('iconv') let s:enc_euc = 'euc-jp' let s:enc_jis = 'iso-2022-jp' " iconvがeucJP-msに対応しているかをチェック if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb" let s:enc_euc = 'eucjp-ms' let s:enc_jis = 'iso-2022-jp-3' " iconvがJISX0213に対応しているかをチェック elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb" let s:enc_euc = 'euc-jisx0213' let s:enc_jis = 'iso-2022-jp-3' endif " fileencodingsを構築 if &encoding ==# 'utf-8' let s:fileencodings_default = &fileencodings let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932' let &fileencodings = &fileencodings .','. s:fileencodings_default unlet s:fileencodings_default else let &fileencodings = &fileencodings .','. s:enc_jis set fileencodings+=utf-8,ucs-2le,ucs-2 if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$' set fileencodings+=cp932 set fileencodings-=euc-jp set fileencodings-=euc-jisx0213 set fileencodings-=eucjp-ms let &encoding = s:enc_euc let &fileencoding = s:enc_euc else let &fileencodings = &fileencodings .','. s:enc_euc endif endif " 定数を処分 unlet s:enc_euc unlet s:enc_jis endif " 日本語を含まない場合は fileencoding に encoding を使うようにする if has('autocmd') function! AU_ReCheck_FENC() if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0 let &fileencoding=&encoding endif endfunction autocmd BufReadPost * call AU_ReCheck_FENC() endif " 改行コードの自動認識 set fileformats=unix,dos,mac " □とか○の文字があってもカーソル位置がずれないようにする if exists('&ambiwidth') set ambiwidth=double endif
cp932(Shift-JIS)にするには以下のようにする。
:set fileencoding=cp932
この状態だとまだ保存してないので,:wしてやれば文字コードを変更して保存になる。
:set ft=html #htmlファイルとして色付け・インデントしたいとき
ftは,filetypeの略。
ファイルの先頭か末尾5行以内に,
vim:set ft=html:
などと書いておくと,読み込み時に自動的に種類を指定できるみたい。
[範囲指定] !ruby を使う。ファイル全体なら,
:%!ruby -e 'print ARGF.read.gsub( /before:(.*) after:(.*)/, "\\1 => \\2" )'
とか。
選択範囲だけ加工する場合は
:'<,'>!ruby ...
(vで選択中に:を押すと,'<,'>は自動で入力される。)
vimでは,qコマンドで一連のキー操作をレジスタに保存し,それを@コマンドで実行することができる。
例えば,texで論文を書いていて,「true」や「my-func」のような識別子全てを,「\\|true|」「\\|my-func|」のように囲いたいときは,囲いたい単語にカーソルを合わせて,
qk (レジスタkに記録開始) dw (単語の削除) i (入力モードに入る) \|| (囲い) ESC (入力モードを抜ける) h (一文字左へ) P (ペースト) q (記録終了)
とすると,「カーソルの下の単語を\| |で囲む」という一連の操作がレジスタkに保存される。
あとは,文章中の識別子のところで「@k」のように入力するとその単語が\\| |で囲まれる。
で,カーソル下の文字の大文字と小文字を切り替えることができる。
g~[motion]で,ある範囲の文字を一気に切り替えることができる。例えば,g~wで単語,g~$で行末までとか。
g~~で,現在行の大文字と小文字を切り替えることができる。
vimでバイナリを編集したい場合,よくある16進ダンプとそれのテキスト表示があると便利。
xxdを使って,バイナリ編集をする方法がある。(xxdは,MinGW等をインストールすると使えます。)
"バイナリ編集(xxd)モード(vim -bでの起動,もしくは *.binファイルを開くと自動処理する) augroup BinaryXXD autocmd! autocmd BufReadPre *.bin let &binary =1 autocmd BufReadPost * if &binary | silent %!xxd -g 1 autocmd BufReadPost * set ft=xxd | endif autocmd BufWritePre * if &binary | %!xxd -r | endif autocmd BufWritePost * if &binary | silent %!xxd -g 1 autocmd BufWritePost * set nomod | endif augroup END
新しくコメントをつける