29.自分のためのvi講座その2(2003/04/30)
以前、すごい投げやりな講座をやりました。(笑)
しかし、今回は違います。
本格的です!!
というわけで、きっちりまとめたので、公開します。
これで、あなたもviマスター!!
※IEじゃないと、見辛いかもしれません。
目次
- viの起動方法
- 編集モード&挿入モード
- viの終了&編集ファイル保存
- カーソル&ページの移動
- 文字&行の削除
- 行のコピー&ペースト
- 文字&行の置換
- 文字列検索
- 操作のやり直し(UNDO)
- その他
- あとがき
viの起動方法
hogehoge というファイルを編集したい場合は、こんな感じで起動できまふ。
%vi hogehoge
編集モード&挿入モード
編集モードとは…
カーソルを移動したり文字を削除したり置換したり検索したり…なモード
挿入モードとは…
読んで字の如く、文字を挿入するモード
- 編集モードから挿入モードへ
- i:カーソル位置に文字を挿入
- R:カーソル位置に文字を挿入(同上)
- a:カーソルの右側に文字を挿入
- A:カーソル行末に文字を挿入
- o:カーソル位置の次の行に文字を挿入
- O:カーソル位置の前の行に文字を挿入
- cw:カーソル位置の1文字を変更しながら文字を挿入(Insertっぽい機能)
- c$:カーソル位置から行末までの文字すべてを変更しながら文字を挿入(Insertっぽい機能)
- 挿入モードから編集モードへ
- [ESC]:とりあえず何回押しても良いので、どっちのモードかわからなくなったら連打^^;
それでは、編集モードで使うコマンドを紹介していきます。
挿入モードで入力しても、ただ文字が入力されるだけなんで意味ないよん。
viの終了&編集ファイル保存
終了したいとき、保存したいときは編集モードで以下のコマンドを入力すると実行可能です。
- :q[ENTER]:保存せずに終了
- :q![ENTER]:編集結果も保存せずに終了(オレ的には完全終了したいときはこっちを使う)
- :w[ENTER]:編集内容を上書き保存
- :w FileName[ENTER]:編集内容を別ファイル名(FileName)で保存
編集しているファイル名と同じ場合、上書き保存
- :wq[ENTER]:編集内容を上書き保存して終了
カーソル&ページの移動
カーソルの移動は、ホームポジションでキーが打てれば、すげぇやりやすい位置にあります。
環境によっては、矢印キーでも代用はできるが、オレは嫌い。
- h:左に1文字移動
- l:右に1文字移動
- k:上に1文字移動
- j:下に1文字移動
- w:次の単語へ移動
- b:前の単語へ移動
- 0:行頭へ移動
- $:行末へ移動
- [Ctrl]+f:1ページ進む
- [Ctrl]+b:1ページ戻る
- 1G:文頭へ移動
- G:文末へ移動
- nG:指定行(n行)へ移動
- :n[ENTER]:指定行(n行)へ移動(同上)
文字&行の削除(カット)
消しまくれっ!!
- x:カーソル位置の文字を1文字削除
- nx:カーソル位置から右側の文字をn文字削除
- X:カーソル位置の左の文字を1文字削除
- nX:カーソル位置から左側の文字をn文字削除
- dd:カーソル行を削除(カット)
- ndd:カーソル行からn行を削除(カット)
- d$:カーソル位置から行末まで削除(カット)
- D:カーソル位置から行末まで削除(カット)(同上)
- J:行末の改行を削除(次行をカーソル行と結合するともいふ)
行のコピー&ペースト
コピペってのは、よく使います。
さっき紹介した”dd”や”x”なども、言わば”カット”なので、バッファに保存はされるんですけど。
ところで vi って2、3つの行や文字をバッファに保存ってできましたっけ?
Windows でもそういうソフトを入れないと、クリップボードには1つしか保存されないしなぁ〜。
- yy:カーソル行をコピー
- Y:カーソル行をコピー(yと同じ)
- nyy:カーソル行からn行コピー
- p:コピーした行をカーソル行の下にペースト
文字&行の置換
置換コマンドが楽だったら、かな〜り便利なのだが…。
「全置換したいとき、どーするんだっけ?」と結構悩みがち。
- :s/OriginalWord/ExchangeWord/[ENTER]:カーソル行の先頭のOriginalWordのみExchangeWordへ置換
- :s/OriginalWord/ExchangeWord/g[ENTER]:カーソル行の文字列すべてにてOriginalWordからExchangeWordへ置換
- :n, ms/OriginalWord/ExchangeWord/[ENTER]:n行からm行の範囲の先頭のOriginalWordのみExchangeWordへ置換
- :n, ms/OriginalWord/ExchangeWord/g[ENTER]:n行からm行の範囲の文字列すべてにてOriginalWordからExchangeWordへ置換
- :1, $s/OriginalWord/ExchangeWord/[ENTER]:文章内すべての範囲の先頭のOriginalWordのみExchangeWordへ置換
- :1, $s/OriginalWord/ExchangeWord/g[ENTER]:文章内すべての範囲の文字列すべてにてOriginalWordからExchangeWordへ置換
- :%s/OriginalWord/ExchangeWord/g[ENTER]:文章内すべての範囲の文字列すべてにてOriginalWordからExchangeWordへ置換(同上)
文字列検索
かな〜り多用することになると思われる文字列検索。
2種類の方法を使い分けましょう。
- /SearchWord[ENTER]:SearchWordという文字列を行末に向かって検索(行頭付近ならばこれを使用)
nで次の候補を行末に向かって検索、Nで次の候補を行頭に向かって検索
- ?SearchWord[ENTER]:SearchWordという文字列を行頭に向かって検索(行末付近ならばこれを使用)
nで次の候補を行頭に向かって検索、Nで次の候補を行末に向かって検索
こんな感じで2種類の方法で、”n”と”N”の用途が変わってきます。
操作のやり直し(UNDO)
そういえば、アンドゥって可愛いだけの二人組みの女芸人がいたような…。
もう消えちゃたみたいだが。(藁)
- u:直前の操作の取り消し(Windowsでいうところの”元に戻す”)
- U:行全体としての操作の取り消し(行を移動しちゃうと無効)
その他
いろいろ触りながら見つけちゃいました。(笑)
- .(ドット):直前の操作の繰り返し
- :r hoge[ENTER]:あるファイルhogeの内容をカーソル位置の次の行に挿入
- :! command[ENTER]:OSのcommandコマンド(例えば、UNIX系だとmore hoge.txtとか)を実行し、その結果をカーソル位置の次の行に挿入
- :map key command[ENTER]:編集モードで実行したいcommand(ddなど)を指定したKEYに割り当てる
[ESC]などの特殊キーを含めるときは、直前に[CTRL]+vを入力する
xなどのvi コマンドを名前をkeyに割り当てた場合は、mapによって割り当てられた機能が優先される
- :map! key Word[ENTER]:文字列Wordをkeyへ割り当てる
挿入モードでこの割り当てたkeyを入力すると、文字列Wordが入力される
- :unmap [Ctrl]+v:mapで割り当てたキーを無効にする
- :unmap! [Ctrl]+v:map!で割り当てたキーを無効にする
- :msh[ENTER]:vi を終了させずにシェルを起動
- [Ctrl]+z:vi を一時停止し、バックグラウンドに移動
このあとのコマンドは、vi 全体の設定に関するコマンドです。
環境設定ファイルとして、ルートディレクトリに”.exrc”というファイルを作って、同様に書き込んでおくと、vi 起動時に環境設定用ファイルとして読み込まれます。
それでは、代表的なモノを紹介。
- :set number[ENTER]:行番号の表示(set nonumberとすると非表示)
- :set all[ENTER]:現在設定されているモードを表示
- :set autoindent[ENTER]:インデントを揃える(set noautoindentとするとインデントを揃えなくなる)
- :set ignorecase[ENTER]:大文字、小文字を区別
- :set number[ENTER]:行番号の表示(set nonumberとすると非表示)
- :set readonly[ENTER]:読む込み専用になる(書き込んだり編集した結果を保存できない)
- :set report=n[ENTER]:設定されたn行数以上の変更があった場合、表示する
- :set showmode[ENTER]:モードの表示(編集モードor挿入モード)
- :set showmatch[ENTER]:括弧の確認
- :set tabstop=n[ENTER]:タブ幅の指定(nにカーソル何個分にするか数を入れる)
- :set report=n[ENTER]:設定されたn行数以上の変更があった場合、表示する
それぞれ、noを付けると(set nonumberやset noautoindent)、その設定は無効になります。
例えば、set nonumber だと行番号は非表示になります。
次に.execファイルの記述例を表示してみます。
〜.execファイルの記述例〜
set autoindent
set number
set showmode
set showmatch
set tabstop=4
|
管理人の戯言トップ |
ホームに戻る |