print and list

デフォルトの ex コマンド、print。このコマンドの書式は:
[addresses]print [count][flags]
addresses は前の記事の通り。

コマンド名 print は最短で p まで省略できる。

count が指定された場合、addresses で指定された最後のアドレス + count – 1 というアドレスが仮想的に生成される。つまり、1,2p3 は 1,2,4p とみなされる。アドレスは末尾から必要な分だけ取られるルールにより、最終的に 2 行目から 4 行目が対象になる。

flags は、コマンド実行後にカレント行をコンソールへ表示する際の細かい動作を指定する。+-#lp のいずれかの文字の連なりで指定する。l または p が指定されたとき、コマンド実行後のカレント行をコンソールへ出力する。これらの違いは:

  • p(print): 普通に表示する
  • l(list):
    • 特定の文字(\a、\b、\t、\n、\v、\f、\r、\)はそのエスケープシーケンスの形で表示する
    • 制御文字のような表示できない文字のうち上記にないものは、\ のあとにその文字コードを 3 桁の 8 進数で表示する。ただしタブ文字だけはそのまま表示する
    • 行の末尾には $ を表示する。行内の $ そのものは、\$ と表示する

だいたいこんな感じである。

# は表示する行の前に行番号をつける。

+- は表示される行を上下にずらすためのオフセットを指定する。+ は 1 行下へ、- は 1 行上へ。

ただこれら、特に flags は、vi を vi ではなく ex として使っている場合にはそれなりに役立つのだろうけど、ビジュアルモードでははっきり言ってまったく使う必要はない。vim においても、#lp のみ認識、list 表示は上記の posix の定義には従っていない(その代わり色分けとかはする)などけっこう違いがある。

wasavi は上記の仕様にだいたい従っているが、posix の定義では flags の各文字は空白を挟んでもよいのに対し、必ずひとまとまりにして指定する必要があるという違いがある。めんどくさいので直すつもりもない。まあフラグの間に空白を挟めないと明日おかーさんが死んでしまうんです! なんとかしてください! などと詰め寄られたら考えないではないが……。

Leave a Reply

Your email address will not be published. Required fields are marked *