折り返し行に関するカーソル移動No.16610
kikuto さん 04/02/03 16:31
 
かなり長文になってしまいました。申し訳ありません。

カーソルを上下に移動させるときに、折り返し行をスキップするようには出来ないで
しょうか?

極端な例ですが、折り返し文字数を20文字とした場合、
---
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
---
というデータは、
---
ABCDEFGHIJKLMNOPQRST
UVWXYZ
abcdefghijklmnopqrst
uvwxyz
---
と表示されます。

Aにカーソルがある場合、[↓]でカーソルを下に1回動かすと、Uにカーソルが移動し
ますが、aにカーソルが移動してくれると便利かなと思っています。
また、Aにカーソルがある場合に、[End」でZの後ろの改行文字にカーソルが移動した
り、Zにカーソルがある場合に、[Home]でAにカーソルが移動するのも便利かなと思っ
ています。

現状で不便に感じることは、例えば、上の例で、カーソルがAにあるときに「#を挿入
してカーソルを1文字戻して1行下げる」というキーマクロを連続再生した場合、
---
#ABCDEFGHIJKLMNOPQRS
#TUVWXYZ
#abcdefghijklmnopqrs
#tuvwxyz
---
となります。
Aとaの前に#が入ってくれれば、十分なのですが、Tとtの前にも#が入ってしまいます。
まぁ、Tやtが次の行に移動することも、Tやtの前に#が入ることも、ここではそんな
に不便ではないです。

このあと、Aの前の#にカーソルを置いて「#を削除してカーソルを1行下げる」という
キーマクロを連続再生した場合、
---
ABCDEFGHIJKLMNOPQRS#
UVWXYZ
abcdefghijklmnopqrs#
uvwxyz
---
となってしまいます。
Tとtが#に書き換えられてしまいます。

また、同じく折り返し文字数を20文字として、「"$x || "という文字列を行頭に追加
して、カーソルを行頭に戻し、1行下げる」というマクロを、
---
ABC
abcdefghijklmnop
--
というものに使うと、
---
$x || ABC
$x || abcdefghijklmn
$x || op
---
となり、文法エラーになってしまいます。

これら例は、変になるような例をわざと示しましたが、実用的に似たような例で不便
に感じることがたまにありました。
私があまり良くない使い方をしているのかもしれません。
実際、こういう処理を行うときだけは、一時的に折り返し文字数を大きくするなどし
て対処しています。
私は、「行番号の計算方法」を「エディタ的(改行だけを数える)」に設定しているの
で、余計にそう感じるのかもしれません。

ご検討よろしくお願いします。

[ ]
RE:16610 折り返し行に関するカーソル移動No.16617
秀まるお2 さん 04/02/04 15:26
 
 一応、世の中全体として、カーソル上下移動キーでは見た目上の1行分移動す
るのが普通だと思います。

 現状でやるとしたら、マクロを使ってそのような動作を実現することは出来ま
す。具体的には、

 下方向移動なら、

     while( !return ) down;
     down;

 となります。それを例えばCtrl+下矢印キーに割り当てておくなんて作戦で、
そういうカーソル移動したい時だけCtrl+下矢印キーを押すという手があるかと
思います。

 あるいは、「キー操作の記録/再生」の時に折り返してる行があると不都合だ
って話なら、そのときだけ自動折り返しをOFFにする手もあります。例えば僕の
場合だと、

   config "w1000";

 という1行だけのマクロをマクロメニューに登録してありまして、折り返し表
示されたら困る場合にこのマクロを一度実行するようにしています。

[ ]
RE:16617 折り返し行に関するカーソル移動No.16618
ENCODINGSHIFTJIS さん 04/02/04 18:26
 
// カーソルをデータ行単位に上下する
//  タブ文字の調整は未処理です

#col=column+1; // 最初の位置を記憶

while(true){
menu "↓","↑";
if(result ==0 )endmacro;
        else if(result ==1 ){
                movetolineno #col,lineno+1;
        }else if(result ==2 ){
                movetolineno #col,lineno-1;
        }else {
                ;
        }
}

//==========================================================================
==============================
//==========================================================================
==============================
//==========================================================================
==============================
//==========================================================================
==============================
こんな気持ちなのでしょうか。

[ ]
RE:16617 折り返し行に関するカーソル移動No.16619
kikuto さん 04/02/04 21:38
 
> 一応、世の中全体として、カーソル上下移動キーでは見た目上の1行分移動す
>るのが普通だと思います。

「普通」という言葉を使われちゃうと、つらいです(笑)

> あるいは、「キー操作の記録/再生」の時に折り返してる行があると不都合だ
>って話なら、そのときだけ自動折り返しをOFFにする手もあります。

行のテキストが全部見えている状態で使いたいので、これだと一時的に
折り返し文字数を設定し直すのと大して変わりません。

「行番号の計算方法」を、「ワープロ的」と「エディタ的」のどちらに
するかを選択できるようになっているので、カーソル移動に関しても
見た目の上下の行に移動するか、理屈上の上下の行に移動するかを
選択できるようにするのもありかと思ったのですが、どうやらあまり
歓迎されない提案だったようですね。

どうもありがとうございました。

[ ]
RE:16619 折り返し行に関するカーソル移動No.16621
アルビレオ さん 04/02/05 04:55
 
秀丸ユーザーのアルビレオです。

>> 一応、世の中全体として、カーソル上下移動キーでは見た目上の1行分移動す
>>るのが普通だと思います。
>
>「普通」という言葉を使われちゃうと、つらいです(笑)

うろおぼえですが、Emacsがそういう動きだったでしょうか。
Emacsはメジャーですが、Windowsに限らなくてもテキストエディタ全般の中では
少数派だと思います。

>また、Aにカーソルがある場合に、[End」でZの後ろの改行文字にカーソルが移動した
>り、Zにカーソルがある場合に、[Home]でAにカーソルが移動するのも便利かなと思っ
>ています。

[その他]-[キー割り当て]で[キー割り当て拡張]にチェックを入れ、
[Home]に[カーソル移動系]-[論理行頭に移動]
[End]に[カーソル移動系]-[論理行末に移動]
を設定すれば実現できます。

上の設定をしておけば、1論理行上に移動するには[Home]、[←]と移動すれば
「キー操作の記録/再生」にも一応は対応できます。
1行下に移動は[End]、[→]で。

[ ]