Usr_23
Nvim の :help
ページは、生成されたもので、ソースを tree-sitter-vimdoc パーサーを使って作成されています。
VIM ユーザーマニュアル - Bram Moolenaar 著
他のファイルの編集
この章では、通常のファイルではないファイルを編集する方法について説明します。Vim を使用すると、圧縮されたファイルを編集できます。また、インターネット経由でアクセスする必要があるファイルもあります。いくつかの制限はありますが、バイナリファイルも編集できます。
DOS、Mac、Unix ファイル
昔々、古いテレタイプ端末では、新しい行を開始するために 2 つの文字を使用していました。1 つはキャリッジを最初の位置に戻す(キャリッジリターン、
<CR>
)、もう 1 つは紙を上へ送る(ラインフィード、
<LF>
)です。コンピュータが登場したとき、ストレージは高価でした。一部の人々は、行末に 2 つの文字は必要ないと考えました。Unix の人々は、行末には <New Line> または
<NL>
のみを使用できると判断しました。Apple の人々は
<CR>
を標準化しました。Microsoft Windows の人々は、古い
<CR>
<NL>
を保持することにしました(ヘルプテキストではラインフィードに
<NL>
を使用します)。つまり、あるシステムから別のシステムにファイルを移動しようとすると、改行の問題が発生します。Vim エディターは、異なるファイル形式を自動的に認識し、背後で適切に処理します。オプション
'fileformats' には、新しいファイルを編集するときに試行されるさまざまな形式が含まれています。たとえば、次のコマンドは、Vim に最初に Unix 形式を試行し、次に MS-DOS 形式を試行するように指示します。
:set fileformats=unix,dos
ファイルを編集するときに表示されるメッセージに形式が表示されます。ネイティブのファイル形式を編集する場合は何も表示されません。したがって、Unix で Unix ファイルを編集しても、注意書きは表示されません。ただし、dos ファイルを編集すると、Vim はそのことを通知します。
"/tmp/test" [dos] 3L, 71C
Mac ファイルの場合は、"[mac]" と表示されます。検出されたファイル形式は、
'fileformat' オプションに保存されます。どの形式であるかを確認するには、次のコマンドを実行します。
:set fileformat?
Vim が使用する 3 つの名前は次のとおりです。
unix <NL>
dos <CR>
<NL>
mac <CR>
Unix では、
<NL>
が行を分割するために使用されます。行の途中に
<CR>
文字があることは珍しくありません。偶然にも、これは Vi (および Vim) スクリプトでよく発生します。
<CR>
が改行文字である Macintosh では、行の途中に
<NL>
文字がある可能性があります。その結果、
<CR>
と
<NL>
の両方の文字を含むファイルが Mac ファイルか Unix ファイルかを 100% 確信することはできません。したがって、Vim は、Unix では Mac ファイルを編集することはおそらくないだろうと想定し、このタイプのファイルはチェックしません。とにかくこの形式をチェックするには、
'fileformats' に "mac" を追加します。
:set fileformats+=mac
すると、Vim はファイル形式を推測します。Vim が誤った推測をした場合に注意してください。
昔ながらの Vi を使用して MS-DOS 形式のファイルを編集しようとすると、各行が ^M 文字で終わっていることがわかります。(^M は
<CR>
です)。自動検出により、これは回避されます。そのようにファイルを編集したい場合はどうでしょうか。その場合は、形式をオーバーライドする必要があります。
:edit ++ff=unix file.txt
"++" 文字列は、オプション名が続くことを Vim に伝える項目で、この単一のコマンドのデフォルトをオーバーライドします。"++ff" は
'fileformat' に使用されます。"++ff=mac" または "++ff=dos" も使用できます。これはどのオプションでも機能するわけではなく、現在 "++ff" と "++enc" のみが実装されています。フルネーム "++fileformat" および "++encoding" も機能します。
変換
'fileformat' オプションを使用して、あるファイル形式から別のファイル形式に変換できます。たとえば、Unix 形式に変換したい README.TXT という名前の MS-DOS ファイルがあるとします。まず、MS-DOS 形式のファイルを編集します。
vim README.TXT
Vim はこれを dos 形式ファイルとして認識します。次に、ファイル形式を Unix に変更します。
:set fileformat=unix
:write
ファイルは Unix 形式で書き込まれます。
誰かが電子メールメッセージを送信してきて、その URL でファイルを参照しているとします。例:
ここに必要な情報があります。
ftp://ftp.vim.org/pub/vim/README
プログラムを起動してファイルをダウンロードし、ローカルディスクに保存してから Vim を起動して編集することができます。もっと簡単な方法があります。カーソルを URL の任意の文字に移動します。次に、このコマンドを使用します。
gf
運が良ければ、Vim はファイルをダウンロードするためにどのプログラムを使用するかを判断し、ファイルをダウンロードしてコピーを編集します。新しいウィンドウでファイルを開くには、CTRL-W f を使用します。何かがうまくいかない場合は、エラーメッセージが表示されます。URL が間違っている、読み取り権限がない、ネットワーク接続がダウンしているなどの可能性があります。残念ながら、エラーの原因を特定するのは困難です。手動でファイルをダウンロードする方法を試すことをお勧めします。
インターネット経由のファイルアクセスは、netrw プラグインを使用します。現在、これらの形式の URL が認識されます。
ftp:// は ftp を使用 rcp:// は rcp を使用 scp:// は scp を使用
http:// は wget を使用 (読み取り専用)
Vim は通信自体を実行せず、コンピューター上で利用可能な上記のプログラムに依存します。ほとんどの Unix システムでは "ftp" と "rcp" が存在します。"scp" と "wget" をインストールする必要がある場合があります。
Vim は、":edit" や ":split" など、新しいファイルの編集を開始する各コマンドに対して、これらの URL を検出します。書き込みコマンドも機能しますが、
http:// は例外です。
パスワードに関する詳細については、
netrw を参照してください。
Vim でバイナリファイルを編集できます。Vim は実際にはこれ用に作成されたものではないため、いくつかの制限があります。ただし、ファイルを読み取り、文字を変更して書き戻すことで、1 つの文字のみが変更され、ファイルはそれ以外は同一になります。Vim がその巧妙なトリックを間違った方法で使用しないようにするには、Vim を起動するときに "-b" 引数を追加します。
vim -b datafile
これにより、
'binary' オプションが設定されます。この効果は、予期しない副作用がオフになることです。たとえば、
'textwidth' は、行の自動フォーマットを避けるためにゼロに設定されます。また、ファイルは常に Unix ファイル形式で読み込まれます。
バイナリモードは、プログラム内のメッセージを変更するために使用できます。文字を挿入または削除しないように注意してください。プログラムが動作しなくなります。"R" を使用して置換モードに入ります。
ファイル内の多くの文字は印刷できません。それらを 16 進形式で表示するには、
:set display=uhex
それ以外の場合は、カーソル下の文字の値を確認するために "ga" コマンドを使用できます。カーソルが
<Esc>
にある場合、出力は次のようになります。
ファイルに改行があまりない可能性があります。概要を把握するには、
'wrap' オプションをオフにします。
:set nowrap
バイト位置
ファイル内のどのバイトにいるかを確認するには、このコマンドを使用します。
g CTRL-G
出力は詳細です。
Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206
最後の 2 つの数字は、ファイル内のバイト位置とバイト総数です。これは、
'fileformat' が改行で使用するバイト数をどのように変更するかを考慮しています。ファイル内の特定のバイトに移動するには、"go" コマンドを使用します。たとえば、バイト 2345 に移動するには、
2345go
XXD の使用
実際のバイナリエディタは、テキストを 2 つの方法で表示します。そのままの状態と 16 進形式です。これは、最初に "xxd" プログラムでファイルを変換することで Vim で行うことができます。これは 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.
テキストを自由に表示および編集できます。Vim は情報を通常のテキストとして扱います。16 進数を変更しても、印刷可能な文字が変更されたり、その逆もありません。最後に、次のコマンドで元に戻します。
:%!xxd -r
16 進数部分の変更のみが使用されます。右側の印刷可能なテキスト部分の変更は無視されます。
詳細については、xxd のマニュアルページを参照してください。
これは簡単です。圧縮ファイルは、他のファイルと同じように編集できます。"gzip" プラグインは、ファイルを編集するときにファイルを解凍し、書き込むときに再び圧縮します。現在、これらの圧縮方法がサポートされています。
.Z compress .gz gzip .bz2 bzip2
Vim は、実際の圧縮と解凍を行うために上記のプログラムを使用します。最初にプログラムをインストールする必要がある場合があります。