[ 新規に投稿する ]

WSL2 上の ext4 ファイルシステムにあるファイルのグレップについてNo.40488
電車 さん 23/04/20 10:04 [ コメントを投稿する ]
  お世話になります。
VS Code全盛の中、どうしても秀丸エディタから離れられないおっさんです。

WSL2 の Ubuntu の中にネイティブに配置してある(=「/mnt/c」 などではなく、「\\wsl.localhost\Ubuntu」配下)ディレクトリの場合、
そこにおけるグレップの実行速度がだいぶ遅くなります。(800件のヒットで体感4倍ぐらい)

そこで苦肉の策で、「プログラム実行」から下記のようなコマンドを叩いて、速度低下のストレスを回避しています。

wsl grep -rnF  '検索文字列'  --include="*.rb" --include="*.erb" /home/USERNAME/source/ | sed 's/\:\([0-9]\+\)/\(\1\)/g'

自分でもっと使いやすいマクロを組めよ、と言われればそれまでですが、
秀丸エディタのグレップの設定ウインドウに「WSL上のパスを検索する」みたいなチェックがあって、
同じインターフェースを使えたら、この上ない喜びでございます。

何卒ご検討いただけましたら幸いです。
[ ]
RE:40488 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40491
秀丸担当 さん 23/04/20 16:06 [ コメントを投稿する ]
  WSL2のある環境で\\wsl.localhost\Ubuntu.XXXX配下のものをgrepしてみたら、確かに通常のローカルファイルよりも遅いようでした。
内容によるかもしれないですが、試したところではローカル:WSL2=3:8くらいの感じでした。

wslのコマンドラインで対策されているとのことで、これを秀丸エディタのgrepの実行と入れ替える仕組みを作るのは難しそうです。
正規表現の方言も違うと思います。

秀丸エディタのgrepの方式によっても違うことがあります。
grepの実行ダイアログで、エンコードの種類が自動判定になっていて、[その他]→[動作環境]→[ファイル]→[エンコード1]が、[優先順位に従う]になっているとファイルシステムの影響があるかもしれません。
エンコードの種類を明示指定するか、自動判定でも[最初に確定したものにする]がいい場合があります。

あと、ファイルシステムに関わらず速度に影響することとしては、grepの実行で[追加の条件]がONだと遅いです。
[その他]→[動作環境]→[検索]→[grepの動作]→[文字数制限の設定]が、[制限なし]だと遅く、[高速]だと速いです。
[ ]
RE:40491 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40495
電車 さん 23/04/20 17:40 [ コメントを投稿する ]
  早速のお返事ありがとうございました!
やはり難しいのですね。無理を申し上げてすいませんでした。

アドバイスも頂き、ありがとうございます。
頂いたアドバイスも試してみましたが、鈍感なのかさほど変化を体感できず。。。

ひとまず「プログラム実行」から頑張る方針にしました。


ところで、その「プログラム実行」ですが、
↓ の '検索文字列' に設定項目「標準入力」の「選択範囲の内容」を流しこみたい場合、

wsl grep -rnF  '検索文字列'  --include="*.rb" /home/USERNAME/source/

どのように記述したらよろしいでしょうか?

例えば
wsl grep -rnF  $SELECTED_AREA  --include="*.rb" /home/USERNAME/source/

みたいな受け取り方ができたりしますでしょうか?

重ねてのご質問で恐縮ですが、ご教授いただけましたら幸いです。


[ ]
RE:40495 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40496
秀丸担当 さん 23/04/21 09:06 [ コメントを投稿する ]
  プログラム実行では、%fをファイル名にするなどの書き方はあるのものの、範囲選択の内容にすることはできないです。
やるとしたら、マクロでやるしかないです。

マクロの例:(プログラム実行に入力ではない)
runex "wsl grep -rnF '"+getselectedtext()+"""' --include="*.rb" /home/USERNAME/source/""",1,0,"",4;

これをそのままだと、コマンドラインに生の文字列が入るので、複数行だったり'〜'の何かエスケープだったり、想定外の文字列が入るとよくわからない動作になるかもしれません。
調べてみたらwslのgrepで標準入力を検索文字列にする方法があるようです。
以下のようにしてみたら一応できるようでした。

プログラム実行の例:(標準入力に範囲選択を指定)
wsl grep -rnF -e "$(cat -)" --include="*.rb" /home/USERNAME/source/
[ ]
RE:40496 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40500
電車 さん 23/04/21 20:02 [ コメントを投稿する ]
  お返事ありがとうございました!

>プログラム実行の例:(標準入力に範囲選択を指定)
>wsl grep -rnF -e "$(cat -)" --include="*.rb" /home/USERNAME/source/

↑思い通りに動きました!!さすがでございます。
本当にありがとうございました!!!
[ ]
RE:40500 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40530
電車 さん 23/05/11 00:14 [ コメントを投稿する ]
  結局、ちまちまと時間を使って、マクロを仕上げました!
もしお手すきのときがございましたら、ご覧いただけましたら幸いです。
(ダラダラと長いですが、コアはサブルーチン ExecuteGrepInWsl だけです。)

https://gist.github.com/densya203/886a908406c9dfc853592f5e8fd59531
[ ]
RE:40530 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40532
秀丸担当 さん 23/05/11 12:26 [ コメントを投稿する ]
  マクロを作られたということで、試してみて、速くていい感じでした。
ダイアログに田楽DLLを使われているということで、最初32bit版かと思ったのですが、32bit版ではwslコマンドは無いのですね。
64bit版でできました。
[ ]
RE:40532 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40538
電車 さん 23/05/11 17:07 [ コメントを投稿する ]
  試していただけたのですね!ありがとうございます!
やはり runex を教えていただけたのが大きかったです。

WSLは 64bit版 Windowsでないと入れられないみたいです。
今日知りました笑
https://learn.microsoft.com/ja-jp/windows/wsl/install#prerequisites

私の環境は 

64bit版 Windows10 に公式サイトの注意書き通り
32bit版 秀丸を入れております。

恥ずかしながら、田楽DLLは、たまたま参考にしたマクロで使われていたから、採用しただけなのです。

近年の手法とは外れているのかな?とも思いつつ(半角の「キャンセル」ボタンとかレトロで・・・)、調査不足で・・・

# ChatGPT も秀丸マクロのことはちっとも知りません。


もしよろしければ、「JavsScriptで書くのが主流」みたいな、最近の秀丸マクロでダイアログを生成する定番があればご教授頂けますと幸いです!
[ ]
RE:40538 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40541
秀丸担当 さん 23/05/12 09:57 [ コメントを投稿する ]
  秀丸マクロでダイアログを表示する方法は基本的には無いです。
最近であれば、こみやんまさんが作られている一連のシリーズのどれかだと最近っぽいかもしれないです。
どれが一般的かというとわからないです。すみません。
V9.22βではブラウザ枠やレンダリング枠ができて、これからこれを使ってUIを作る方法もできるようになるかもしれないです。
[ ]
RE:40541 WSL2 上の ext4 ファイルシステムにあるファイルのグNo.40546
電車 さん 23/05/12 11:40 [ コメントを投稿する ]
  お返事ありがとうございました!

>V9.22βではブラウザ枠やレンダリング枠ができて、これからこれを使ってUIを作る方法もできるようになるかもしれないです。

スマホアプリっぽい感じですね。楽しみです。

>秀丸マクロでダイアログを表示する方法は基本的には無いです。
>最近であれば、こみやんまさんが作られている一連のシリーズのどれかだと最近っぽいかもしれないです。
>どれが一般的かというとわからないです。すみません。

ありがとうございます。
実は秀丸さんのこのゆる〜い感じのノリ、私の性格にあっていまして(笑)、これからも、(おそらく死ぬまで)秀丸を使わせていただくと思います。

どうぞお体に気をつけて、ゴルフ頑張ってくださいませ!
[ ]

[ 新規に投稿する ]