我想从 Cygwin 打开一个文件到 Windows 的配置文本中观众,即使该文件类型尚未与文本查看器关联(即 Windows 不将其视为文本文件)。
对于我的具体情况,我使用 Notepad++ 进行一般文本文件查看和代码编辑,并且将其与大多数不可执行的纯文本文件扩展名(.txt、.log 等)关联,但与可执行文件扩展名(.pl、. py 等)。我现在希望能够从 Cygwin bash 提示符打开 Perl 文件。
我知道我可以使用 cygstart 通过与该文件类型关联的 Windows 应用程序打开文件。因此,egcygstart Readme.txt
将根据 .txt 扩展名在 Notepad++ 中打开。但是,如果我cygstart prog.pl
,它会尝试跑步由于 .pl 扩展名,它使用 Windows 的默认 Perl 解释器。
我也尝试过cygstart -e prog.pl
,但是会以 Window 的默认文本打开编辑, 记事本。
那么,有没有办法让Cygwin在Windows的配置文本中打开纯文本文件观众即使扩展尚未与所述查看器关联?
注意:我正在 Bash 提示符中手动测试这一点,但我想将其放入一个共享脚本中,然后该脚本可以打开 Perl 文件供用户编辑。因此,我下面担心的是如何将其移植到其他用户。出于同样的原因,我对“只使用 Vim!”不感兴趣。解决方案。
到目前为止我的一些想法:
- 关联我希望能够使用同一查看器打开的所有文件类型,在我的例子中是 Notepad++。缺点是每次要打开新的文件类型时都需要更新 Windows 文件关联,并且需要任何其他用户执行相同的操作。
- 更改 Windows 默认文本编辑,即当您在资源管理器窗口中右键单击 -> 编辑时使用的应用程序。我不知道这是否可以做到,如果可以做到的话,这并不是一个糟糕的选择。即我可以将其作为一次性配置步骤传达给另一个用户。
- 将所需的查看器路径硬编码为别名并使用它。例如,现在我有我的别名
alias npp='"C:/Program Files (x86)/Notepad++/notepad++.exe"'
,我可以用npp prog.pl
.这假定要使用此方法的每个人都安装了相同的编辑器或知道如何设置别名。 - 获取配置的 Windows 文本文件的路径观众(也许来自 cygstart?),然后使用该路径打开另一个非关联的文件类型。
答案1
假设我理解您的需求,以下 bash 脚本将在第一个参数上启动定义的编辑器(作为 Windows 路径)
#!/bin/bash
if [ $# -ne 1 ]
then
echo "launch your editor defined in this script on any file "
echo "Usage : " $0 "filename"
exit 1
fi
if [ -z "${EDITOR}" ]
then
EDITOR="C:\Program Files\Notepad++\notepad++.exe"
fi
echo "using EDITOR as " ${EDITOR}
CYG_EDITOR=$(echo -n $(cygpath -u $EDITOR))
echo "using CYG_EDITOR as " ${CYG_EDITOR}
"${CYG_EDITOR}" $1 &
例如以这种方式调用
$ ./edit-text.sh edit-text.sh
using EDITOR as C:\Program Files\Notepad++\notepad++.exe
using CYG_EDITOR as /cygdrive/c/Program Files/Notepad++/notepad++.exe
正在调用 Notepad++ 本身
如果你想处理更复杂的文件名,可以使用“-wa”
$ cygpath -wa ../tmp/edit-text.sh
D:\cyg_pub\tmp\edit-text.sh