FreeBSD vi 活用概論第1

Last Update (2010/03/27 01:04:46)

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [FreeBSD] [FreeBSD LINK] [検索] [高速検索]

ページ内目次


vi 基本キーバインド - level 1

viはUNIXの黎明期から存在し、今なお使い続けられているすごいエディタである。 (ちなみに、本当の黎明期にはexというラインエディタが使われていた。MS-DOS ver. 3.x の EDLIN みたいな行編集エディタだったようだ。) UNIXと名前のつくものなら、、emacs/mule/nemacsはインストールされていなくともviは必ずあるといっても過言ではない。 私は普段mule派なのだが、muleがインストールされる前の状態のシステム設定を行うときや、わざわざ重いmuleを起動するまでもない時にはviを利用している。
ここでは、必要最小限のviの使い方を紹介する。

毎回「行コマンドモード」と書くのも面倒なので(^^;)、: を入力して行コマンドモードにしてから入力するコマンドは、:w のように記載することにしよう。 上で紹介した4つのコマンドをもう一度簡略記法で書いておく。

以上で、最小限のviコマンド(約10個)は終了だ。 /etc/rc.confの修正くらいなら、以上のコマンドを駆使して何とかなるだろう。 もし、今挿入モードになっているのか、コマンドモードになっているのか、行コマンドモードになっているのかを忘れてしまったら、とりあえずESCキーを連打しよう。 そうすることで、確実にコマンドモードになるはずだ。
関連性の無い妙なコマンドが沢山あるように感じるので、覚えるのがたいへんだと思う。 必要なコマンドから徐々に覚えていくと良いだろう。

FreeBSDページの目次に戻る

vi キーバインド - level 2

上で紹介した level 1 のキーだけでもほとんどの修正作業は可能だが、やはり多少不便である。 viを使っていて欲が出てきたら、以下のコマンドを覚えると良い。 以下に示すコマンドは、すべてコマンドモードから入力するものだ。

これくらい知っていれば、緊急避難的にviを利用するには十分だろう。
ちなみに、Ctrl FやCtrl B, j, k, Gなどのキーバインドは more や less でも採用されている。 覚えておくと意外なところで便利だ。

FreeBSDページの目次に戻る

vi キーバインド - level 3

ここでは、検索コマンド、カット&ペーストコマンドなどを紹介する。 ここにあるコマンドまでを覚えれば、結構便利に vi を利用できるようになるはずだ。

私が知っているviのコマンドは、だいたいこのあたりまでである(汗;)。 これ以上複雑な操作をする場合は、muleを使ってしまうのだった。

FreeBSDページの目次に戻る

vi キーバインド組み合わせ - level 4

viの真価は、コマンドの組合せでさらに柔軟なテキスト編集機能を提供している所にある。 例えば dd (カーソルのある行を削除してバッファにコピー)として紹介したコマンド d だが、以下のように組み合わせて指定することができる。 jman vi とすると、 d コマンドの説明として下記のように表示される。

       [buffer] [count] d motion
              範囲指定した文書を削除します。
    

つまり、dコマンドは

のように、組み合わせて利用できるのだ。

ついでに書いておくと、 yy コマンド (コマンドモードから、カーソルのある行をバッファにコピーする) として紹介した y コマンドも、dコマンドと同じような指定ができたりする。 つまり、 y3j でカーソル位置から3行下までの文字をバッファにコピーする、という意味になるのだ。

また、ファイルの最後の行に移動するコマンドとしてvi 基本キーバインド - level 1で紹介した「G」コマンドだが、このコマンドの前には行番号を指定できる。 「100G」などと入力すると、100行目に移動するのだ。

コマンドの組み合わせを自由自在に使いこなせるようになったら、あたなは無敵のvi使いとして恐れられるようになるだろう。

FreeBSDページの目次に戻る

vi キーバインド - level 5

ここでは、私が覚えている途中のviキーバインドを紹介する。

余談だが、セットマークコマンドとマーク位置にカーソル移動コマンドがあるので、viでもemacs風味にカット&ペーストできる。

  1. maコマンドで、カーソル位置記憶
  2. カーソル移動して範囲指定
  3. カーソル移動してペースト位置まで移動

ここまで覚えると、viが便利なものになってきたような気がする。(^^)

FreeBSDページの目次に戻る


vi コマンド map - level 6

ここでは、viでキーボードマクロを定義する方法を紹介する。 ここで言うキーボードマクロとは、ある決まった操作を繰り返して行いたい場合に特定のキー操作(コマンド)を覚えておいて、後で同じ操作を再度実行できるというものを想定している。
viでは、自分で一連の操作コマンドを定義したい場合には :map コマンドを利用する。

:map キー 定義内容
    

などとすると、とあるコマンドに一連のコマンドを割り当てることができる。 たとえば

:map v dwElp
    

などと定義しておくと、viのコマンドで v を押すとカーソル位置にある単語と、その右側にある単語を入れ換えることができるようになる。
また、:map のみ入力すると、現在定義されているコマンドの一覧が表示される。
デフォルトのviで、コマンドモードで利用されていない(未定義)のコマンド文字には

というものがあるらしいので、普段は g か v あたりをmapで利用することになるだろう。

便利なことに(ある意味では恐ろしいことに)、既に定義されているコマンドも :map で再定義できるようなので、 :map x l などとすると、 x で左カーソル移動などというわけのわからない動作をさせることもできるようだ。

FreeBSDページの目次に戻る

viコマンド 置換 - level 7

ここでは、viで置換を行う方法を紹介する。

余談: 普通のエディタの入門書では、検索と置換はだいたいとなりに書いてあるというのが相場だ。 ただ、私の場合はまじめに置換を行う場合はmuleを使ってしまうので、viの置換を覚えるのがずいぶんと遅くなった。 そんなわけで、置換コマンドはlevel 7にて初登場ということになった。

実は、sコマンドも影響範囲を指定することができる。

viにも置換する前に確認する方法がある。 s(置換)コマンドのオプション指定部分(一番右側)にcをつけると、置換前に確認してくるようになる。

上で紹介している一括置換コマンドとはちょっと違うが、現在のカーソル位置からの置換コマンドもある。

上の二つの例は「c」という置換入力コマンドに「w」や「$」というカーソル移動コマンドを組み合わせたものだ。 cwは比較的よく使うので、覚えておくと便利だ。

FreeBSDページの目次に戻る

viコマンド マクロ定義 - level 8

ここでは、viでマクロを定義する方法を紹介する。 mapコマンドはvi コマンド map - level 6で紹介したが、今回はバッファを使ったマクロ定義方法である。

何度も同じような作業を繰り返していると、ついつい眠くなるものだ。 決まりきった作業なら自動化を考えるべきだろう。 そんなわけで、ある程度まとまった操作を一発でできるようにする方法を示す。

バッファの内容は保存されないので、viを終了したら折角のマクロが消えてしまう。 傑作マクロができたら、保存したくなるのが人情だ。 だが、viにはバッファの内容を直接ファイルに保存する方法はないみたいだ。 一応、下のようにすればバッファの内容を保存できるが結構面倒だ。

そのうちに、 ‾/.exrc に何か指定する方法を調査する予定だ。

FreeBSDページの目次に戻る

総集編 : vi コマンド - カーソル移動

以上で入門編は終了することにして、以下ではコマンドの種類ごとに編集して vi のコマンドを紹介する。 viに慣れて来たら、コマンドは種類ごとに分類されているほうが探しやすい。

h
カーソルを左に1文字移動
j
カーソルを下に1文字移動
k
カーソルを上に1文字移動
l
カーソルを右に1文字移動
w
カーソルを次の単語の先頭文字の上に移動
b
カーソルを前の単語の先頭文字の上に移動
e
カーソルを単語の末尾文字の上に移動
0
カーソルを行の先頭に移動
$
カーソルを行の最後に移動
:n
行番号 n にジャンプ
G
ファイルの最終行にジャンプ

FreeBSDページの目次に戻る


総集編 : vi コマンド - 画面スクロール

CTRL F
順方向の画面にスクロール
CTRL B
逆方向の画面にスクロール
CTRL D
順方向の画面に半画面分スクロール
CTRL U
逆方向の画面に半画面分スクロール
CTRL E
順方向の画面に1行分スクロール
CTRL Y
逆方向の画面に1行分スクロール
z.
カーソルのある行を画面の中央に表示するようにスクロール
FreeBSDページの目次に戻る

総集編 : vi コマンド - 検索

/
順方向に検索
?
逆方向に検索
n
直前の検索を同じ方向に繰り返す
N
直前の検索を逆方向に繰り返す

FreeBSDページの目次に戻る


viの設定ファイル

プログラムを書く時に便利なviの設定を記載する。 viは起動時に ‾/.exrc という設定ファイルを読み込む。 FreeBSDの標準viはviクローンの中でも nvi というプログラムなので、‾/.nexrcという設定ファイルも読み込む。 以下の設定は ‾/.nexrcに書いておくと便利かも。

set autoindent
自動インデントする。
前の行にあわせて、改行を入力した時にインデントしてくれる。
set exrc
ホームディレクトリの.exrcではなく、カレントディレクトリの.exrcを読み込むようにする。
各ディレクトリで設定が違う場合(TABの幅とか)は便利。
set shiftwidth=8
<< コマンドや >> コマンドでインデント移動する量を指定
set tabstop=8
TABを何カラムに設定するかを指定する。
set showmatch
プログラム中の( ) や { } の対応を表示してくれるように設定する。
set number
左側に行番号を表示するようにする。
set nonumber
左側に表示されていた行番号を表示しなくする。
X11上でコピー&ペーストする場合に便利(笑)

なお、上のコマンドは .exrc に書くだけではなく、 viの「行入力モード」からも入力できる。


Copyright(c) 1996,97,98,99,2000,01,02,03,04,05,06,07,08,09 George(小濱 純). All rights reserved.
私の作成したページへのリンクはご自由にどうぞ。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。
メール本文に 6020-5440-3372 と書いて頂くと、SPAMフィルタを通過できます(2009-06-14から2009-12-31まで)。

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [FreeBSD] [FreeBSD LINK] [検索] [高速検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>
(I am using white list SPAM filter. To avoid it, please write 6020-5440-3372 in mail body. This key word is valid since 2009-06-14 until 2009-12-31.)