vim-jp / vimdoc-ja / usr_23

usr_23 - Vimドキュメント

メインヘルプファイルに戻る
usr_23.txt    For Vim バージョン 8.2.  Last change: 2020 Dec 19

                     VIM USER MANUAL - by Bram Moolenaar

                           特殊なファイルを編集する


この章では特殊なファイルの編集について説明します。圧縮ファイルや暗号化された
ファイルを編集できます。多少不便ですが、バイナリファイルも編集できます。イン
ターネット越しにファイルアクセスする方法も説明します。

23.1  DOS、Mac、Unix形式のファイル
23.2  インターネット上のファイル
23.3  暗号化
23.4  バイナリファイル
23.5  圧縮ファイル

次章: usr_24.txt  効率的な入力
前章: usr_22.txt  ファイルを探す
目次: usr_toc.txt

==============================================================================
23.1  DOS、Mac、Unix形式のファイル

その昔、旧いテレタイプマシンは改行のために二つの文字を使っていました。一つ目の
文字 (キャリッジリターン。<CR>) でキャリッジを初期位置に戻し、二つ目の文字 (ラ
インフィード。<LF>) で用紙を送っていたのです。
コンピュータが登場した頃は記憶装置がとても高価だったので、改行のために二文字も
使う必要はないと考える人たちがいました。UNIX の人々は <New Line> または <NL>
を行末にのみ使用できると決めました。Apple の人々は <CR> を標準としました。
Microsoft Windows の人々は古い <CR><LF> を使い続けました。(我々はヘルプテキス
トの改行に <NL> を使用します)
このような事情により、異なるシステム間でファイルを交換するときには改行文字の非
互換が問題になります。Vim はファイル形式を自動的に認識し、それを適切に処理する
ことができます。
'fileformats' オプションを設定して使用するファイル形式を指定してください。例え
ば、最初に Unix 形式を試し、次に MS-DOS 形式を試すには、次のように設定します:

        :set fileformats=unix,dos

ファイルを開いたときのメッセージにファイル形式が表示されることがあります。シス
テム標準のファイル形式だった場合は表示されません。例えば、Unix で Unix 形式の
ファイルを編集するときに注意は必要ないでしょう。しかし、DOS 形式のファイルな
ら注意が必要です。次のようなメッセージが表示されます:

        "/tmp/test" [dos] 3L, 71C

Mac 形式なら "[mac]" と表示されます。
ファイル形式は 'fileformat' オプションに設定されます。現在のファイル形式を確認
するには、次のコマンドを使います:

        :set fileformat?

Vim では次の3つの名前が使われます:

        unix            <NL>
        dos             <CR><NL>
        mac             <CR>


Mac 形式を使う
--------------

Unix では <NL> が改行文字です。行の途中に <CR> 文字がくることは普通はありませ
ん。ただし、Vi (と Vim) のスクリプトでは <CR> 文字が使われることがあります。
Macintosh では <CR> が改行文字なので、行の途中に <NL> 文字を使うことができま
す。
つまり、<CR> と <NL> を両方含んでいるファイルは、ファイル形式を 100% 確実に判
別することはできません。
そのため、Unix では Mac 形式の改行はチェックされません。おそらく、Unix で Mac
形式のファイルを編集することはあまりないでしょう。どうしても Mac 形式のファイ
ルを使いたい場合は 'fileformats' オプションに "mac" を追加してください。

        :set fileformats+=mac

これで、Mac 形式の改行が認識されるようになります。ただし、正しく認識できないこ
とがあるので注意してください。


ファイル形式を指定する
----------------------

古き良き Vi で MS-DOS 形式のファイルを開くと、すべての行末に ^M が付きます。
(^M = <CR>)。Vim では改行が自動認識されるので、そのようなことにはなりません。
敢えて昔の動作を再現したい場合は、ファイル形式を指定してください:

        :edit ++ff=unix file.txt

"++" に続いてオプション名を指定することで、コマンドの設定を変更できます。
'fileformat' なら "++ff" です。もちろん "++ff=mac" または "++ff=dos" と設定す
ることもできます。
この方法ではすべてのオプションを設定できません。現在のところ "++ff" と "++enc"
だけが実装されています。"++fileformat" や "++encoding" のようにフルネームでも
指定できます。


ファイル形式の変換
------------------

'fileformat' オプションを使ってファイル形式を変換できます。例えば、README.TXT
を MS-DOS 形式から UNIX 形式に変換してみます。まず、MS-DOS 形式のファイルを開
きます:

        vim README.TXT

ファイル形式は自動的に認識されます。では、ファイル形式を変換しましょう:

        :set fileformat=unix
        :write

ファイルは Unix 形式で保存されます。

==============================================================================
23.2  インターネット上のファイル

誰かがあなたにメールを出しました。メールには URL が書いてあります。例:

        そのことならここに情報があったよ。
                ftp://ftp.vim.org/pub/vim/README 

他のプログラムを使ってファイルをダウンロードし、それを Vim で開いても構いませ
んが、もっと簡単な方法があります。カーソルを URL の上に移動して次のコマンドを
入力してください。

        gf

運が良ければ、ダウンロード用のプログラムが実行され、ダウンロードされたファイル
が開かれます。新しいウィンドウで開きたい場合は "CTRL-W f" を使ってください。
ダウンロードが失敗してエラーメッセージが表示された場合は、次のような原因が考え
られます。
  - URL が間違っている。
  - アクセス権限がない。
  - ネットワークがダウンしている。
  - その他。
残念ながら、エラーの原因を把握するのは非常に困難です。エラーが起きた場合は手作
業でファイルをダウンロードしてください。

インターネット経由のファイルアクセスは netrw プラグインによって実行されます。
現在、以下の形式の URL が認識可能です。

        ftp://          ftp を使う
        rcp://          rcp を使う
        scp://          scp を使う
        http://        ; wget を使う (読込専用)

Vim 自身は通信機能を持っていません。インターネットアクセスは外部プログラムを
使って実行されます。"ftp" と "rcp" はほとんどの Unix システムで利用できるはず
です。"scp" と "wget" は別途インストールする必要があるかもしれません。

":edit" や ":split" などのコマンドでファイルを開くときにも URL を指定できます。
もちろん保存もできます (http:// は不可)。

パスワードの指定方法など、詳細はnetrwを参照してください。

==============================================================================
23.3  暗号化

情報を秘密にしたいことがあると思います。例えば、生徒と共有のコンピュータを使っ
てテストを作成している場合、賢い生徒にテスト問題を盗み見られてしまうようでは困
ります。Vim の暗号化機能を使って情報を保護しましょう。
ファイルを暗号化するには、Vim の起動引数に "-x" を指定します。例:

        vim -x exam.txt

プロンプトが表示されるので、ファイルを暗号化または複号するための鍵を入力してく
ださい:

        暗号化用のキーを入力してください:

慎重に秘密鍵を入力してください。入力した文字は表示されません。代わりにスター
(*) が表示されます。入力ミスがあると大変なので、念のため、もう一度同じ鍵を入力
してください:

        もう一度同じキーを入力してください:

ファイルの編集方法は通常のファイルと同じです。秘密にしたいことを書き込んでくだ
さい。ファイルを保存すると、暗号化されて保存されます。
次にそのファイルを Vim で開くと、鍵を入力するためのプロンプトが表示されます。
既に暗号化されたファイルを開くときは "-x" 引数を指定する必要はありません。通常
の ":edit" コマンドで開くこともできます。暗号化ファイルにはマジック文字列が埋
め込まれているので、Vim は暗号化ファイルを認識できます。
他のプログラムで暗号化ファイルを開くと、ゴミが表示されます。たとえ Vim で開い
たとしても、不正な鍵を使った場合は、やはりゴミが表示されます。鍵が正しいかどう
かを判断する機能は Vim にはありません (暗号をより強固なものにするため)。


暗号化と解除
------------

ファイルの暗号化を解除するには、'key' オプションに空文字を設定します:

        :set key=

空に設定してからファイルを保存すると、暗号化されずに保存されます。
'key' オプションに鍵を設定すれば暗号化を有効にできますが、それは安全ではありま
せん。パスワードがコマンドラインに表示されるので、肩越しに盗み見られてしまいま
す。
安全に暗号化を有効にするには、":X" コマンドを使ってください。"-x" 引数を使った
ときと同じプロンプトが表示されます:

        :X
        暗号化用のキーを入力してください: ******
        もう一度同じキーを入力してください: ******


暗号化の限界
------------

Vimが使用している暗号化アルゴリズムはあまり強くありません。いたずら小僧を撃退
するには十分ですが、時間をたくさん持て余した暗号エキスパートのハックには耐えら
れません。スワップファイルとアンドゥファイルのテキストも暗号化されています。し
かし、これはブロック単位で行われているため、パスワードを解読するために必要な時
間を短縮する可能性があります。スワップファイルを無効にすることはできますが、ク
ラッシュするとあなたの作業が失われてしまいます。Vimはすべてのテキストをメモリ
内にのみ保持しているからです。バッファをアンロードした後に元に戻すことができな
いという唯一の欠点とともに、アンドゥファイルを無効にすることができます。
  スワップファイルを使用しないようにするには、コマンドラインで -n 引数を指定し
ます。たとえば、スワップファイルなしで暗号化されたファイル "file.txt" を編集す
るには、次のコマンドを使用します:

        vim -x -n file.txt

既にファイルを編集中なら、次のコマンドでスワップファイルを無効にできます:

        :setlocal noswapfile

スワップファイルが無いということは、リカバリできないということです。普段よりま
めにファイルを保存し、クラッシュによるリスクを抑えましょう。

メモリ上のファイルは暗号化されていません。権限さえあれば誰でもエディタのメモリ
を調べてファイルの内容を知ることができます。
viminfo ファイルを使っている場合、レジスタの中身が平文で保存されることにも注意
が必要です。
本気でファイルを秘密にしたいなら、ネットワークから切り離したマシンで作業し、強
力な暗号化ツールを使い、そのマシンを使わないときは金庫に入れておきましょう。

==============================================================================
23.4  バイナリファイル

Vim はバイナリファイルを編集できます。専用ツールではないので若干の制限はありま
すが、ファイルを読み込み、編集し、保存できます。
Vim の便利な (そして今は邪魔な) 機能を無効にするために、"-b" 引数を付けて Vim
を起動してください:

        vim -b datafile

'binary' オプションがオンになります。これにより、余計な機能が無効になります。
例えば、'textwidth' が 0 に設定され、自動整形が無効になります。そして、ファイ
ルは Unix 形式で読み込まれます。

バイナリモードを使うと、例えば実行ファイルのメッセージを変更できます。ただし、
文字を挿入したり削除したりするとプログラムが動かなくなってしまうので注意してく
ださい。"R" コマンドの置換モードを使いましょう。

バイナリファイルには非印字可能文字がたくさんあります。これを 16 進数で表示する
には、次のように設定してください:

        :set display=uhex

あるいは、調べたい文字にカーソルを移動して "ga" コマンドを使います。例えば、
<Esc> の上で "ga" を実行すると、次のように表示されます:

        <^[>  27,  Hex 1b,  Octal 033

ファイルに含まれている改行コードが少ない場合、'wrap' オプションをオフにすると
全体をざっくり眺めることができます:

        :set nowrap


バイト位置
----------

次のコマンドで現在のカーソル位置をバイト単位で表示できます:

        g CTRL-G

冗長なメッセージが表示されます:

    列 9-16 / 9-16; 行 277 / 330; 単語 1806 / 2058; バイト 10580 / 12206

末尾の数字に注目してください。カーソルの位置とファイルの大きさがバイト単位で表
示されています。'fileformat' の設定による改行の種類もちゃんと考慮されています。
指定したバイト位置に移動するには "go" コマンドを使います。例えば、2345 バイト
目に移動するには、次のようにします:

        2345go


XXDを使う
---------

本物のバイナリエディタは、テキスト表示と 16 進表示の二通りの方法でファイルを表
示します。"xxd" を使ってファイルを変換すれば Vim でも同じように表示できます。
"xxd" は Vim に付属しています。
まず、ファイルをバイナリモードで開いてください:

        vim -b datafile

そして、xxd を使って16進数ダンプ形式に変換します:

        :%!xxd

テキストは次のように変換されます:

        0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI
        0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0
        0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59.

あとは、好きなようにテキストを編集してください。普通のテキストを編集するのと同
じです。16 進数部分を変更しても、テキスト部分は更新されません。逆も同様です。
編集が済んだら変換し、テキストに戻します:

        :%!xxd -r

16 進数部分への変更だけが反映されます。右側のテキスト部分への変更は無視されま
す。

詳細は xxd のマニュアルを参照してください。

==============================================================================
23.5  圧縮ファイル

これは簡単です。圧縮ファイルを編集するのに特別な操作は必要ありません。ただファ
イルを開くだけです。"gzip" プラグインが展開の面倒をみてくれます。ファイルを保
存すれば勝手に圧縮してくれます。
現在、以下の圧縮形式がサポートされています:

        .Z      compress
        .gz     gzip
        .bz2    bzip2

実際の圧縮と展開には上記のプログラムが使われます。無い場合は別途インストールし
てください。

==============================================================================

次章: usr_24.txt  素早く入力する

Copyright: see manual-copyright  vim:tw=78:ts=8:noet:ft=help:norl:
関連キーワード:  usr, 形式, Vim, 表示, 編集, 文字, コマンド, 設定, 入力, 改行