vi | ||
---|---|---|
HOME |
vi は、WINDOWS系エディタから考えると操作方法がかなり異質で、最初は非常に取っつきにくい。しかし、UNIX系OSならまず間違いなく標準装備しているし、コンソールさえ動けばまずたいてい動くので、緊急事態においても強力な味方となる。また、emacs のように保存時に文字コードを勝手にいじくろうとすることもなく、使い方さえ分かればとても「素直」なエディタだ。
このページは、普段使うであろう主要なキー/コマンドのクイックリファレンスとした。同じ機能を持つコマンドが何形式もあるが、それぞれ自分なりに使いやすい1つに絞り、機能的にも「これだけ知っていれば不自由しない」と思われるものだけに絞った。また、とにかく使えることを目的にしているので、vi と vim の区別、モードの区別もしていない。よって、コマンドの様式も敢えてごちゃ混ぜにしている。
「他にこんな機能はないのか?」と思った時にとても調べやすく、しかも広く網羅した使い方ガイドなら vim users guide (日本語) がある。さらに詳細な日本語サイトは KaoriYa.net 。
キーワード | ||||||
開く | 閉じる | 終了 | 保存 | 入力開始 | 移動 | |
選択 | コピー | ヤンク | カット | ペースト | 挿入 | 削除 |
スクロール | マーク | 検索 | 置換 | アンドゥ | やり直し | 繰り返し |
タブ | インデント | 情報表示 | 連結 | Diff | その他 |
user$ vi file file ...
次のファイル | :ne |
直前に開いていたファイル | :e # |
最初のファイル | :rew |
:e file
縦に分割 | user$ vi -o file file ... |
横に分割 | user$ vi -O file file ... |
次の窓 | Ctrl + w Ctrl + w |
上の窓 | Ctrl + w して上カーソルキー |
下の窓 | Ctrl + w して下カーソルキー |
右の窓 | Ctrl + w して右カーソルキー |
左の窓 | Ctrl + w して左カーソルキー |
高さ広く | Ctrl + w + |
高さ狭く | Ctrl + w - |
高さ最大に | Ctrl + w _ |
幅を広く | Ctrl + w > |
幅を狭く | Ctrl + w < |
幅を最大に | Ctrl + w | |
全ての窓を均等に | Ctrl + w = |
縦に分割 | :split file |
横に分割 | :vsplit file |
:q
:q!
:w
:w!
i
a
:8
0
g0
$
g$
gg :1
G :$
[[
]]
H
L
'[
`[
w
e
%
:sh
再び vi へ戻るにはターミナル上で exit
v してカーソルを移動
V してカーソルを移動
Ctrl + v してカーソルを移動
y
yy
2y して 上矢印 キーか 下矢印 キー
「ここから下へ4行を」 なら 3y して 下矢印 キー。
y$
y0
`ay`b
'ay'b
yw
3yw
d
dd
2d して 上矢印 キーか 下矢印 キー
「ここから下へ4行を」 なら 3d して 下矢印 キー。
d$
d0
`ad`b
'ad'b
dw
3dw
P
p
O
o
:r file
:r! command
例えば、 `:r! date' や `r! echo $((16*1024*1024))' (後の例はシェルがBASHの場合だが)。
例えば、連続する 4行の行頭に # を挿入してまとめてコメントアウトしたい時など。
最初の行の行頭にカーソルを置いておき、Ctrl + v ->カーソル移動 で矩形選択しておいてから、
ItextEsc
カーソル位置の次の桁にアペンドする場合は、上記コマンドの代わりに、
AtextEsc
x
s
3s
Ctrl + d
Ctrl + u
Ctrl + e
Ctrl + y
zz
ma
複数ファイル編集中にファイル間でマークを共有するには、mA のようにマークに大文字を使う。
`a
'a
regex (正規表現) については Perl のページを参照のこと。
/regex
vi 上で正規表現特殊文字をちゃんと特殊文字として使うには、バックスラッシュによってエスケープしなくてはならないものと、してはならないものがあり複雑:
| + | :要エスケープ |
^ $ . * | :エスケープ不要 |
( ) | :両方エスケープ |
{ } | :初めだけエスケープ |
[ ] | :エスケープ不要 |
というわけなので、例えば host, hist, histrory, hostory, historic などを探す場合:
/h[oi]\{1}st\(ory\|oric\)*
とコマンドしなければならない。
/regex\c
この他の検索オプションは、vi 上で :help search-pattern するとヘルプが見られる。
*
n
N
:noh
rx
:s/regex/new_chars/
:s/regex/new_chars/g
:2,9s/regex/new_chars/
g で「すべて」になるのは同様。
:'a,'bs/regex/new_chars/
範囲内の各行で最初に見つかったマッチだけ置換される。範囲内のすべてのマッチヶ所を置き換えたいなら g を付ける。
:.,$s/regex/new_chars/
:0,.s/regex/new_chars/
:%s/regex/new_chars/g
なお、範囲を指定しての置換は、 V による選択に続けて実行することも可能。繰り返し方についてはこちら。
~
Ctrl + v カーソル移動 で矩形選択しておいてから、
ctextEsc
:u
Ctrl + r
.
&
>>
<<
ホームディレクトリにある .exrc (なければ作る) で設定を調整することができる。
表示上のタブ幅を4文字相当に設定
set tabstop=4
>> や << の際のインデント幅を4文字分に設定
set shiftwidth=4
自動インデントを有効にする
set autoindent
:nu
:file
q: | 別窓表示 |
: して上矢印 | インライン表示 |
q/ | 別窓表示 |
/ して上矢印 | インライン表示 |
user$ vim -d [-o] file file user$ vimdiff [-o] file file
上記どちらでも可。既定では編集画面が縦に割れる。-o オプションを使うと横長に割れる。
:[vertical] diffsplit file
既定では画面が横長に割れる。縦に割るには vertical を入れる。
]c
[c
zR
zM
zo
zc
フォーカスのある方からない方へ反映。相違箇所ブロック内にカーソルのある状態で、
:diffput
フォーカスのない方からある方へ反映。相違箇所ブロック内にカーソルのある状態で、
:diffget
手動で内容を編集した場合などに、差分情報を採りなおすには
:diffupdate
J :j