ViEditor

提供: MacWiki
2007年11月13日 (火) 16:42時点における221.171.242.108 (トーク)による版

移動: 案内検索

vi エディタ

UNIX の世界で Emacs と双璧をなす高機能なテキストエディタ。Mac OS X にも標準でインストールされています(「ぶいあい」と発音)。 ex (ed)というラインエディタをスクリーンエディタに拡張したものです。

Emacs よりも動作が軽く、ほとんどの UNIX 系OSにインストールされていることなどから、Emacs よりも vi を好むユーザも数多くいます。ただし、操作法には非常に癖があり、テキストエディットや Jedit、mi などのエディタしか使ったことのないユーザはきっと戸惑うでしょう。

現在ではオリジナルの vi ではなく,その機能拡張版である vim (Vi IMprove)が使われることが多いようです。Mac OS X にインストールされているのも vim で,vi コマンド(/usr/bin/vi)は /usr/bin/vim へのシンボリックリンクになっています。

尚、GVIMというGUIなviも存在します。

  • 余談ですが、Emacs と vi ではどちらが勝れているか、という話題は、unix ユーザの多いところではしない方が無難です。今はそうでもないかも知れませんが、(たとえ純粋な質問であっても)激しい言い争いになりがちですので。

モード

vi には「コマンドモード」「インサートモード」の2つのモードが存在します。 vi 起動直後は「コマンドモード」になっています。 通常、文字を入力するためには「インサートモード」に移行しなければなりません。

「インサートモード」への移行にはいくつかの方法がありますが、i コマンドもしくは o コマンドを使うことが多いでしょう。

「インサートモード」から「コマンドモード」への移行は エスケープキーを押します。

また、vi は ex の拡張であるため ex の備えるコマンドをすべて実行可能です。 ex コマンドは「コマンドモード」で `:' を入力後に指定できます。 このため、「コマンドモード」で `:' を入力した状態を「ex モード」と呼称する場合もあります。

コマンドモードでのコマンドの入力規則

コマンドモードでの入力には一つの規則が存在します。 それは、

[count]command[motion]

です。

count は、command を繰り返す回数。 motion は、command を適応する範囲で、移動系コマンド、検索系コマンドが使用できます。

例えば、カーソル位置から3つの単語を削除するには、

d3w

あるいは

3dw

となります。

上は、3つの単語(3w)を削除(d)。下は、単語(w)を削除(d)を3回と解釈されます。

もちろん command には「移動系コマンド」も使用できるので

3j

とすれば3行下にカーソルが移動されます。

以降、未稿。 誰か書いて。

exモードでのコマンドの入力規則

exモードでの入力にも規則が存在します。 それは、

:[address]command

です。

:1,27s/hogehoge/fugafuga

この例では1行目から27行目にs(substitute)置換コマンドを用いてhogehogeをfugafugaに変えます。また%などの全ての行を表すものもあります。このexモードはstream editerのsedと同じコマンドであるので、学習しておいて損はないでしょう。

コマンドモードのコマンド一覧

現在は vi のコマンドのみを記しています。vim などの派生エディタの固有コマンドを記す場合はその旨を記入してください。

移動系コマンド

キー 機能
j ↓カーソルを下に
k ↑カーソルを上に
h ←カーソルを左に
l →カーソルを右に
w カーソルを次の単語に移動
W カーソルを次の単語に移動(記号なども単語の一部と見なす)
e カーソルを次の単語の末尾に移動
E カーソルを次の単語の末尾に移動(記号なども単語の一部と見なす)
b カーソルを前の単語に移動
B カーソルを前の単語に移動(記号なども単語の一部と見なす)
ge カーソルを前の単語の末尾に移動
gE カーソルを前の単語の末尾に移動(記号なども単語の一部と見なす)
0 カーソルを現在の行の最初の非空白文字に移動
^ カーソルを現在の行の先頭に移動
$ カーソルを現在の行の末尾に移動
- 一つ上の行の最初の非空白文字に移動
+ 一つ下の行の最初の非空白文字に移動
[count]gg count 行に移動。count が指定されなければ最初の行に移動
[count]G count 行に移動。count が指定されなければ最終行に移動
H 画面に表示された最上の行に移動
M 画面に表示された中央の行に移動
L 画面に表示された最下の行に移動
mx 現在のカーソル位置にマーク x を付ける。x は任意のアルファベット
`x マーク x に移動
'x マーク x がある行の先頭に移動
`` 直前のマークあるいは文脈に移動
'' 直前のマークあるいは文脈のある行の先頭に移動
(追加していきましょう)

編集系コマンド

キー 機能
i カーソルの位置に文字を追加
I 現在の行の先頭に文字を追加
a カーソルの位置の後ろに文字を追加
A 現在の行の最後に文字を追加
o 現在の行の下に空行を作り、その行にカーソルを移し「インサートモード」に移行
O 現在の行の上に空行を作り、その行にカーソルを移し「インサートモード」に移行
x カーソルの位置の文字を削除
r カーソル位置の文字を書き換える
c 変更
dd 行を丸ごと削除
D カーソル位置から行の最後まで削除
J 現在の行と次の行を結合
u アンドゥー
y ヤンク(コピー)
yy 行をヤンク
Y 行をヤンク
p 下の行にペースト
P 上の行にペースト
ZZ ファイルを保存して終了
(追加していきましょう)

検索系コマンド

/pattern カーソル位置から後ろにある正規表現 pattern を含む行に移動。このコマンドは最後に[ENTER]の入力が必要
?pattern カーソル位置より前にある正規表現 pattern を含む行に移動。このコマンドは最後に[ENTER]の入力が必要
n 直前の /, ? コマンドを繰り返す
N 直前の /, ? コマンドを方向を逆にして繰り返す
fx 現在行のカーソルより後ろにある文字 x に移動
Fx 現在行のカーソルより前にある文字 x に移動
tx 現在行のカーソルより後ろにある文字 x の一つ前に移動
Tx 現在行のカーソルより前にある文字 x の一つ後ろに移動
; 直前の f, F, t, T コマンドを繰り返す
, 直前の f, F, t, T コマンドを方向を逆にして繰り返す
(追加していきましょう)

画面のスクロール系コマンド

^F ページダウン
^D 半ページダウン
^E カーソル位置を維持したまま1行上スクロール
^B ページアップ
^U 半ページアップ
^Y カーソル位置を維持したまま1行下スクロール
z[ENTER] カーソル位置の行を画面最上部に移動
z. カーソル位置の行を画面中央に移動
z- カーソル位置の行を画面最下部に移動
(追加していきましょう)

ex コマンド

キー 機能
:w ファイルを保存
:w filename ファイル「filename」にバッファを保存
:e filename ファイル「filename」を編集
:e! 最後に保存した状態に戻す
:q 終了
:q! ファイルを保存せず終了
:wq ファイルを保存して終了
:x 必要があればファイルを保存して終了(未編集であれば保存しない。つまりファイルの更新日が変わらない。)
:s/pattern/replace/ 現在行の最初の正規表現 pattern をreplaceに置換する。
:s/pattern/replace/g 現在行のすべての正規表現 pattern をreplaceに置換する。
:%s/pattern/replace/g すべての正規表現 pattern をreplaceに置換する。
:list 非表示文字を表示。ex.) タブは^I。改行文字は$
(追加していきましょう)


viを使う最低限の知識

  • 困ったときはescでコマンドモードに入る
  • 保存しないで終了は、コマンドモードで :q!
  • 保存して終了は、コマンドモードで :wq
  • コマンドモードでh, j, k, lを使った移動になれる(要練習)
  • インサートモードに入るにはi

参考ページ

  • 「viエディタ」

http://www.stackasterisk.jp/tech/engineer/vi01_01.jsp

Wiki内の関連ページ