困った時のための基礎知識

はじめに

ここでは,操作に困った時の対処に関することと 不意の事故などで編集内容を失うような時に備えたり,復旧する方法を 書きます

オンラインヘルプ

JVimでは簡単なヘルプを表示することができます
gh または :help :h などでヘルプの目次画面が出ます. (Return) を押せば通常編集画面に戻れます. ヘルプが出ずに,警告メッセージなどが出る場合は, おそらくヘルプの表示内容が書かれたファイルが正しく設定されていません

ヘルプ表示内容は,実は単なる普通のファイルで,このファイルの位置は

set helpfile=/usr/local/text/vim.hlp

のように helpfile オプションで設定します

ヘルプ表示が文字化けなどをしていた場合は,このファイルの文字コードを適切な ものに変換するだけでちゃんと表示されるようになると思います. 目次から 特定の場所にジャンプするために,制御文字が入っていますが,その他の点 では, 通常のテキストファイルですので,JVimで開いて編集もできます
ヘルプ内容は一部が英語だったりしますが, 自分の好きなように編集して使うのも自由に できます

操作の取り消しと再実行

特に初心者のうちは,何か知らないキーを押してしまって(良く分からないけども)変な ことをしてしまうこともありますよね

とりあえず Esc キーを念のために押してコマンドモードであることを確信 してから… CapsLock キーを押してしまっていないだろうか ?という点をチェックして みましょう. JVimの場合は,大文字と小文字のコマンドは全く違う意味のコマンド であることが多く, 小文字のつもりで大文字を打ってしまうと,たちまち混乱するからです

また, 「どのキーを押しても全く反応が無い!!」場合は, まず CONT-Q を押してみましょう. これでなおるのでしたら, おそらく 知らないうちに CONT-S を押してしまったからだと思います

変な変更をしてしまった場合は

u

で,最後に行った変更を取り消すことができます
uuuuuuuuuuu のように何度も u を連打すれば, 押しただけ 前の操作にまでさかのぼれます. (何回前の操作にまで戻れるかは設定によりますが) 間違った操作や何か変なことをしてしまった時に使います

ついでに U(大文字のU)コマンドも覚えておきましょう. これは行全体に行った 変更をすべて取消します

操作の取り消しの u を何度も押しすぎて,「やっぱり取り消しは取り消したい」と 思ったら,「再実行」コマンド
CONT-R を押すと,押すごとにuコマンドの取り消しを戻す事ができます

この u CONT-R は,間違いの修正など以外でも 便利に使う事ができます. たとえば,ある変更を「試しにやってみて」コマンドが どのように実行されるのかの テストをしたり ,実行前と実行後を 比較するために ,戻ったり再実行したりを何度も打ちながら見ることができます
このように, 大胆な変化が起きるようなコマンドも,安心 して試すことができます

自動バックアップについて

JVimには,ファイルを上書きセーブする時に,書かれる前のファイルの名前に変更を 加えて保存しておいてくれる機能があります. 安全のために設定しておくのも よいと思います

まず :set backup のように backup オプションが設定されている時は, 存在しているファイルを上書きする時に, 上書き前のファイルに拡張子 .bak を付け加えて保存しようとします. よって,この中身は常に「最後の書き込み操作を する前のファイルの内容」です

さらに :set patchmode=.org のように patchmode オプションが 設定されていれば,編集を開始する時に読み込んだ状態のファイルに, 指定した拡張子をつけて保存 しておいてくれます. この例の場合なら "〜.org"ファイルを編集開始時に作ってくれます. こちらは,編集中に 何度書き込み操作をしても,「編集開始の時の内容」が残ります.
ちなみに patchmode オプションは,拡張子となる「文字列」を設定するオプション ですが,特に何も設定していない場合は からっぽの文字列ということになり, この時には,編集開始時のファイルは作られず この機能は働きません

もちろん,backupとpatchmodeの設定は両立できますので,両方とも設定した場合は 〜.bakと〜.orgのように二つのファイルをとっておくことができます

バックアップファイルは作っておいて安心したいけど,編集後に"〜.bak"ファイル が残るのは嫌だという人もいると思います. こういう時のために backup オプションを設定する代りに
:set writebackup のように writebackup オプションを設定しておくと, 「編集作業中のみ」〜.bakファイルが存在しているようにできます. なお "backup"オプションが設定されていれば, writebackup オプションは 設定されていても解除されていても関係なく "〜.bak"ファイルを残しますので注意

また,いろいろなディレクトリに"〜.bak"ファイルが散らかるのが嫌だという人のために バックアップファイルを置くディレクトリを設定できます. たとえば
:set backupdir=>/tmp のように, backupdir に バックアップファイルを置くディレクトリを設定します. この時, :set backupdir=/tmp のように単なる=文字だけの指定で, 先頭に">"文字 をつけなかった場合は, 「バックアップを書き込むことが 出来ない時だけ」指定のディレクトリに"bak"を作るだけで, それ以外の場合は, 依然として元ファイルと同じ場所に作ろうとする ので注意

手動で手軽にバックアップ

もしもの場合に備えて,自分でこまめにセーブするように心がけるというのも大事です
単なるセーブは,

:w

ですが, このコマンドを打つ時に,ファイル名をつけて
:w %.tmp とすれば,「(編集中のファイル名).tmp」の名前で セーブできます. つまりファイル名指定時に,文字 % 編集中のファイル名 の意味で使えます. さらに :w %<.tmp とすれば, 「(編集中のファイル名から 拡張子を取り除いた名前 ).tmp」の名前でセーブ できます. つまり %< で,拡張子を取り除いた名前の意味 があるのです. 知っていると便利です

ついでに, :files コマンドなどで, # 表示 のあるファイル(交換可能ファイル)名は # という名前で代用できます
:e # と打つと,ファイルが切り替わるのは, じつはこれを利用しているからです. もちろん番号をつけて #3 なら, ファイルリスト3番のファイルの意味となります. そしてこれも #4< などと拡張子削除記号をつけて使えます. ファイルリストについての解説も 読んで使いこなしましょう !

Swapファイルとは

JVimは,突然の事故に備えて Swapファイル という,操作内容やファイル内容をまとめて 記録したファイルを作っています. 普段は,特にこのファイルの存在を意識することは 無いのですが, 復旧時には役立ちます . ちなみにこのファイル内容はバイナリで 通常は自動的に作られ,JVim終了時には自動的に消されます

復旧に必要なファイルなので,突然のマシンクラッシュや JVimがバグなどで終了してし まった時には,"〜.swp"のような名前のファイルが残っていると思います
ちなみに,現在使用中のSwapファイル名は :sw コマンドで見ることができます

Swapファイルが置かれる場所は,
:set directory=>/tmp のように, backupdirオプションと 同じような書式で設定できます. そして通常は,「200文字打つごと」あるいは 「4秒以上何も操作しなかった時」に Swapファイル内容を更新します. この 文字数や秒数は

:set updatecount=400

:set updatetime=7000

のように変更できます.この場合なら400文字,7秒の意味となります. 時間の 単位は 1000分の一秒単位なので 1000で一秒の意味なのです

「自分でわざわざSwapファイルを書き込み更新したい」という用心深い人は :pres と打てば即座に更新します
さて,これで備えについて説明しました. で,肝心の復旧方法を説明します

不意の事故などで突然編集内容ごと失った後で, JVimに -r オプションをつけて,復旧させたいファイル名を打ちます
jvim -r filename という具合です. 多くの場合はこれで事故当時の 編集内容に近いものがよみがえると思います. Swapファイルの位置や名前の都合で これでうまくいかない場合は直接Swapファイルの名前を指定して
jvim -r filename.swp としてみて下さい. これでもダメなら Swapでは復活できないということになります
このようなSwapファイルの目的を理解していれば,RAMディスクなどの内容が消えて しまう媒体にSwapを作っても意味があまりないことがわかると思います

また,とても遅い記録媒体の中にあるファイルの編集をしている場合などは「多少 危険でもいいからSwapを作らない設定にしたい」人もいると思います.
jvim -n filename のように -n オプションをつけて 起動した場合は,Swapファイルを作らずに編集します. フロッピーディスクなどを 一時的に使用する場合に,遅いディスクアクセスを避けられます. また これを初期設定としてSwapを使わないようにしたいのであれば

set updatecount=0

とすれば Swapを作らないように設定できます

現在の状況を知る

おまけとして,現在の状況を知るコマンドを書きます

:f ("file"の略) または :b ("buffer"の略) または CONT-G で, ファイル名 , 変更中かどうか , 行番号 , 総行数 , カーソル位置の文字の情報 が表示されます

:files とすると,複数のファイルを読み込んだ時の それぞれのファイル情報 を一覧できます. 名前指定時に,自動的にファイルにつけられた番号,変更中かどうか, 読み込まれているかどうか…などの情報を一覧表示するので,複数ファイルを扱う時は よく使います. このコマンドの詳細は「複数ファイルの扱い」の解説文章のほうで 説明しています

いろいろなディレクトリにあるファイルを複数読み込んでいる時は 「編集中のファイルをフルパスで表示させたい」と思うことも 多いのではないでしょうか. CONT-G の 表示だと, パス名は表示されないので困りますよね. こういう時は
4CONT-G などと打ってみましょう. 先頭の数字は実は何でも良いのですが CONT-G コマンドは先頭に数字をつけると数値に関係なく, パス名つきで 編集中のファイル名を表示します


前項目, 「挿入モード時のコマンド」へ

目次へ

次項目, 「Visual範囲指定の使い方」へ