[ 新規に投稿する ]

開くファイルのコマンドラインでの指定についてNo.42460
Fzok4234 さん 26/01/23 12:47 [ コメントを投稿する ]
  いつもお世話になっております。Fzok4234 です。


秀丸エディタで開くファイルパスをコマンドラインから指定する場合は 1 個しか指定できず、複数の
ファイルを同時に開くことができないのは仕様である、ということでよろしいのでしょうか ?

現状では、PowerShell で次のコマンド
hidemaru aaa bbb ccc            # 引数の型は PowerShell が自動判断。
hidemaru "aaa" "bbb" "ccc"      # 展開可能文字列で明示的に System.String 型で渡す。
hidemaru 'aaa' 'bbb' 'ccc'      # 逐語的文字列で明示的に System.String 型で渡す。
をそれぞれ実行したとき、いずれの場合でも
"aaa bbb ccc"
という名前の 1 個のファイルが開かれます。別々の 3 個のファイル
"aaa"
"bbb"
"ccc"
が同時に開くわけではありません。


対象の秀丸エディタは 9.52 β10 x64 です。


[ ]
RE:42460 開くファイルのコマンドラインでの指定についてNo.42464
h-tom さん 26/01/24 09:34 [ コメントを投稿する ]
  h-tom です。

>秀丸エディタで開くファイルパスをコマンドラインから指定する場合は 1 個しか指定できず、複数の
>ファイルを同時に開くことができないのは仕様である、ということでよろしいのでしょうか ?
ファイルの指定方法によります。
https://htom.in.coocan.jp/hmfaq/4_cmdlin.html#info-1


>現状では、PowerShell で次のコマンド
>hidemaru aaa bbb ccc            # 引数の型は PowerShell が自動判断。
>hidemaru "aaa" "bbb" "ccc"      # 展開可能文字列で明示的に System.String 型で渡す。
>hidemaru 'aaa' 'bbb' 'ccc'      # 逐語的文字列で明示的に System.String 型で渡す。
>をそれぞれ実行したとき、いずれの場合でも
>"aaa bbb ccc"
>という名前の 1 個のファイルが開かれます。別々の 3 個のファイル
コマンドプロンプトだとダブルクォートで囲めば問題ないので、PowerShell側の問題でしょう。

PowerShell上で上記3つの例を直接入力してみたけど、全部「aaa bbb ccc」で渡されてますね。
ダブルクォートをエスケープしてみたり、変数にダブルクォート含めて格納して展開しても、
変なエスケープが勝手に入るしPowerShellはよくわかりません。

どこかPowerShellのコミュニティがあれば聞いてみた方が早いかも。
[ ]
RE:42464 開くファイルのコマンドラインでの指定についてNo.42466
秀丸担当 さん 26/01/26 09:32 [ コメントを投稿する ]
  コメントありがとうございます。
コマンドラインでダブルクォーテーションでくくる書き方は、ヘルプにも書いておこうと思います。
[ ]
RE:42464 開くファイルのコマンドラインでの指定についてNo.42467
Fzok4234 さん 26/01/26 09:48 [ コメントを投稿する ]
  少し調べたところ、以下の挙動になっていることが判りました。

1. PowerShell から起動する場合。
   
   1.1. ファイル名を無加工で引数として渡す場合。
        次のコマンドライン
        hidemaru aaa bbb ccc
        hidemaru "aaa" "bbb" "ccc"
        hidemaru 'aaa' 'bbb' 'ccc'
        とした場合、秀丸エディタに渡る全体のコマンドラインは
        "<インストールディレクトリのフルパス>\Hidemaru.exe" aaa bbb ccc
        というように、アプリ名は「"」で括られた絶対パスになり、各ファイル名は「"」で括られていません。
        このとき、開くファイルは
        "aaa bbb ccc"
        の 1 個のファイルとなります。
   
   1.2. ファイル名に明示的に「"」を含ませる場合。
        次のコマンドライン
        hidemaru '"aaa"' '"bbb"' '"ccc"'
        とした場合、秀丸エディタに渡る全体のコマンドラインは
        "<インストールディレクトリのフルパス>\Hidemaru.exe" "aaa" "bbb" "ccc"
        というように、アプリ名は「"」で括られた絶対パスになり、各ファイル名は「"」で括られます。
        このとき、各ファイルが実際に存在するかどうかで挙動が変わってきます。
        
        1.2.1. 各ファイルがまだ存在しないとき。
               開くファイルは
               "aaa"
               の 1 個だけが新規作成扱いとなります。
        
        1.2.2. 各ファイルが既に存在するとき。
               開くファイルは
               "aaa"
               "bbb"
               "ccc"
               の 3 個全てとなります。

2. コマンドプロンプトから起動する場合。
   
   2.1. ファイル名を無加工で引数として渡す場合。
        次のコマンドライン
        hidemaru aaa bbb ccc
        とした場合、秀丸エディタに渡る全体のコマンドラインは
        hidemaru  aaa bbb ccc
        というように、アプリ名は入力されたそのままの文字列で「"」で括られず、各ファイル名も「"」で
        括られていません。また、アプリ名の直後の空白文字は 2 個となります。このとき、開くファイルは
        1.1.の時と同様に
        "aaa bbb ccc"
        の 1 個のファイルとなります。
   
   2.2. ファイル名を「"」で括る場合。
        次のコマンドライン
        hidemaru "aaa" "bbb" "ccc"
        とした場合、秀丸エディタに渡る全体のコマンドラインは
        hidemaru  "aaa" "bbb" "ccc"
        というように、アプリ名は入力されたそのままの文字列で「"」で括られず、各ファイル名は「"」で
        括られます。また、アプリ名の直後の空白文字は 2 個となります。このとき、1.2.の時と同様に
        各ファイルが実際に存在するかどうかで挙動が変わってきます。
        
        2.2.1. 各ファイルがまだ存在しないとき。
               開くファイルは 1.2.1.の時と同様に
               "aaa"
               の 1 個だけが新規作成扱いとなります。
        
        2.2.2. 各ファイルが既に存在するとき。
               開くファイルは 1.2.2.の時と同様に
               "aaa"
               "bbb"
               "ccc"
               の 3 個全てとなります。

これらのことから考察できることは、PowerShell でファイル名を指定して秀丸エディタを起動する場合、
1.2.の場合のように
hidemaru '"aaa"' '"bbb"' '"ccc"'
というように、ファイル名を逐語的文字列で指定して明示的に「"」を含ませることによって、確実な動作が
保証されるということです。

ただ、この場合大きな問題があります。

1. tab キーによる入力補完が利かない。
   PowerShell には、コマンドライン引数を入力中に tab キーを押すと、存在するファイル名を自動的に
   補完する機能があります。しかし、逐語的文字列の「'」の後に「"」を入力した場合、この入力補完が
   一切動作しなくなってしまいます。このため、このような引数の記述方法は大変不便なものとなります。

2. 指定のファイルが全て実際に存在していなければならない。
   まだ存在していない複数のファイルを新規作成する意図でこのように引数を記述しても、新規作成として
   開かれるのは引数の配列の先頭の 1 個だけとなってしまいます。

まとめると、現在の秀丸エディタでのコマンドラインの解釈方法は、ユーザーが CLI シェルをコマンドプロンプトから
PowerShell に移行するといった、「ユーザー環境のモダン化」を著しく妨げる要因となっていると言えます。
秀丸担当にはこのことをよく理解した上でコマンドラインの解釈方法の修正をお願いしたいところであります。


[ ]
RE:42466 開くファイルのコマンドラインでの指定についてNo.42468
Fzok4234 さん 26/01/26 10:09 [ コメントを投稿する ]
  どうやら行き違いになったようですね。

> コマンドラインでダブルクォーテーションでくくる書き方は、ヘルプにも書いておこうと思います。

とのことですが、PowerShell でこれをやろうとすると
hidemaru '"aaa"' '"bbb"' '"ccc"'
というように、ファイル名を「'」で括った逐語的文字列の中に明示的に「"」を入れる書き方になって
しまいます。

この場合、PowerShell による tab キーでのファイル名の入力補完が一切動作しないため、この書き方での
ファイル名指定は大変不便です。

また、それぞれのファイル
"aaa"
"bbb"
"ccc"
が既に実際に存在している状態でないとうまく動作しません。それぞれのファイルがまだ存在していない状態で
新規作成のウィンドウを複数開くつもりでこのコマンドを実行しても、1 番目のファイル名の
"aaa"
のウィンドウしか開かない状態です。

当方では CLI シェルをコマンドプロンプトから PowerShell に乗り換えていますが、現状の仕様はこの
「環境のモダン化」を著しく妨げている状態です。PowerShell から普通に
hidemaru aaa bbb ccc

hidemaru 'aaa' 'bbb' 'ccc'
で正しく動作させることができるよう、修正のほうよろしくお願い申し上げます。


[ ]
RE:42467 開くファイルのコマンドラインでの指定についてNo.42470
Iranoan さん 26/01/26 15:23 [ コメントを投稿する ]
  秀丸担当さん、Fzok4234 さんこんにちは Iranoan です
> 少し調べたところ、以下の挙動になっていることが判りました。

> 1. PowerShell から起動する場合。
まず前提として、PowerShell のバージョンなどそちらの環境は?
PowerShell (以下 PS )は標準搭載されているけれど、現在メンテナンスモードに移行している Ver.5 と最新版の 7 では引数の扱いでさえ差があるようです

私の Windows 11 Home 25H2 OS ビルド 26200.7628 の環境では、
& "C:\Program Files\Hidemaru\Hidemaru.exe" '"a.c""b.c""c.c"'

・先頭に「&」をつけバックグランドを明示するか、秀丸エディタのインストール先にパスを通し実行ファイル名のみ記載する
・ファイル名それぞれを「"」ではさむ
・更に全体を「'」で挟み空白を入れない
  空白を入れると、無題のファイルも開かれる
  もしくは Fzok4234 さんが確認したように個別に「"」「'」の両方で括る
とすれば、PS Ver.5 では開けましたが、Ver.7 では一切開けず、ファイル・オープン・ダイアログが開かれ、カレントフォルダの移動に失敗しました

他には vscode でも試しましたが、こちら途中に空白があっても OK で Ver.5,7 どちらも開けました
よって少なくとも複数ファイル指定時に「"」「'」の両方で括る必要があるのは、どのアプリも共通と考えられます


何にしても、入力時に個々のキーがどの様に働くのか? 引数をどの様に渡すのか? まではターミナル・アプリやシェルの役割、もしくは設定依存なので、
> 1. tab キーによる入力補完が利かない。
<snip>
> 2. 指定のファイルが全て実際に存在していなければならない。
は、秀丸エディタには何の関わりも有りません
そのため
> 秀丸担当にはこのことをよく理解した上でコマンドラインの解釈方法の修正をお願いしたいところであります。
の様にここに修正依頼できる内容では有りません
繰り返しになりますが、コマンドラインの解釈はシェルの役割です
「"」「'」の入力は補完完了後に行うなど PS の書き方に慣れるか、別のシェルを使うしか無いです

あえて改善・修正が必要なのは
> Ver.7 では一切開けず、ファイル・オープン・ダイアログが開かれ、カレントフォルダの移動に失敗しました
についてかもしれませんが、これも標準搭載されるまでに気長に待てば良い気がします
[ ]
RE:42470 開くファイルのコマンドラインでの指定についてNo.42473
Fzok4234 さん 26/01/26 16:03 [ コメントを投稿する ]
  情報ありがとうございます。

ここで挙げている PowerShell は、OS に標準添付の Windows PowerShell 5.1 のことを示しています。

ただ、これも近年若干レガシー扱いされ始めているため、近々クロスプラットフォーム版の
PowerShell 7.5 以降に乗り換えることを検討中です。


[ ]

[ 新規に投稿する ]