Linux 用 Windows サブシステムで Ranger を使用してファイルを開く動作

Linux 用 Windows サブシステムで Ranger を使用してファイルを開く動作

私はLinux用のMicrosoft Windows([バージョン10.0.15063])サブシステムを使用していますが、BashでRangerファイルマネージャを使用してファイルを開くときに予期しない動作が観察されました。

たとえば、Sublime Text 3で.txt拡張子を開くには、~/.config/rifle.confを設定しました。

ext txt = "/mnt/c/Program Files/Sublime Text 3/sublime_text.exe" "$@"

Enterキーを押してデータを含む既存のテキストファイルを開くと、Sublimeはファイルを開きますが、Sublimeに表示されるファイルには実際のテキスト/データはありません。ファイルを閉じてWindowsファイルエクスプローラを使用して開くと、テキストはすぐそこにあります。

興味深いことに、Sublimeが見るパスは「C\mnt\c\path\to\my\file.txt」です。

これはWindowsで/ mntを見ることができない問題ですか? WSLでRangerを私のファイルマネージャとして使用したいと思います。この動作を見た人がいて、修正を見つけた人はいますか?みんなありがとうございます!

答え1

laktakが説明したように、WSLはファイルパスをUnixパスからWindowsパスに変換しません。ちょうど1つだけ書きました。ポイント私がこの問題を処理した方法は次のとおりです。

Windows 10 Fall Creators UpdateがインストールされているWSLがあることを確認してください。 Rangerはrifleファイルハンドラとして使用され、対応する設定ファイルが必要ですrifle.conf。ファイルが存在しない場合は、~/.config/ranger/rifle.confコマンドを実行してranger --copy-config=rifle結果ファイルを編集します。

cmd.exe /C start "" <file>RangerでWindowsアプリケーションを実行するには、Fall Creators Updateの後に実行されるRangerを使用します。sed翻訳パスを使用してパスの問題を解決します。

ファイルに次のコードを追加すると、任意のファイル拡張子でrifle.confWindowsアプリケーションを実行できます。

ext docx?|xlsx?|pptx?|pdf = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start ""

startファイル拡張子に関連付けられているアプリケーションを暗黙的に実行できるはずですが、何らかの理由で機能しない場合は、start実行する実行可能ファイルを明示的に指定することもできます。 、、、などの""いずれかを削除して追加するだけです。この場合、アプリケーションごとに1行が必要です。たとえば、excelwinwordpowerpntAcroRd32.exerifle.conf

ext docx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start winword
ext xlsx? = echo "$@" | sed -e 's;/mnt/\(.\);\1:;' -e 's/.*/"&"/' -e 's:/:\\:g' | xargs cmd.exe /C start excel

追加の読書

答え2

WSL は絶対パス変換 AFAIK を処理しません。

あなたはできます

  • パスを直接翻訳します(例:bash機能を使用して/mnt/c/置き換えますc:\)。
  • または相対パスを使用してください

答え3

Linuxパスを/mnt/c/Users/myusername/Desktop
Windowsパスに変換するには、次の3つのC:\Users\myusername\Desktop
手順を実行する必要があります。

ステップ1:パスの先頭と末尾に二重引用符を追加します(スペースに必要です)。

sed -e 's;.*;"&";'
#   s … substitute
#   ; … delimiter character (can by any character)
#   .* … any character `.` occurring any number of times `*` will be replaced by:
#   " … at the beginning and " at the end.

ステップ2:/mnt/c/次に置き換えるC:

sed -e 's;/mnt/c/;C:;'
#   s … substitute field 1 `/mnt/c/` by field 2 `C:`

ステップ3:すべてのスラッシュを/バックスラッシュに置き換えます\

sed -e 's;/;\\;g'
#   s … substitute field 1 `/` by field 2 `\`
#   Note that there is a second `\` for escaping.

Linux端末で3つの部分をすべてテストします。

echo '/mnt/c/Users/myusername/Desktop' | sed -e 's;.*;"&";' -e 's;/mnt/c/;C:;' -e 's;/;\\;g'
"C:Users\myusername\Desktop"

レンジャーズはライフルをファイルオープナーとして使用します。私のデフォルトのLinuxディストリビューションには、デフォルトのアプリケーションrifle.confとしてすべてのファイル形式を実行する1行しか含まれていません。

else X, flag f = xdg-open "$@"

WSLの場合は次のようになります。

cat << EOT >> ~/.config/ranger/rifle.conf
else X, flag f = echo "\$@" | sed -e 's;.*;"&";' -e 's;/mnt/c/;C:;' -e 's;/;\\\;g' | xargs cmd.exe /C start ""
EOT

関連情報