バック タブNo.25148
NOP さん 08/07/09 14:39
 
便利に秀丸を使っております。
最近プログラムのタブをスペースに変換してみようと
思いまして、試していたところタブキーで右にスペースが
入りますが、タブの分だけ戻る方法がわかりませんでした。
SHIFT+TAB キーで戻れないものかと調べてみましたが
見つかりませんでした。
なにか方法があれば教えていただきたいのですが。
よろしくお願いいたします。

[ ]
RE:25148 バック タブNo.25149
秀丸担当 さん 08/07/09 15:24
 

>最近プログラムのタブをスペースに変換してみようと
>思いまして、試していたところタブキーで右にスペースが
>入りますが、タブの分だけ戻る方法がわかりませんでした。
>SHIFT+TAB キーで戻れないものかと調べてみましたが
>見つかりませんでした。

タブのぶんだけ半角空白を削除するということでしょうか。
行単位に範囲選択した状態で、Shift+Tabを押すと、行頭のタブ(またはタブ文
字数相当の半角空白)を削除します。
行頭ではないタブは手動で削除するしかないです。

[ ]
RE:25149 バック タブNo.25150
NOP さん 08/07/09 15:34
 
>タブのぶんだけ半角空白を削除するということでしょうか。

書き方が悪くてすみません。タブの分だけ左にカーソル移動です。

DELPHI と言う開発ツールがタブを押すと右にタブ分空白追加
SHIFT+TAB で 左にタブ分カーソル移動になる環境にして使用
していまして、秀丸でも同じような動きにならないかと思い
探してみたのですが見つからず、質問させていただきました。


[ ]
RE:25150 バック タブNo.25151
秀丸担当 さん 08/07/09 15:42
 

>書き方が悪くてすみません。タブの分だけ左にカーソル移動です。

そうでしたか。
そういう機能は無いです。
やるとしたら、マクロを作ってキー割り当てをするとできると思います。

左の例

if( gettext2( column-1,lineno,column,lineno, 1) == " " ) {
    #c = x;
    #c = (#c-#c/tabcount*tabcount);
    if(#c==0)#c=tabcount;
    while(#c>0
     && gettext2( column-1,lineno,column,lineno, 1) == " "){
        left;
        #c=#c-1;
    }
} else {
    left;
}

右の例

if( gettext2( column,lineno,column+1,lineno, 1) == " " ) {
    #c = x;
    #c = tabcount-(#c-#c/tabcount*tabcount);
    if(#c==0)#c=tabcount;
    while(#c>0
     && gettext2( column,lineno,column+1,lineno, 1) == " "){
        right;
        #c=#c-1;
    }
} else {
    right;
}

[ ]
RE:25151 バック タブNo.25153
NOP さん 08/07/09 15:59
 
>
>>書き方が悪くてすみません。タブの分だけ左にカーソル移動です。
>
>そうでしたか。
>そういう機能は無いです。
>やるとしたら、マクロを作ってキー割り当てをするとできると思います。

早速マクロありがとうございます。
試して見ましたが、期待通りの動きではありませんでした。
すみません。

タブを押したときは、タブ数に設定してある半角個数が挿入されます。
(現在のタブキーの動きで OK です)

SHIFT+タブを押したときは、タブ数に設定してある半角個数分だけカーソルが左にが
移動します。カーソルが止まる位置はタブ数に設定してある数の位置です。タブ数が
4なら 13,9,5,1 と戻って行く感じです。

このようなマクロは可能でしょうか?
よろしくお願いいたします。

[ ]
RE:25153 バック タブNo.25154
秀丸担当 さん 08/07/09 16:13
 

>SHIFT+タブを押したときは、タブ数に設定してある半角個数分だけカーソルが左にが
>移動します。カーソルが止まる位置はタブ数に設定してある数の位置です。タブ数が
>4なら 13,9,5,1 と戻って行く感じです。

左の例だけをマクロ登録してキー割り当てすればそのようになると思いますが、
どのように期待通りではなかったのでしょうか。

[ ]
RE:25154 バック タブNo.25155
NOP さん 08/07/09 16:28
 
>左の例だけをマクロ登録してキー割り当てすればそのようになると思いますが、
>どのように期待通りではなかったのでしょうか。

試してみました。
カーソルの位置に文字があると、一文字ずつ左に移動しました。

タブの個数が4と設定している場合に、
ABCDEFG と文字があり F と G の間にカーソルがあったときに
SHIFT+TAB で D と E の間にカーソルが移動して、
その状態でさらに SHIFT+TAB でカーソルが左端に来ると、
期待した動作になります。

こちらの意図していることが正しく伝えられずにすみません。
よろしくお願いします。

[ ]
RE:25155 バック タブNo.25156
秀丸担当 さん 08/07/09 16:42
 

てっきり空白をタブに見立てたカーソル移動のことかと思いましたが、そういう
ことでしたか。
これではどうでしょうか。

    if(x>0){
        #x = x/tabcount*tabcount;
        if(x == #x )#x=#x-tabcount;
        while(x>#x){
            #yOrg=y;
            left;
            if(!result)break;
            if(y!=#yOrg)break;
        }
    } else {
        left;
    }

折り返しがある場合ややこしいですが。
プログラムをされるということで、もし何か不都合がある場合マクロヘルプ等を
参考にして修正してみてください。

[ ]
RE:25156 バック タブNo.25157
NOP さん 08/07/09 17:00
 
>てっきり空白をタブに見立てたカーソル移動のことかと思いましたが、そういう
>ことでしたか。
>これではどうでしょうか。

期待通りの動きになりました。ありがとうございました。
ただ、選択中の SHIFT+TAB が動かなくなってしまったので
下記のように変更してみました。

if(x>0 && selecting == 0){
 #x = x/tabcount*tabcount;
 if(x == #x )#x=#x-tabcount;
 while(x>#x){
  #yOrg=y;
  left;
  if(!result) break;
  if(y!=#yOrg) break;
 }
} else {
 if(selecting == 1){
  unindent;
 } else {
  left;
 }
}

希望ですが、
Visual C++ Ver.6 でも SHIFT+TAB で同様な動きになります。
将来、秀丸で標準装備してもらえて、キー割り当てで変更できれば最高です。


[ ]
RE:25157 バック タブNo.25158
NOP さん 08/07/09 17:05
 
>>てっきり空白をタブに見立てたカーソル移動のことかと思いましたが、そういう
>>ことでしたか。
>>これではどうでしょうか。
>
>期待通りの動きになりました。ありがとうございました。
>ただ、選択中の SHIFT+TAB が動かなくなってしまったので
>下記のように変更してみました。
>
>if(x>0 && selecting == 0){
> #x = x/tabcount*tabcount;
> if(x == #x )#x=#x-tabcount;
> while(x>#x){
>  #yOrg=y;
>  left;
>  if(!result) break;
>  if(y!=#yOrg) break;
> }
>} else {
> if(selecting == 1){
>  unindent;
> } else {
>  left;
> }
>}
>
>希望ですが、
>Visual C++ Ver.6 でも SHIFT+TAB で同様な動きになります。
>将来、秀丸で標準装備してもらえて、キー割り当てで変更できれば最高です。
>

一応追加ですが、私の期待する動作では、
最後の left は必要ありませんでした。

色々ありがとうございました。

[ ]
RE:25158 バック タブNo.25159
秀丸担当 さん 08/07/09 17:13
 

選択時は逆インデントしたほうがよかったですね。

>>Visual C++ Ver.6 でも SHIFT+TAB で同様な動きになります。
>>将来、秀丸で標準装備してもらえて、キー割り当てで変更できれば最高です。

VC++は長年使っていますが、その動きは知りませんでした。
参考にさせていただきます。
ちなみに新しいVC++では挙動が変わって左のタブ削除になっているようです。

[ ]
RE:25159 バック タブNo.25160
NOP さん 08/07/09 17:20
 
>ちなみに新しいVC++では挙動が変わって左のタブ削除になっているようです。

え!無いんですか...。
確かに VC++ 2005 だと SHIFT+TAB で文字が付いてきますね。
設定がわかりにくい。なんとかすれば Ver.6 の挙動になりそうだが...。

[ ]