[要望]検索時の前後の空白除去
-
Webページから検索したい文字列をコピーしMeryで検索した際に、コピーした文字列の前後に空白が入っているためマッチしないことがあります。
そこで検索時に、検索文字列の前後に空白があれば除去していただけないでしょうか。
もしくはそういうオプションを用意していただけるとうれしいです。改行+検索したい文字列 の場合もあるので、前後の改行も除去していただけると、なおうれしいです。
| 井上 | 返信 -
Mery をお試しくださりありがとうございます。
> Webページから検索したい文字列をコピーしMeryで検索した際に、コピーした文字列の前後に空白が入っているためマッチしないことがあります。
確かにそういったシーンは時々ありますね ^^;ただ、クリップボードの内容の改変となるとテキストエディタの機能からは少し外れてしまうように思います。普通に空白を含めてコピーしたい人もいますから…。
クリップボードの空白除去などができるフリーソフト「CT Converter」というものがありますので、試してみてはいかがでしょうか?
↓ 参考URL
https://forest.watch.impress.co.jp/docs/serial/okiniiri/600478.html| Kuro | 返信 -
>>井上さん
マクロにしてみました。勉強不足ゆえ色々と制限があるのはご容赦を。
アイコンインデックスは 1, 2, 3, 17, 18, 19 あたりからお好みのをどうぞ。#title = "トリム&検索"
#icon = "Mery用 マテリアルデザインっぽいアイコン.icl",17
// クリップボードの文字列データの 先頭/末尾 から、改行/タブ/半角スペース を除去して、検索ダイアログに貼り付ける
var cb = ClipboardData.GetData();
var trimedCb = cb.replace( /^\s*(.*?)\s*$/m , "$1" );
document.selection.Find( trimedCb , meFindNext | meFindAround );
editor.ExecuteCommandByID( MEID_SEARCH_FIND = 2133 ); // 検索ダイアログを開く/*
* 先頭末尾に空文字要素が多重についていたり文字列部分が複数行だとダメっぽい。 :(
* 「改行+タブ+スペース+文字列+スペース+タブ+改行」ぐらいだったら「文字列」だけを取り出せるけど、
* 改行がいっぱいくっついているとうまくいかない。
* 「検索ダイアログへの文字列の貼り付ける」だけっていう記述法がわからなかったので、
* マクロを実行すると検索ダイアログへの文字列の貼り付けと「次を検索」が同時におこなわれて、エディタがスクロールしてしまう。
*/| sukemaru | 返信 -
情報ありがとうございます。
試してみます。> Mery をお試しくださりありがとうございます。
>
> > Webページから検索したい文字列をコピーしMeryで検索した際に、コピーした文字列の前後に空白が入っているためマッチしないことがあります。
> 確かにそういったシーンは時々ありますね ^^;
>
> ただ、クリップボードの内容の改変となるとテキストエディタの機能からは少し外れてしまうように思います。普通に空白を含めてコピーしたい人もいますから…。
>
> クリップボードの空白除去などができるフリーソフト「CT Converter」というものがありますので、試してみてはいかがでしょうか?
>
> ↓ 参考URL
> https://forest.watch.impress.co.jp/docs/serial/okiniiri/600478.html| 井上 | 返信 -
マクロありがとうございます。
試したところ、困っていたケースで、バッチリ動きました!マクロを実行するだけで、トリムだけでなく検索まで行うのも嬉しいです。
ありがとうございました。> >>井上さん
> マクロにしてみました。勉強不足ゆえ色々と制限があるのはご容赦を。
> アイコンインデックスは 1, 2, 3, 17, 18, 19 あたりからお好みのをどうぞ。
>
> #title = "トリム&検索"
> #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",17
> // クリップボードの文字列データの 先頭/末尾 から、改行/タブ/半角スペース を除去して、検索ダイアログに貼り付ける
> var cb = ClipboardData.GetData();
> var trimedCb = cb.replace( /^\s*(.*?)\s*$/m , "$1" );
> document.selection.Find( trimedCb , meFindNext | meFindAround );
> editor.ExecuteCommandByID( MEID_SEARCH_FIND = 2133 ); // 検索ダイアログを開く
>
> /*
> * 先頭末尾に空文字要素が多重についていたり文字列部分が複数行だとダメっぽい。 :(
> * 「改行+タブ+スペース+文字列+スペース+タブ+改行」ぐらいだったら「文字列」だけを取り出せるけど、
> * 改行がいっぱいくっついているとうまくいかない。
> * 「検索ダイアログへの文字列の貼り付ける」だけっていう記述法がわからなかったので、
> * マクロを実行すると検索ダイアログへの文字列の貼り付けと「次を検索」が同時におこなわれて、エディタがスクロールしてしまう。
> */| 井上 | 返信 -
>>井上さん
> 試したところ、困っていたケースで、バッチリ動きました!
> マクロを実行するだけで、トリムだけでなく検索まで行うのも嬉しいです。個人的には「次を検索」まで実行されてしまいエディタ内部がスクロールしてしまうのはいやだなぁ… とおもっていたのですが、
ご希望どおりの動作ということでよかったです。
一応、当初の条件どおりの動作をするように改変したマクロも置いておきます。※『現在の編集モードのプロパティ』マクロからコードを一部流用してみたところ、「次を検索」なしで
「クリップボードの文字列データの 先頭/末尾 から、改行/タブ/半角スペース を除去して、検索ダイアログに貼り付ける」
ようにできました。
※こちらの場合、検索ダイアログ内のオプションのチェックボックスの状態は、前回の検索条件から引きつがれます。#title = "トリム&検索"
#icon = "Mery用 マテリアルデザインっぽいアイコン.icl",17
// クリップボードの文字列データの 先頭/末尾 から、改行/タブ/半角スペース を除去して、検索ダイアログに貼り付けるvar cb = ClipboardData.GetData(); // クリップボードの文字列データを cb に格納
var trimedCb = cb.replace( /^\s*(.*?)\s*$/m , "$1" ); // クリップボードの文字列データをトリミング
var shell = new ActiveXObject( "WScript.Shell" );ClipboardData.SetData( trimedCb ); // クリップボードの文字列データを置き換える
shell.SendKeys( '^V' ); // キーストローク Ctrl+V を送信する ( Ctrl=^ / Shift=+ / Alt=% )
editor.ExecuteCommandByID( MEID_SEARCH_FIND = 2133 ); // 検索ダイアログを開く/*
* 先頭末尾に空文字要素が多重についていたり文字列部分が複数行だとダメっぽい。 :(
* 「改行+タブ+スペース+文字列+スペース+タブ+改行」ぐらいだったら「文字列」だけを取り出せるけど、
* 改行がいっぱいくっついているとうまくいかない。
*/オマケ
#title = "トリム&貼り付け"
// クリップボードの文字列データの 先頭/末尾 から、改行/タブ/半角スペース を除去して、エディタに貼り付ける
// 選択範囲があるばあいは、上書きで貼り付け
var cb = ClipboardData.GetData();
document.selection.Text = cb.replace( /^\s*(.*?)\s*$/m , "$1" );| sukemaru | 返信 -
> /*
> * 先頭末尾に空文字要素が多重についていたり文字列部分が複数行だとダメっぽい。 :(
> * 「改行+タブ+スペース+文字列+スペース+タブ+改行」ぐらいだったら「文字列」だけを取り出せるけど、
> * 改行がいっぱいくっついているとうまくいかない。
> */
いまさらですが、今度のは複数行のコピペで空文字要素や改行がいっぱいあっても大丈夫 …なはず。#title = "トリム&検索" // クリップボードの文字列データの(各行の) 先頭/末尾 から、改行/タブ/半角スペース を除去して、検索ダイアログに貼り付ける var nl = ""; // 改行を残すなら nl = "\n"; / 改行を除去するなら nl = ""; function trimCb( arg1 ) { var a = arg1.split( "\n" ); // 文字列全体を "\n" で区切る for ( var i = 0; i < a.length; i++ ) // 「1行め」から「st の行数」回分だけ繰りかえし処理 a[i] = a[i].replace( /^\s*(.*?)\s*$/ , "$1" ); // 各行をトリミング return a.join( nl ); // 各行を連結しなおした文字列を返す } var cb = ClipboardData.GetData(); var trimedCb = trimCb( cb ); var shell = new ActiveXObject( "WScript.Shell" ); ClipboardData.SetData( trimedCb ); // クリップボードの文字列データを置き換える shell.SendKeys( '^V' ); // キーストローク Ctrl+V を送信する ( Ctrl=^ / Shift=+ / Alt=% ) editor.ExecuteCommandByID( MEID_SEARCH_FIND = 2133 ); // 検索ダイアログを開く
一応、オマケの「トリム&貼り付け」のほうも。
#title = "トリム&貼り付け" // クリップボードの文字列データの(各行の) 先頭/末尾 から、改行/タブ/半角スペース を除去して、エディタに貼り付ける var nl = "\n"; // 改行を残すなら nl = "\n"; / 改行を除去するなら nl = ""; function trimCb( arg1 ) { var a = arg1.split( "\n" ); // 文字列全体を "\n" で区切る for ( var i = 0; i < a.length; i++ ) // 「1行め」から「st の行数」回分だけ繰りかえし処理 a[i] = a[i].replace( /^\s*(.*?)\s*$/ , "$1" ); // 各行をトリミング return a.join( nl ); // 各行を連結しなおした文字列を返す } var cb = ClipboardData.GetData(); document.selection.Text = trimCb( cb );
うちのPCはXPなので、「トリム」といいながら trim メッソドは使えず replace です。 :P
| sukemaru | 返信 -
return a.join( nl ) // 各行を連結しなおした文字列を返す
は
return a.join( nl ).replace( /(^\n*|\n*$)/g , "" ); // 各行を連結しなおす & 先頭/末尾の空行を削除
のほうがよかったかも? ですね。 orz| sukemaru | 返信