別ファイル名でもマーク行を維持No.37839
matushiro97 さん 19/12/17 14:37
 
別ファイル名で保存した場合でもマーク行を維持する方法はないでしょうか?
コードをデバッグしながら改訂版を別ファイル名で保存する場合に.重要な行のにつ
けている(そこにカーソルがジャンプできるように)つけている既存のマークを維持
したいのです.

よろしくお願いします.

[ ]
RE:37839 別ファイル名でもマーク行を維持No.37840
秀丸担当 さん 19/12/17 16:39
 

名前を付けて保存したとき、新しいファイルに元々あったファイルのマークの情報を
コピーするということはできないです。
やるとしたら、マクロを使って2つの秀丸エディタ間でマークの情報をコピーするよ
うな方法が考えられます。
その場合、マーク一覧にあるマークの個数が256個を超える場合、設定によっては古
いほうのマークが消えるので、バックアップを作ってはコピーを繰り返す場合、溜ま
る一方になってしまうので、マークの使い方としてはいまいちかもしれません。

古いマークが自動的に消えるかどうかは、[その他]→[動作環境]→[検索]→[マーク]
→[マークの上限に達したときメッセージを表示]によります。
ONの場合は警告が出て、OFFの場合は自動的に消えます。

マークが溜まるのを避けて、一時的なマークのようなもので移動できる場所を作ると
したら、カラーマーカーにするといいかもしれないです。
colormarker文で検索の色付けと同等のカラーマーカーを付けておくと、標準のキー
割り当てでF4(次の結果)/Shift+F4(前の結果)で移動する方法があります。


マクロの例:

#hOrg=hidemaruhandle(0);
#hNext=hidemaruhandle(1);
question "次の秀丸エディタ\n"+
 filename2[#hNext]+"\n"+
 "のマーク情報を、\n"+
 filename2+"\n"+
 "にも設定しますか?\n"+
 "全体で256個を超える古いマークは自動消去される場合があります。\n";
if(result==no){
    endmacro;
}
setactivehidemaru #hNext;
gofiletop;
while(1){
    setactivehidemaru #hNext;
    nextmark;
    if(result==false){
        break;
    }
    #line=lineno;
    setactivehidemaru #hOrg;
    moveto2 0,#line;
   
    //カラーマーカーでF4移動のほうがいいかも
    //  selectline;
    //  colormarker 0xffffff,0x0000ff,0,0,0,findmarker;
    //  escape;
    //  continue;
   
    //マークする場合
    if(marked==false){
        setmark;
        if(marked==false){
            break;
        }
    }
}
setactivehidemaru #hOrg;

[ ]
RE:37840 別ファイル名でもマーク行を維持No.37841
matushiro97 さん 19/12/17 19:32
 
>マークが溜まるのを避けて、一時的なマークのようなもので移動できる場所を作る
>としたら、カラーマーカーにするといいかもしれないです。
>colormarker文で検索の色付けと同等のカラーマーカーを付けておくと、標準のキー
>割り当てでF4(次の結果)/Shift+F4(前の結果)で移動する方法があります。

このマクロで作成したカラーマーカーはファイル名保存で別ファイル名にしても引き
継がれるでしょうか?

[ ]
RE:37841 別ファイル名でもマーク行を維持No.37843
秀丸担当 さん 19/12/18 08:49
 

カラーマーカーの情報をテキストファイルとして記憶させることは基本的にできない
です。
ライブラリにあるマクロ作者様の作られたマクロ
https://hide.maruo.co.jp/lib/index.html
や、Google検索して見つかるようなh-tomさんのマクロを使って別ファイルに情報を
記憶させておくなどをする必要があります。
(検索の色付け用のfindmarkerを使うとしたら多少改変が必要)

あるいは、やはりマークはマークのまま使うとして、マークが溜まり続けないように
作業用に使ったファイルのマークを消すような選択も付けておくといいかもしれない
です。
例えば以下のようなマクロで、マークのコピーやまとめて消すのをすると管理しやす
いと思います。

#hOrg=hidemaruhandle(0);
#hNext=hidemaruhandle(1);
menu
    "次の秀丸エディタ("+basename[#hNext]+")のマークを現在のファイルにコピー",
    "現在のファイルのマークを全て消去";
#r=result;
if(#r==1){
    setactivehidemaru #hNext;
    disabledraw;
    gofiletop;
    #c=0;
    while(1){
        nextmark;
        if(result==false){
            break;
        }
        #a[#c]=lineno;
        #c=#c+1;
    }
    setactivehidemaru #hOrg;
    disabledraw;
    #i=0;
    while(#i<#c){
        moveto2 0,#a[#i];
        if(marked==false){
            setmark;
            if(marked==false){
                break;
            }
        }
        #i=#i+1;
    }
} else if(#r==2){
    disabledraw;
    gofiletop;
    while(1){
        nextmark;
        if(result==false){
            break;
        }
        setmark;
    }
}

[ ]
RE:37843 別ファイル名でもマーク行を維持No.37844
matushiro97 さん 19/12/18 16:27
 
ご提案の方法は以下のような不都合が生じします.

ファイルAの100行にマークを付けます.
ファイル名Aで上書き保存します.
デバッグで51行から60行に10行挿入します.
マーク行は110行に移動します.
新しいファイ名Bで保存します.

この状態でファイルAのマーク情報をファイルBにコピーするとマーク行がずれます.
正しいマーク位置をコピーするためにはデバッグ後のファイルも名前Aで上書き保存
し,そのマーク情報をBにコピーしなければなりませんが,このようにするとファイ
ルAの内容が変わってしまいます.古いファイルAに戻りたい時に使えません.

マークを付けるのではなくて,
@マークを付けたい行の直前行に
//Junp
というコメントを「追加挿入」「削除」するマクロ(直前行に//Junpがなければ//Ju
npを追加,あればそれを削除),
A順に//Junpにカーソル移動するマクロ
があればそれらをキー登録することで問題は解決すると思いますが,自分ではマクロ
をかけません.
マクロの開発をお願いできないでしょうか?

お手数ですがよろしくお願いします.


[ ]
RE:37844 別ファイル名でもマーク行を維持No.37845
秀丸担当 さん 19/12/18 18:23
 

マークを使うマクロの場合は、名前を付けて保存で内容が変わったときは、その都度
Bのマークを消して、AからBにマークをコピーするといいと思います。

「//Junp」付けたり消したりするマクロだとしたら以下のような感じになります。

//「//Junp」を付けたり消したりする。
if(gettext2(0,lineno-1,10,lineno-1)=="//Junp"){
    moveto2 0,lineno-1;
    deleteline;
} else {
    insert "//Junp\n";
}
endmacro;

//上の「//Junp」に移動
setcompatiblemode 0x20000;
searchup "^//Junp$",regular;
endmacro;

//下の「//Junp」に移動
setcompatiblemode 0x20000;
searchdown "^//Junp$",regular;
endmacro;

[ ]
RE:37845 別ファイル名でもマーク行を維持No.37846
matushiro97 さん 19/12/18 20:50
 
ありがとうございました.効率的になりました.

[ ]
RE:37846 別ファイル名でもマーク行を維持No.37857
matushiro97 さん 19/12/21 14:58
 
//上の「//Junp」に移動と//下の「//Junp」に移動
のマクロですが,//Junp行の次行に移動するにはどう修正すればいいでしょうか?
もともと//Junp行は移動したい行の直前行にそうにゅうしましたから,移動先も//Ju
np行の次行に設定したいです.

お手数ですがよろしくお願いします.



[ ]
RE:37857 別ファイル名でもマーク行を維持No.37859
秀丸担当 さん 19/12/23 09:02
 

カーソルを下に移動するだけであれば
down;
を入れるだけでいいですが、おそらくそれだけだと今回の場合は不十分で、上に移動
する場合は2つ前とかにしたほうがいいです。
以下のようにするといいと思います。

//上の「//Junp」に移動
setcompatiblemode 0x20000;
#line=lineno;
searchup "^//Junp$",regular;
if(result==false){
    endmacro;
}
if(lineno==(#line-1)){
    searchup "^//Junp$",regular;
}
down;
endmacro;

//下の「//Junp」に移動
setcompatiblemode 0x20000;
searchdown "^//Junp$",regular;
if(result!=false){
    down;
}
endmacro;

[ ]
RE:37859 別ファイル名でもマーク行を維持No.37862
matushiro97 さん 19/12/23 22:12
 
このマクロだと動きませんでした。
どこかおかしいと思います。

[ ]
RE:37862 別ファイル名でもマーク行を維持No.37863
秀丸担当 さん 19/12/24 09:06
 

こちらで確認する限りでは、例えば以下ようなテキストで、「2」にカーソルがある
とき、上に移動するマクロでは「1」に移動し、下に移動するマクロでは「3」に移動
します。

//Junp
1

//Junp
2

//Junp
3

上記の結果と何か違う点があれば教えてもらえると何らかの回答はできると思います。
以前のマクロは「//Junp」に移動してそれが検索のヒット状態でしたが、今回は一行
下に移動してカーソルが普通の状態なので、既に「1」にあるときに上に移動するマ
クロだと何も起きていないようには見えるかもしれないです。

あと「//Junp」を挿入するマクロは、行頭にないと行の途中に入ってしまうので、in
sert "//Junp\n";の前にgolinetop2;をしたほうがよかったです。

マクロはサンプルを参考に、自由に書き換えてもらえばいいです。
[マクロ]→[マクロヘルプ]にマクロの説明があります。
キー操作を記録して、それを保存するとたいていの操作はマクロ化することができる
ので、if文とかの判定などが無ければ文法を知らなくてもマクロを作ることができま
す。
[マクロ]→[キー操作の記録開始/終了]で記録開始し、何らかの操作(例えば行頭に
移動してから文字入力)して、[マクロ]→[キー操作の記録開始/終了]で記録終了し、
[マクロ]→[キー操作の保存...]とすると、その操作がマクロファイルになります。


[ ]
RE:37863 別ファイル名でもマーク行を維持No.37864
matushiro97 さん 19/12/25 15:51
 
私の間違いでした.

最初の質問を,JumpをJunpとタイプミスしたので,頂いた挿入マクロの語を”Jump”
に変更しておりました.

[ ]