[秀丸エディタ]保存する時に編集した行のNo.40076
ohtorii さん 22/10/11 13:10
 
お疲れ様です、Ohtoriiです

秀丸エディタの要望です


ファイルを保存する時に”編集した行だけ行末の空白を除去”したいです。

現在の動作はファイル全体が対象なので、ファイル差分が大量に発生する場合があり
使いにくいです。
 →特に共同作業を行っている場合にファイル差分が大量に発生しがちです


設定ダイアログは以下のイメージです 

ファイルタイプ別の設定→その他→保存・読込み→保存する時の変換
□保存する時に行末の空白を除去する
 □編集した行のみ ←New!!


よろしくお願いいたします。

[ ]
RE:40076 [秀丸エディタ]保存する時に編集No.40078
秀丸担当 さん 22/10/11 16:06
 
編集した行だけ、保存するときの変換ができたらいいです。
編集マークがあるので簡単にできそうかと思って試してみたら、ちょっといまいちな
点がありました。
[その他]→[動作環境]→[編集]→[高度な編集]→[編集した行の表示方法]→[保存し
たら消す]は標準でONですが、これがONになっていると、編集マークが消えるので都
合が悪かったです。
保存したそのときはいいのですが、編集マークが消えた後にもう一度保存すると復活
してしまいます。
読み込みし直しをすると、アンドゥ情報が消えてしまいます。
編集マークを消さない設定との組み合わせ限定であればいいですが、どうでしょうか。

[ ]
RE:40076 [秀丸エディタ]保存する時に編集No.40079
Iranoan さん 22/10/11 16:08
 
ohtorii さんこんにちは Iranoan です
> ファイルを保存する時に”編集した行だけ行末の空白を除去”したいです。
>
> 現在の動作はファイル全体が対象なので、ファイル差分が大量に発生する場合があ
>り使いにくいです。
>  →特に共同作業を行っている場合にファイル差分が大量に発生しがちです
採用するかどうかは、開発側の判断なので、反対というわけではないのですが…

これはツールでどうすべきか? 以前に、まずは共同作業者間で共通ルールを定めてお
くべきできでないでしょうか?

また行末空白が差分の発生で問題なら、オプションを追加するのではなく
> □保存する時に行末の空白を除去する
を OFF にすれば済む気がします

最後に気になった点として、本当に差分が発生することが問題なのでしょうか?
差分ができることではなく差分を確認する時にノイズとなっているなら、秀丸で差分
表示する時のオプション追加が有ったほうが便利な気がします
例えば現在は空白関係として、「空白とタブは無視して比較する」と無視、存在しな
いものとするオプションしかありませんが
・半角スペースとタブの違い無視する
・行頭の空白を無視する
・行末の空白を無視する
といったオプションです

[ ]
RE:40078 [秀丸エディタ]保存する時に編集No.40080
ohtorii さん 22/10/11 21:38
 
秀丸担当さま
お疲れ様です

>編集マークを消さない設定との組み合わせ限定であればいいですが、どうでしょう
>か。

”保存する時に編集した行のみ行末の空白を削除”は直交した機能なので、
もし実装していただけるなら腰を据えた対処をお願いいたしますm(__)m

あと、自動起動マクロ(保存直前)での実装も考えましたが、
”ファイル全体・行単位”とステップを刻んで制御出来ても良いと思い投稿しました!

よろしくお願いいたします。

[ ]
RE:40080 [秀丸エディタ]保存する時に編集No.40081
秀丸担当 さん 22/10/12 09:24
 
設定としても別の位置づけなので、やめておこうと思います。
編集マークを消えない設定にして使っていたら、保存が実行されているか不安でした。
やるとしたら編集マークを使った方法ではなく、もうちょっと凝った方法になると思
います。
そういうネタということにさせていただきます。

[ ]
RE:40080 [秀丸エディタ]保存する時に編集No.40083
igus さん 22/10/13 06:28
 
ohtoriiさん、こんにちは
試しに作ってみたのですが、こんな感じでどうでしょう

//保存直前.mac

setcompatiblemode 0x00020000;
#x=x;#y=y;
disabledraw;begingroupundo;gofiletop;escape;
#i=0;#j=0;
while(1){
  goupdatedown;
  if(!result)break;
  #y1[#i]=y;
  goupdatedown;
  if(!result)gofileend;
  goupdateup;#y2[#i]=y;#i=#i+1;
}
while(#j<#i){
  moveto 0,#y1[#j];beginsel;moveto 0,#y2[#j];golineend2;
  replaceallfast "([  ]*)$","",regular,inselect;
  #j=#j+1;
}
moveto #x,#y;
endgroupundo;enabledraw;endmacro;

[ ]