brushing up, input mode #4

いろいろ逡巡したが、vim と「だいたい」同じ動作をするようにする。たとえば入力開始位置は ^W の動作に影響を与える。

それから、入力開始位置を保持するのにテンポラリ的なマークを設定しているのだが(wasavi のマークは vim と違い、桁方向についてもテキストの編集による増減に追従するので流用できる)、それにより副作用的に gi コマンド、つまり最後の入力終了位置へジャンプする機能も実現可能になるので、付けた。これは割りと便利ですよね。

入力開始位置は、基本的には input モードの 1 セッション中は変化することはないが、backspace や ^W でどんどん前方へ削除していった場合、カーソル位置が入力開始位置より前に来てしまう。この overrun な状況は、以下の動作に影響を与える。

  1. R コマンドで overwrite モードに入っている場合。入力開始位置より前方にカーソルがある場合、
    • 元のテキストの上で backspace や ^W を押しても、カーソルは移動するものの削除は行われない
    • 元のテキストを上書きしたテキストの上で backspace や ^W を押した場合は、元のテキストが復活する

    wasavi では元のテキストの復活処理はまだ組み込んでいない。

  2. ^U の処理。^U は入力開始位置からカーソル位置までを削除する。入力開始位置より前方にカーソルがある場合、次の候補
    • カーソル行の行頭
    • [cci]:set ai[/cci] してある場合は、カーソル行の最初の非空白文字のある位置

    が選択され、いずれかのうち、カーソルより前方にありかつカーソルに最も近い位置が最終的に残る。この位置からカーソル位置までが削除される。

  3. 文字を入力した場合。入力開始位置はそこに更新される

overwrite モードでの overrun はそもそもそれが起こらないようにクリップするだけにとどめるかもしれない。ちゃんと作ろうとするとかなり大変だ(しかも大変な割にめったに使わない)。

 * * *

overwrite モードでの overrun 状態。入力開始位置より前方へのカーソルの移動は可能だが、編集しようとするとエラーになるようにした。

Leave a Reply

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