Just another Ruby porter,

〜2006年6月上旬〜

558通。Gmail側約5000スレッド。微妙に増えた。 なんか最近Gmailのspam判定が甘いような。日本語のspamが目立つ。

Vimでバイナリファイルを編集するにはいくつか方法がある。

:help edit-binaryすると-bオプションかset binaryせよとある。 set display=uhexとすれば表示できない文字も16進数で表示される。

<Nul> characters are shown on the screen as ^You can enter them with "CTRL-V CTRL-or "CTRL-V 000" {Vi cannot handle <Nul> characters in the file}

コードはCTRL-V x0fとかすれば16進数でも入力できる。 いちいちCTRL-Vって打つのが面倒であるが。

そこで真打。:help xxdを参照。

If one has a particular extension that one uses for binary files (such as exe, bin, etc), you may find it helpful to automate the process with the following bit of autocmds for your <.vimrc>. Change that "*.bin" to whatever comma-separated list of extension(s) you find yourself wanting to edit: >

とあって、以下を.vimrcへ追加しろとある。

" vim -b : edit binary using xxd-format! augroup Binary au! au BufReadPre *.bin let &bin=1 au BufReadPost *.bin if &bin | %!xxd au BufReadPost *.bin set ft=xxd | endif au BufWritePre *.bin if &bin | %!xxd -r au BufWritePre *.bin endif au BufWritePost *.bin if &bin | %!xxd au BufWritePost *.bin set nomod | endif augroup END

すばらしい。これで*.binという拡張子にしとけば16進ダンプ形式で編集できる。 ただxxdコマンドは2バイト単位がデフォルトなので

% echo hoge |xxd 0000000: 686f 6765 0a hoge.

となってしまう。やっぱ1バイト単位のほうがわかりやすいので

" vim -b : edit binary using xxd-format! augroup Binary au! au BufReadPre *.bin let &bin=1 au BufReadPost *.bin if &bin | silent %!xxd -g 1 au BufReadPost *.bin set ft=xxd | endif au BufWritePre *.bin if &bin | %!xxd -r au BufWritePre *.bin endif au BufWritePost *.bin if &bin | silent %!xxd -g 1 au BufWritePost *.bin set nomod | endif augroup END

のようにxxdコマンドの実行に-g 1を追加。

% echo hoge |xxd -g 1 0000000: 68 6f 67 65 0a hoge.

こんな感じになる。 silentは「続けるにはENTERを押すかコマンドを入力してください」 というメッセージで止まるのを抑止。 右側のアスキー文字列を編集しても無効なので注意。