スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AdBlockPlusのフィルタの書き方 

めも。

DO.MA.IN##ELEMENT#ID

DO.MA.INを省略すると全ドメイン。SUB.DO.MA.INも含まれる。
||DO.MA.IN##...という書き方はできない模様。

DO.MA.IN##ELEMENT.CLASS

IDではなくクラスで指定する場合にはセパレータを'.'にする。

スポンサーサイト

Firefox addonのLinky 

Firefox addonのLinkyはとっくの昔に終わっていたのね。Open Slected Linksに変えてみたけれども、Linkyの法が勉りっぽいんだけど……

複数ドライブのページファイルを、Windowsはどういう優先度でページファイルを使用するのか 


色々探してみてようやく見つけた。ここに書いてあった。
http://support.microsoft.com/kb/314482/ja

複数のドライブにページファイルを作成した場合、Windowsはアクセス頻度の低いドライブのページファイルを優先的に使用する。

"優先的に"というのがどのような事を意味するのかは明記されていない。"内部アルゴリズムを使用して仮想メモリの管理に使用するページファイルを決定"するとだけ書かれている。

つまり、ドライブC:とD:がありそれぞれの"アクセス頻度"が49%と51%である場合、D:のページファイルを100%使用して使い切ってからC:のページファイルを使用し始めるのか、C:とD:のページファイルを49:51の比率で使用するのか、それとも他の使用方法なのか分からない。

また、"アクセス頻度"の算出方法も不明だ。ブートしてからの累積アクセスブロック数を用いるのか、例えば直近1時間のアクセスブロック数を用いるのか、キャッシュヒットしたReadやWriteは無視するのか、シーケンシャルアクセスとランダムアクセスの扱いは同じなのか違うのか。

とりあえず、複数の物理ドライブを接続している場合、ページファイルを分割してやることでパフォーマンスが上がる(一般論として)のは説明が付いたね。

WindowsXP + microSDXC(64GBytes) 

WindowsXP + microSDXC(64GBytes)は、うまく動作しない場合があるのね。
手元のLet's note CF-W8(WindowsXP Professional SP3)に、買ってきたmicroSDXC(64GBytes)を元気に突っ込んでみたら
「今すぐフォーマットしますか?」
とかって言われてしまった。

調べてみてexFAT対応のためのWindowsの追加モジュールを突っ込んでみたんだけど、64GBytesには対応していないようで読み書き不可。

PanasonicのWebサイトを調べると、SDカードドライブのハードウェア側はどうやらSDXCをいじることができるようで、OSをWindows7にすれば何とかなりそうな雰囲気。

とはいえ、microSDカード1枚のためにOSをWindows7へ上げるのは面倒臭いしなぁ。一緒に物理メモリを2GBytes→4GBytesにして、64bit版のWindows7にすれば面倒臭い作業をしたかいがある、かもしれんが…。
どうしようかしらん。

VMWare 

VMWareって、メモリがきちんと搭載されていないとインストールできないんだね。
メモリ512MBytesの古いマシンにインストールしようとしたらインストーラが途中でNGを出してインストールできなかったよ。

Firefox addin / Linky 

FirefoxのaddinのLinkyを使っている。どうやら古いみたいなので何とかしたい。

norah'# で最新版を配っている模様なのでダウンロード、バージョンアップしてみようと思う。

vmstat研究 

Solarisのvmstat

システムの性能向上を狙って、vmstatによる情報を理解したい。vmstatはその名の通りVirtual Memoryの統計情報を出力する。

仮想メモリについて

そもそも近代的なOSにおけるメモリとは、物理メモリとスワップとからなる仮想メモリを指す。物理メモリはマザーボードに装着されたメモリチップによる一次記憶領域を指す。物理メモリは高価であるが非常に高速に動作する。スワップはHDDによる二次記憶領域を指す。スワップは物理メモリより安価であるが速度は物理メモリに劣る。

仮想メモリは、物理メモリとスワップをOSが合わせて活用することでユーザプログラムからは単なるメモリとして区別無く利用できる様にした仕組みのことを指す。つまりプログラムから見れば、自分が物理メモリ上にいるのかスワップ上にいるのか区別できず、区別する必要もないようOSが仲立ちをしているということだ。

OSは物理メモリ上にいるプログラムがアクセスされないままでいるのを見つけると、物理メモリからスワップへ移動(swap-out)させる。必要になると再び物理メモリへ移動(swap-in)させる。swap-inする時もswap-outする時もOSはそのプログラムには何も言わないし、プログラムも気が付くことはない。

物理メモリはまた、OSによってキャッシュやバッファとして使用される。キャッシュはHDDなどの二次記憶装置への書き込みや読み込みを一時的に物理メモリ上に保存しておくことで、低速な二次記憶装置へのアクセスによってシステムの処理速度低下を軽減する。

バッファは少し分かっていないのだが、ネットワークやシリアルポート、USBポートやSCSIなど各種I/Oを行う際のキャッシュだと思う。これらもやはり一次記憶に比較して低速であるため、データがI/Oされるまでの間物理メモリ上に保持する必要がある。

特にLinuxは可能な限りキャッシュにため込もうとする傾向が強い。Linuxでなくても一般的なOSでは物理メモリの空きはとても小さな値になるはずだ。

さて、簡単にswap-in/swap-outすると書いたが、低速な二次記憶装置への読み書きであるため物理メモリだけで動作するのに比較すると当然時間が掛かる。つまり動作が遅いわけだ。メモリの使用状況に余裕がある場合にはswap-inやswap-outによる速度低下は気にならない場合が多いが、必要なswap-in/swap-outが大量になると顕著な速度低下が発生する。こうした現象をスラッシング(thrashing)と呼ぶ。

vmstat [-pS] [INTERVAL [TIMES]]

-S swap-in/swap-out回数を出力。remfの代わりにsisoが出力される。 -p  ページング処理について出力する。
vmstat出力項目の説明
kthr カーネルスレッド数
r 実行可能キューのスレッド数
b ブロック中のスレッド数。入出力待ち、ページング等の理由
w スワップアウトされたLWP(軽量プロセス)
memory メモリ
swap 空きスワップ[KBytes]
free size of free list[KBytes] 要するに空き物理メモリと思うのだけど"free list"って何?
page ページ処理 (全て1秒当たりの値)
re ページ埋め立て。回収されたページ。オプション-S指定でsiと交換。
mf マイナーフォルト。オプション-S指定でsoと交換。
si swap-in。オプション-S指定で出力される。
so swap-out。オプション-S指定で出力される。
pi page-inメモリサイズ[KBytes]
po page-outメモリサイズ[KBytes]
fr 解放メモリサイズ[KBytes]
de 短期メモリ不足予想[KBytes]
sr clock algorithmでscanされたページ数
disk ディスク操作[回/秒]。表示は4台まで。英字はディスクの種類を示し、s = SCSI、i = IPIなど。数字はLUN。
faults 割込み、システムコール
in 割込み[回/秒]
sy システムコール[回/秒]
cs コンテキストスイッチ[回/秒]
cpu CPU使用時間。マルチプロセッサ/マルチコアプロセッサではその平均値を出力します。
us ユーザモード[%]
sy カーネルモード[%]
id アイドル[%] つまりCPUが遊んでいる時間の割合。
page ページング
epi Executable page-ins.
epo Executable page-outs.
epf Executable page-frees.
api Anonymous page-ins.
apo Anonymous page-outs.
apf Anonymous page-frees.
fpi File system page-ins.
fpo File system page-outs.
fpf File system page-frees.

ページとページサイズについて

また具体的にswap-in/swap-outがどんな単位で行われているのかを見てみよう。プログラム全体でpage-in/page-outするのではなく、page(ページ)と呼ばれる単位でメモリを操作する。OSによってpageサイズは異なるが、良くあるOSでは大抵は8KBytes程度だと思う。SolarisはSolaris9でMPSSと呼ぶ機能により8KBytes、64KBytes、512KBytes、4MBytesという複数の異なるページサイズを混在使用できる様になった。(どうも対象はヒープ、スタック、mmap()による割り当てに限定されるらしい)

page-in/page-outがページサイズ単位で行われるということは、どのようにパフォーマンスに影響するのだろうか? ページサイズ単位ではなくプロセス単位でpage-in/page-outされる場合を考えてみると、より小さな単位で操作されるということが分かる。巨大なプログラムではなくても5MBytes、10MBytes程度のメモリを使用するケースが多い。プロセス単位でのpage-in/page-outではこうした単位でpage-in/page-outを行わなければならない。ページ単位でのpage-in/page-outは必要な部分だけを物理メモリに戻し、実行することができる。

ではプロセスを分割する単位としてページというのは適当なものであるのだろうか? それを判断するためには実行中プログラムがどのようなメモリ領域を持っているか理解する必要があるだろう。まず実行前のプログラムバイナリには大きく分けてプログラムコードとデータ(テキスト)領域のふたつが存在する。プログラム実行のためにはこれがメモリ上に展開され、スタックが用意され、実際にプログラムが実行されるに従って更に動的取得(ヒープ)メモリが用意されます。

プログラムコードは文字通りコード自体で特定のアドレスからCPUが順に読んでいきます。処理に従ってCPUはコード領域をあちらこちらとジャンプして実行を続けますが、現代のユーザプログラムではCPUはプログラムコード領域から出ることはないのではないかと思います。

テキスト領域は文字列や数値などプログラムバイナリに含まれるデータが入っています。最近のコンピュータアーキテクチャでは上記のコード領域とテキスト領域はリードオンリとして変更/書き込みを禁止するケースが多いのではないかと思います。

スタックはCのautoな変数の保存領域ですね。関数の呼び出し時に戻り先アドレスをpushしておくというのもスタックだったと思います。スタックはプログラム開始時に確保してプログラム終了まで解放も追加取得もせず一定サイズです。一定サイズであるため、無駄が出ないよう小さなサイズにしておく場合が多い。

動的取得(ヒープ)メモリはmaloc()やC++のnew()やらでシステムコールで明示的にプログラムから取得するメモリ。一般に大きなメモリ領域を取得する際には動的取得でヒープメモリを使用する。

さて、このようなメモリ領域がある時、それぞれのメモリ領域はどのような頻度でアクセスされるだろうか? スタックはプログラムが動作する時に必ずアクセスされるだろうと予想される。プログラムコードは場合によっては一部が全くアクセスされないままプログラムが終了することがあると予想される。テキスト領域などもそうでしょう。スタックは更にその傾向が強そうで、データの大きさがより大きいためアクセスされるところ/されないところが出てきそう。

こうした使用頻度の高いメモリ領域が物理メモリ上にロードされ、そうでない領域をswap-outしておくことができるようページ単位でswap-in/swap-outするようになっている。

ページサイズを調べる/変更する

Solaris9以降ではシステムのデフォルトページサイズ及び対応可能なページサイズを出力するためには以下のようにする。(このあたりのことはここが参考になります)

デフォルトページサイズの出力

$ /bin/pagesize
8192
$

対応可能なページサイズの出力

$ /bin/pagesize -a
8192
65536
524288
4194304
$

デフォルトページサイズの変更はどうやるんだろう?

さて、デフォルトページサイズの変更もやりたいけども、手軽にパフォーマンス測定を行ってみたいのも事実。起動コマンドに適用するページサイズを指定するにはコマンドppgszを使用すればよいらしい。

/usr/sbin/ppgsz -o {heap|stack|anon}=SIZE COMMAND

"-o anon"はSolaris10から指定できるようになったらしい。また、CMDの代わりに-p PIDとすることで実行中のプロセスのページサイズを変更することも可能らしい。 当然自分のプロセスかrootによる実行が必要。ということで実験をしてみたいが、今の所自由に実行できるマシンが手元にないので現在未試験。

環境変数LD_PRELOADを用いて変更することもできるため、こちらの方が使いやすいかも。LD_PRELOADを用いる場合には以下のようにする。

$ MPSSHEAP=64K; export MPSSHEAP
$ MPSSSTACK=512K; export MPSSSTACK
$ LD_PRELOAD=mpss.so.1; export LD_PRELOAD
$ ./foobar

または設定ファイルに記述して、設定ファイルを指定する方法もあります。

$ cat > mpsscfg
foo*:512k:64k
^C
$ MPSSCFGFILE=mpsscfg; export MPSSCFGFILE
$ ./foobar

mpsscfgの1カラム目でプログラム名を限定しています。

プロセスの使用メモリページを調べることもできる。

pmap PID

とすればよい。実行例は次の通り。

% pmap 25437
25437: -csh
00010000 136K r-x-- /usr/bin/csh
00042000 16K rwx-- /usr/bin/csh
00046000 40K rwx-- [ heap ]
FEF80000 1664K r--s- dev:85,3 ino:151594
FF1A0000 24K r-x-- /usr/lib/locale/ja_JP.eucJP/methods_ja_JP.eucJP.so.3
FF1B4000 8K rwx-- /usr/lib/locale/ja_JP.eucJP/methods_ja_JP.eucJP.so.3
FF1C0000 144K r-x-- /usr/lib/locale/ja/ja.so.3
FF1F2000 16K rwx-- /usr/lib/locale/ja/ja.so.3
FF200000 864K r-x-- /lib/libc.so.1
FF2E8000 32K rwx-- /lib/libc.so.1
FF2F0000 8K rwx-- /lib/libc.so.1
FF31A000 8K rwxs- [ anon ]
FF320000 8K r-x-- /platform/sun4u-us3/lib/libc_psr.so.1
FF330000 8K rwx-- [ anon ]
FF340000 168K r-x-- /lib/libcurses.so.1
FF37A000 32K rwx-- /lib/libcurses.so.1
FF382000 8K rwx-- /lib/libcurses.so.1
FF390000 24K rwx-- [ anon ]
FF3A0000 8K r--s- dev:85,4 ino:4628
FF3B0000 184K r-x-- /lib/ld.so.1
FF3EE000 8K rwx-- /lib/ld.so.1
FF3F0000 8K rwx-- /lib/ld.so.1
FFBEE000 72K rw--- [ stack ]
total 3488K
%

ログインシェルcshに対して実行してみたが、ヒープ[heap]が40KBytes、libc.so.1が約900KBytes、その他libcurses.so.1が200KBytes程度、デバイスファイル85.3と85.4とが1.6MBytesと8KBytes、最後にスタックが72KBytesになっています。ヒープについては所々にある[ anon ]もスタックを指していると思われます。*.so.1については実際は共有メモリとして他のプロセスと共有している場合もありそうです。特にlibc.so.1は。よく見るとアクセス権も示されていてリードオンリのものは共有しやすいだろうと想像できます。

適当なページサイズとは?

ではページサイズはどの程度が適当なのか、どうやって判断するのだろうか。page-in/page-out回数は少ない方が良く、転送データ量は少ない方がよい。これをvmstatで測ればよいのではないか。 更に詳細にページサイズを検討するには

仮想メモリの中のどのページが、現在物理メモリのどこに存在しているのかという対応表が存在している。SPARC CPUには仮想アドレスと物理アドレスとの対応を扱うためのTLB(Translation Lookside Buffer)というバッファが存在する。仮想アドレスと物理アドレスとの対応をここにキャッシュする。TLBでキャッシュミスした場合には、TTL(Translate Table Entry)と言うより大きな変換テーブルから探し出す。TLBでキャッシュヒットした場合の方がメモリアクセスは高速となり、アクセスするページが物理メモリ上に存在する場合にはその速度の違いは速度性能の違いとして効いてくるものとなる。ページサイズを小さくするとページ数が増加するためTLBでキャッシュヒットするメモリサイズが小さくなり、ページサイズを大きくするとpage-in/page-outの単位転送メモリサイズが大きくなってしまう。

SPARCアーキテクチャのSolaris9以降では、trapstatコマンドが存在する。この-tオプションを用いることでTLBのキャッシュヒット率を参照できる。

ページング、スワップの違い/区別は何か?

vmstatではpi/po、si/soといった項目があるがそれぞれ何が異なるのだろうか。pi/poはページング、si/soはスワップである。スワップはプロセス単位でのスワップイン/スワップアウト、ページングはプロセスよりも(大抵は)小さなページ単位でのスワップイン/スワップアウトを指す。

一般にスワップで扱うプロセスサイズよりもページサイズの方が小さいため、ページングよりもスワップの方がパフォーマンスに対する悪影響が大きいと考えられる。

短期メモリ不足予想とは

vmstatの出力deは短期メモリ不足予想を示している。これはどんなものだろうか。物理メモリの空きが少なくなった時などに短期メモリ不足予想が発生するはず。

ページフォルトとは何か?

ページフォルトとは、プログラムがアクセスしようとした仮想メモリ空間が物理メモリ上に存在しなかったことを指す。つまりpage-outされていたということである。ページフォルトが発生するとOSが該当ページをpage-inさせなければならない。ここまでの説明で明らかなようにページフォルトは正常な運用の中で当然発生する現象であり、エラーでも問題でもない。

ただし、プログラムがアクセスしようとした仮想メモリが、そのプログラムにはアクセスする権限がないものであった場合にもページフォルトは発生する。プログラムのバグなどによって不正なアドレスにアクセスしようとした場合にこうしたページフォルトが発生する。この場合にはOSは当然page-inさせずにプログラムの異常動作であるとして終了させるなどの処理を行う。UNIX系であればシグナルSIGSEGVを送るなどする。要するに「セグメンテーションフォルト」や「バスエラー」だ。

性能を向上させる観点からは、ページフォルトは可能な限り少ない方が好ましい。ページフォルトの発生はすなわち低速な二次記憶装置とのアクセスの発生を意味するからだ。vmstatではmfをそうした意味合いで参照すればよいだろう。

タイトルと中身が異なっていますが、ここまで。

東京地下鉄路線図 

東京メトロのWebページで路線図PDFを公開している。これをカラー印刷してやれば都内ので電車移動にも便利。副都心線もちゃんと入っています。
しかし、会社間の関係もあるけどさ、JR、私鉄、地下鉄を全て網羅した路線図を作成して欲しいもの。都心の路線としてはJRはそんなに密ではないので、何となく補完できたりしますがやっぱり不便。
JRももう国鉄ではないので「JRと私鉄」という表現もおかしいね。「私鉄」は今はなんていえばいいのだろう? 「JR以外の鉄道」?
#
# 上記URLに含まれる "rosen" を "ローゼン"と空目してしまい、何かに負けた感じ。
# "ロセン"だ路線!

Lhaplusメモ 

lhaplusのセキュリティホールが見つかったとか、それに対応するためのバージョンアップがあったとかで、取り敢えずバージョンアップしてみた。
で、パスワード付き圧縮のためのオプションを調べたのでメモ。これでパスワード付きとパスワードなしの両方のドラッグ&ドロップアイコンを作ることができた。

/c:<拡張子> 指定した拡張子で圧縮
/p パスつきで圧縮/c:と併用っぽい
/oh ここに解凍
/od デスクトップに解凍
/oc 出力先を指定して解凍
/t テンポラリモードで解凍
/x 自己解凍形式で圧縮(?)/c:と併用っぽい

vimメモ 

vimメモ

コマンドラインオプション

  • -R
    リードオンリ。vi/vimの代わりにviewというコマンド名で起動しても同じ。ただしコマンド:w!で書き込めてしまう。
  • -M
    絶体に書き込みしない。参照::modifiable
  • -b
    バイナリファイルの編集モード。ファイルI/Oをバイナリモードで行い、いくつかのオプションを設定する。(binary' on, 'textwidth' = 0, 'modeline' off, 'expandtab' off) オプション'binary'=onとしても同様。('binary'はファイルを読み込む前に設定すること)
    実行プログラムファイルは各ビットがファイルの中の位置が変わってはいけない。(多分、うまく動かなくなるだろう。)

コマンド/編集関係

  • i       挿入モード。[ESC]で終了。
  • ^[
    [ESC]のalias
  • v
    範囲選択開始(Visual mode)
  • V
    行単位範囲選択開始(Visual mode)
  • ^V
    矩形範囲選択開始(Visual mode)
  • y
    範囲選択終了、Yank。
  • p
    Yankしたものをペースト。カーソルの後ろに。
  • P
    Yankしたものをペースト。カーソルの前に。
  • Y
    1行Yank
  • yaw
    1単語Yank
  • "By
    バッファBへYank。yの代わりにYやyawでも。
  • "Bp
    バッファBをペースト。
  • !コマンドライン   コマンドラインを実行する。コマンドラインに"%"を含めると、それは現在編集中のファイルパスで置き換えられる。
  • !!コマンドライン   コマンドラインの出力を挿入する。コマンドラインに"%"を含めると、それは現在編集中のファイルパスで置き換えられる。

:コマンド

  • :q
    終了
  • :help
    ヘルプ表示
  • :help vimrc
    起動時の初期化処理についてのヘルプ
  • :edit FILE
    ファイルFILEを編集。'e'と省略可能。
  • :w[rite] [FILE]
    ファイルへ書きだし。FILEを指定した場合にはファイルFILEへ書きだし。'w'と省略可能。
  • :next
    次ファイルへ移動。
  • :Nnext
    N個次のファイルへ移動
  • :previous
    前ファイルへ移動
  • :last
    直前に編集していたファイルへ移動
  • :e#
    たぶん、これも直前に編集していたファイルへ移動。
  • :first
    最初に編集していたファイルへ移動
  • :args
    起動時引数出力
  • :args FILE [FILE2]...
    編集ファイルをファイルFILE [FILE2]...へ変更する。いわゆる「閉じて開く」。シェルのワイルドカードも使える模様。
  • :1,$ s/BEFORE/AFTER/
    ファイル先頭からファイル末尾まで文字列置換実行。BEFOREAFTER 先頭の1,$を省略した場合にはカレント行だけが対象。
  • &
    直前のexモードコマンドの繰り返し。

:コマンド/設定関係

  • :set ts=N
    [TAB]をNに設定
  • :set [no]autoindent
    オートインデント有効/無効
  • :set [no]number
    行番号表示/非表示
  • :set [no]list
    コントロール文字表示/非表示
  • :set [no]showmatch
    括弧の対応表示を行う/行わない
  • :set [no]autowrite
    自動書き出しモード
  • :set backup
    バックアップファイルを作成する。バックアップファイルはFILE~。
  • :set backupext=.bak
    バックアップファイル名をFILE.bakに指定する。
  • :set backupdir=DIR
    バックアップファイルを編集ファイルのディレクトリではなく、ディレクトリDIRに作成する
  • :set patchmode=.orig
    編集前のファイルをファイルFILE.origとして保存しておく。
  • :set [no]modifiable
    -Mオプションのトグル。
  • :nnoremap w :w
    1キーでファイル保存できる設定
  • :NoMatchParen
    カーソルが括弧にある場合、対応する括弧をハイライト表示しない。
  • :DoMatchParen
    :NoMatchParenの反対。
  • :let loaded_matchparen = 1
    そもそも括弧をハイライト表示するプラグインをロードしない。.vimrcに記述する。
  • :hi MatchParen ctermbg=blue guibg=lightblue
    こういうのもある。

ウィンドウ分割

  • :new
    ウィンドウ分割して空のファイル編集を行う。
  • :[NUM]split [FILENAME]
    ウィンドウ分割してファイルFILENAMEを開く。FILENAMEを省略した場合には現在のウィンドウを複製する。NUMを指定した場合には新しいウィンドウの行数指定になる。
  • :close
    ウィンドウクローズ。:quitや"ZZ"も同様だが:closeの場合には最後のウィンドウはクローズしない。
  • :only
    現在のウィンドウのみを残してクローズ
  • ^W w
    フォーカス移動
  • [NUM]^W +
    ウィンドウ行数増加。NUMを指定した場合にはその行数だけ増加する。
  • [NUM]^W -
    ウィンドウ行数減少。NUMを指定した場合にはその行数だけ減少する。
  • [NUM]^W _
    指定行数にウィンドウサイズを変更する。NUMを省略すると可能な範囲で最大サイズへ変更する。
  • :tabedit [FILENAME]
    タブ編集モード。
  • :tab split
    タブを増やす。
  • gt
    次のタブへ移動。

タグジャンプ

telnetのエスケープキー^]とタグジャンプキー^]とのバッティング解消について。telnet経由でVimを利用している時にタグジャンプを行おうとすると、タグジャンプの代わりにtelnetのプロンプトへ移動してしまう場合がある。大抵のバージョンのtelnetはデフォルトのエスケープキーを変更できたり、無効にできるようになっている。

エスケープキー無効化
telnet -E HOSTNAME

エスケープキー変更
telnet -e ESCAPE_CHARACTER HOSTNAME

telnetの代わりにSSHを使うのがより良いかも。
  • ctags FILENAME
    タグファイルを作成するコマンド。ctags 5.5.4はC/C++だけでなくPerlにも対応している模様。実行するとカレントディレクトリにファイルtagsを作成する。ファイルtagsが存在する状態でタグジャンプを行える。
  • ^]
    タグジャンプ。カーソル位置のタグ(カーソルがキーワード上になければカーソルの右に最初に出現するキーワード)に対応する場所へジャンプする。
  • :[COUNT]ta[g][!] {ident}
    {ident}を定義している場所へジャンプ。{ident}には"tag stack"(?)を入れること。{ident}は正規表現も受け付ける(tag-regexpを参照)。複数のタグがマッチする場合にはCOUNT番目のものへジャンプする。COUNTを省略した場合には最初のものへジャンプ。その他のパターンマッチタグへのジャンプについてはtag-matchlistを参照。[!]についてはtag-!を参照。

バイナリ編集

コマンドラインオプション-bを指定するか、ファイルを開く前にオプション'binary'を有効にする。実行プログラムファイルは各ビットがファイルの中の位置が変わってはいけない。(多分、うまく動かなくなるだろう。) 16進表示であれこれするためには :help xxd して指示に従うのが良い模様。xxdはヘックスダンプコマンド。

  • endofline
    有効にすることでファイル書き出しの際にファイル末尾のEOFを追加する。通常、バイナリファイルでは不要。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。