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/USERNA
ME/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/USERNA
ME/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を作る
>方法もできるようになるかもしれないです。

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

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

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

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

[ ]