push/popで複数場所の複数行移動No.33800
tok さん 14/12/26 14:52
 
00000000
11111
22222222
3333333
444444
55555555
という状態の時に
111,333,444の行を切り取り(3回、push)して
5555の下にカーソル移動し,
ペースト(3回、pop)して

00000000
22222222
55555555
11111
3333333
444444
という状態にしたい(push/popで複数場所の複数行移動)
のでマクロに挑戦していますが、
苦戦しています。
最後はpoppasteで決めると思うんですが、
最後に切り取ったものしか復元できない状況です。
何かヒントをいただけないでしょうか。
tok

[ ]
RE:33800 push/popで複数場所の複数行移動No.33801
IKKI さん 14/12/26 15:16
 
tok さん、こんにちは。ユーザーの IKKI と申します。

手元で試した限りでは、以下のマクロで仕様通りの結果が得られました。

setcompatiblemode 0x20200;
showcliphist;
searchdown2 "11111\\n", regular;
cut;
showcliphist;
searchdown2 "3333333\\n", regular;
cut;
showcliphist;
searchdown2 "444444\\n", regular;
cut;
showcliphist;
searchdown2 "55555555\\n", regular;
escape;
movetolineno 1, lineno + 1;
showcliphist;
poppaste2;
showcliphist;
poppaste2;
showcliphist;
poppaste2;
showcliphist;

showcliphist; は動作確認用です。[閉じる] を押すと次へ進みます。

クリップボード履歴を利用するには、動作環境で「秀丸エディタを常駐」を ON にし、
かつ、「クリップボード履歴を取る」も ON にする必要があります。
もしこれらが ON でも最後の履歴しか取れないのであれば、その他の設定が影響して
いるか、
または不具合の可能性がありますので、秀丸担当さんからの返信を待った方がいいか
もしれません。


ところで、行の順番を入れ替えることが最終目的なら、クリップボードを使うまでも
なく、正規表現置換だけで簡単にできます。

replacedown "^(.+)\\n(.+)\\n(.+)\\n(.+)\\n(.+)\\n(.+)$", "\\1\\n\\3\\n\\6\\n
\\2\\n\\\4\\n\\5", regular;

[ ]
RE:33801 push/popで複数場所の複数行移動No.33802
秀丸担当 さん 14/12/26 15:50
 

poppasteは、クリップボード履歴がONになっていることがまず前提になっている
ので、もしOFFだとしたら、ONにされるといいと思います。
[その他]→[動作環境]→[常駐機能]でON/OFFを変更できます。

poppasteはカーソル位置が動作環境によって違うので、順番を保つには
poppaste2のほうがいいと思います。

pushするマクロは、

  cutline;

で、popするマクロは、

  poppaste2;

とすると、言われている通りになるはずです。
これだけであれば、マクロでなくてもキー割り当てで、クリップボード系の
「行を切り抜き」コマンドと、「貼り付け+履歴戻し2」を割り当てるだけでも
できます。

もしそれでうまくいかないとしたら、クリップボード履歴がうまく取れていない
可能性もあると思います。
クリップボード履歴はWindows全体で有効で、他のソフトが履歴を取ることを妨
げている可能性もあります。
関連するオプションとして、[その他]→[動作環境]→[その他トラブル対策]に、
「クリップボードの監視に新しい方式(Clipboard Format Listener)を使う 」
というオプションがあります。
あと、[その他]→[動作環境]→[常駐機能]で「秀丸エディタでのみ履歴を取る」
をONにしておくと、クリップボード履歴は秀丸エディタ内でのみの動作になりま


[ ]
RE:33802 push/popで複数場所の複数行移動No.33803
tok さん 14/12/26 16:52
 
>これだけであれば、マクロでなくてもキー割り当てで、クリップボード系の
>「行を切り抜き」コマンドと、「貼り付け+履歴戻し2」を割り当てるだけでも
>できます。


>関連するオプションとして、[その他]→[動作環境]→[その他トラブル対策]に、
>「クリップボードの監視に新しい方式(Clipboard Format Listener)を使う 」

>あと、[その他]→[動作環境]→[常駐機能]で「秀丸エディタでのみ履歴を取る」
>をONにしておくと、クリップボード履歴は秀丸エディタ内でのみの動作になりま
>す

以上の設定で希望の機能実現ができました。
Ctrl_Y push
Ctrl_V pop
ありがとうございました。

[ ]
RE:33801 push/popで複数場所の複数行移動No.33804
tok さん 14/12/26 17:14
 
>ところで、行の順番を入れ替えることが最終目的なら、クリップボードを使うまで
>もなく、正規表現置換だけで簡単にできます。
>
>replacedown "^(.+)\\n(.+)\\n(.+)\\n(.+)\\n(.+)\\n(.+)$", "\\1\\n\\3\\n\\6\\
>n\\2\\n\\\4\\n\\5", regular;

IKKIさん、アドバイスありがとうございます。

F7に行Down,F8に行Upの機能を組み込んでいるので、
多少のことならこの上下移動でことを足らしているのですが、
たとえば現在行が1行目だとして、
887行目と890行目をここに持ってきたい場合などに
この「push/popで複数場所の複数行移動」というのを
考えた次第です。

秀丸担当さんのおかげで機能実現はできました。
正規表現は何度見てもちんぷんかんぷんですが、
能力はすごそうですね。
ありがとうございました。
tok

[ ]