2014年11月29日 (土)

vi/vim の f (find) と t (till) コマンド (Mon Mar 31, 2014)

vi/vim の f (find) と t (till) コマンド (Mon Mar 31, 2014)

Time-stamp: "Fri Apr 04 17:02:32 JST 2014"

日本語入力しているときのテキストエディタ vi/vim で f (find) と t (till) コマンドを使うことはほとんどない。f (find) と t (till) コマン ドは、分類からすると検索コマンドだろうが、使い道としてはカーソル移動 コマンドである。

日本語文を扱う際に、これら二つのコマンドが使えない理由は次の一点であ る。f (find) と t (till) コマンドの引き数として後置できるのは英数字 一文字(半角文字)である。仮名や漢字をターゲットにすることが出来ない。

日本語文で `f' や `t' コマンドを使う(える)ことは少ない。日本語文の中 に混ざっている英数字の半角文字にカーソルを飛ばすことはできる。日本語 の文字を指定することができない。つまり、もっぱら日本語文を書いている ぶんには `f' や `t' コマンドを使うシーンがない。使わないコマンドは忘 れてしまう(憶えられない)。憶えてないコマンドは使いようがない。私は、 最近までこのコマンドの使い方を知らなかった。

現在のカーソルがある位置において f (find) コマンドである小文字の `f' を押す。続けて英数字キーを一つだけ押す。そうすると、現在行の現在の カーソルがある位置から右方向の行末までの間にあって、コマンド `f' の 直後に押した英数字と一致する文字にカーソルが移動する。文字が見つから ないならカーソルは現在の位置から動かない(何も起こらずメッセージもな いと不安になるかもしれない。しかし、カーソルが行末に移ったら、却って 困る)。

現在のカーソルがある現在の行の右方向にあって、 `f' コマンドの直後に 打った一文字の英数字と一致する文字にカーソルを移す(見つける)から、一 文字を探す検索コマンドと言える。けれども、このコマンドを使う状況から するとカーソル移動コマンドというのがふさわしい。

ところで、 f (find) と t (till) コマンドによるカーソル移動は現在の カーソルがある行内に限られる。この性質はvi/vimにおける検索コマンドに 共通する。

現在行の上や下の行にカーソルが飛ばない。このことは、カーソルを一文字 分だけ左右に動かす `h' や`l' コマンドが行頭や行末を突き抜けて上の行 や下の行に出ていかない(viのデフォルト)ことと同じである。

カーソルの移動範囲が一行内に限られるのは、vi/vim の前身がラインエ ディターにあるからだろう。英文では、一つの単語が行末で分断されて次の 行頭に生き別れになることがない。印刷物ならハイフネーションにより行末 の不揃いを無くする工夫をするけれど、手書きやタイプライターの文面にお いて用紙右端の行末がガタガタになることを気にしないのが英文の流儀(文 化)である。そのため日本語文のように探すべきキーワードが上下二行にま たがっていることがない。英文におけるキーワード検索は、個々の行単位内 で出来ればよいのである。

そもそもエディターはコンピューターのプログラムを書くためのものとして ある。そして、プログラムのコマンドは一行に書くのが掟であった。今のプ ログラム言語は、コマンドを複数の行に分けて書くことができる。その昔の いわゆる真っ黒な画面のコマンドプロンプトに打ち込むコマンドは、その途 中に改行を入れられないことに似ている。

vi/vimにはカーソルを一文字分だけ左右に、または一行分だけ上下に動かす h, j, k, l コマンドが用意されている。それなのに、似通った機能の f (find) と t (till) コマンドがある。まったく同じではないが代用でき る。どうして、わざわざ別個に用意されているのだろうか。

その謎を読み解く鍵は、リピート入力 (オートリピート) にある。例えば `a' キーとか「あ」キーを押し続けると連続した文字列 `aaaaa…' や「あ あああ…」が自動的に入力されるアレである。機械式タイプライターなら連 続同一文字の個数分だけキーを押し込んだり元に戻したりしなければならな い。パソコンならキーを押し続けるだけで連続同一文字の入力になる。

大昔のコンピューターのキーボードにはオートリピートがなかった(たぶ ん)。windowsのパソコンならキーボードのプロパティとかフィルターキーの 設定によりオートリピートを殺すことができる。手指や腕の障害によりキー をチョコンと短時間(瞬間)だけ押すことが出来にくい人は、望まぬ連続同一 文字の入力にあわてる。逆に、健常者は横罫線として `-' を一行分80回も キーを押して戻しを繰り返すのは嫌である。

もし、カーソルキー(方向キーとか矢印キー、そして十字キーとも呼ばれる) がリピート入力でなかったら不便である。何十回、何百回もカーソルキーを 押しては戻しの繰り返しが必要になる。ヤッテられない。現在のパソコンな ら、マウスで目的の文字をクリック、がウラワザとして紹介されることにな るだろう。

ある人に対して便利な機能が、他の人に対して不便になることは多い。便利 は、別の不便を連れてくる。晴眼者に便利なマウスは、視覚障害者に無用な ものである。すでに画面が役にたたない。読み上げソフトに頼るしかない。 電話は便利だが相手を拘束する。パソコンメールは人を縛らないが着信に気 付いてもらえないかもしれない。アチラをたてれば、コチラがたたない。

キーが押し続けられているとき、連続同一文字の入力を望んでいると見做す 機能は後付けされたものだろう。大昔の機械はタイプライターと同じように 必要な回数だけキーを押し込んだり元の位置に戻したりを繰り返すしかな かったはずと思う。

カーソルが画面左端の行頭付近にあるとしよう。このカーソルを行末付近ま で移動させるには右方向への移動キーである `l' キーを、飛び越える文字 数の個数分だけ押し込んで元に戻すことを繰り返すことになる。一行が80文 字としたら数十回の反復が必要になるかもしれない(オートリピートが装備 されてないのであれば)。

カーソルを左右へ一文字分だけ移動する `h', `l' コマンドの繰り返し押し の手間を省くのが f (find) と t (till) コマンドといえる。ところで、現 在のカーソルがある位置とカーソルを飛ばしたい文字の間に同じ文字がある と手前で見つかった文字でカーソルが止まる。再度同じ `f' コマンドを打 たなくてよいように `;' (セミコロン) (繰り返し)コマンドが用意されてい る。`fxfx' (文字 `x'に移動) とするよりは `fx;' のほうが速い。

また、セミコロンコマンドにおいて手指が滑って目的の位置を行き過ぎてし まったときの救済策もある。同じ文字を逆方向に検索する `,' (カンマ)コ マンドが用意されている。ターゲットにする文字を再入力しなくてよい工夫 がはりめぐらされている。

`f' (find) コマンドが直後に打った文字を探すのに対して、 `t' (till)コ マンドは見つけた文字の一つ手前の文字にカーソルを動かす。また、コマン ドを大文字にした `F' や `T' コマンドの場合は検索方向が逆向きになる。 現在カーソルがある行の現在位置から左方向に遡ってカーソルを動かすため に使われる。

古い時代のテキストエディターほど検索コマンドを超高速なカーソル移動手 段として使う。検索コマンド自体がカーソル移動手段向けな使い勝手になっ ている。現代の検索コマンドは、長大な文書内からキーワードに一致する個 所を漏れなく見つけ出すようにデザインされている。テキストエディターを 開発する人もユーザーも、検索をカーソルの移動手段として設計したり使っ たりすることはない(だろう)。編集画面のド真ん中を隠すようにドッカと現 われるジャマケな検索ダイアログボックスを使って、カーソルを移動させよ うとは思わない。

同じキーを長時間押し続けて、同じ文字を連続して入力すること。1文字入 力するつもりで複数文字入力されてしまう現象を防ぐため、キーを押し始め てから0.5秒~1秒程度経過するまではキーリピートされない。連続して入力 する際、それぞれの間隔を何秒空けるかをソフトウェアで設定できるように なっていることが多い。この間隔のことをキーリピート間隔という。 (引用終わり)
キーボードから文字を入力するときに、キーを長く押しすぎてしまうと同じ 文字が連続して入力されてしまいます。フィルタキー機能を使用すると、繰 り返し入力されたキーを無視したり、キー入力の認識速度を変更したりする ことができます。次の方法でフィルターキーの設定と解除を行います。 (引用終わり)

| | コメント (4) | トラックバック (0)

«DvorakJのAutoHotkeyスクリプト版を動かす(Sun Dec 08, 2013)