我最近将 Windows 操作系统换成了 Ubuntu。作为开发人员,我非常喜欢 Windows 上的 WinSCP,但在 Linux 上我找不到任何其他合适的程序。
但是,在 Wine 上运行 WinSCP 时一切正常,只是我无法简单地双击文件并在 Sublime Text Editor 中打开它。
在“首选项”->“编辑器”中,我尝试将 /usr/bin/subl 和 /opt/sublime_text/sublime_text 设置为默认编辑器,但这两个编辑器对我来说都不起作用。
当我打开远程服务器上的文件时,Sublime 会打开,但里面是空的,没有任何内容。或者,如果右键单击并从菜单中选择“打开”,我会得到“没有配置 Windows 程序来打开此类文件”。
有人知道如何设置 WinSCP 以使用本地编辑器打开文件吗?
答案1
我遇到了完全相同的问题 ( Ubuntu + Wine + WinSCP + Sublime
),当我尝试使用 Sublime 进行编辑时,它给我的是空白页。谷歌搜索没有给我任何结果,所以我为此制定了自己的解决方案(已在 上测试Ubuntu 14.04 Trusty
)
这是我的解决方案和研究。
解决方案
解决方案已测试并适用于Ubuntu 14.04 Trusty
++ Sublime 3
。Wine-1.6.2
我认为它也适用于 Debian(尚未测试)。
我把解决方案分成两个脚本,这样就有两个通用工具,而不是一个特定的工具。
解决方案是添加一个脚本使固定到达 Sublime 之前的路径:
- 第一个脚本
wine2unix-path
将 Wine “windows 路径”转换为真实的文件系统路径并修复其格式(引号和双反斜杠\\
) - 第二个脚本
sublime.exe
将使用固定的真实文件路径wine2unix-path
并将其传递到 Sublime。
我将第一个脚本命名为“sublime.exe”,因为否则当我更新编辑器路径时,Wine 会拒绝在“编辑器”设置中看到它。
操作步骤:
- 创造
/usr/local/bin/wine2unix-path
- 创造
/usr/local/bin/sublime.exe
- 更新编辑器路径
WinScp
步骤 1. wine2unix-path
使用示例:wine2unix-path c:\\Program files\\WinScp\\Log.txt
返回/home/YOUR_CURRENT_LINUX_USER/.wine/drive_c/Program files/WinScp/Log.txt
。
- 创建文件
sudo touch /usr/local/bin/wine2unix-path
- 使可执行文件
sudo chmod +x /usr/local/bin/wine2unix-path
将以下脚本放入其中:
#!/bin/bash
# Trim quotes
FILE=$(echo "$@" | sed -e "s#\(^['\"]*\)\|\(['\"]*$\)##g")
USER_NAME=$(id -u -n)
DRIVE_LETTER="`echo $FILE | sed -e "s/^\([a-Z]\):.*/\1/" | awk '{print tolower($0)}'`"
echo "$FILE" | sed \
-e 's#\\#\/#g' \
-e "s#^[a-Z]:#/home/${USER_NAME}/.wine/drive\_${DRIVE_LETTER}#"
exit 0
该脚本的作用:
FILE
- 获取文件路径和修剪"
和'
引号(如果有)USER_NAME
- 获取当前用户名/家/USER
DRIVE_LETTER
- 从文件路径(第一个字符)获取驱动器号。它可能不同于C:\
、.wine/drive_c
、D:\
等等.wine/drive_d
。- 更新文件路径
C:\
用 wine 文件夹的完整路径替换根路径。C:\
变成/home/USER/.wine/drive_c
- 用 替换
\\
(以 Windows 方式转义的反斜杠)\
,否则当它传递到 Sublime 时C:\\users\\files
会变成。C:usersfiles
- 输出结果文件路径(真实文件路径)
第 2 步.sublime.exe
- 创建文件
sudo touch /usr/local/bin/sublime.exe
- 使可执行文件
sudo chmod +x /usr/local/bin/sublime.exe
- 放在那里提供以下
/opt/sublime_text/sublime_text
将下面脚本(最后一行)中的路径更改为您的崇高路径。
我的Sublime version 3103
位于/opt/sublime_text/sublime_text
#!/bin/bash
# Wrapper script to open sublime from Wine
#
# File path passed as a first argument should be "quoted" and "escaped"
# other wise spaces will split path into two
#
# For example: sublime.exe "c:\\Program files\\WinScp\\Log.txt"
#
# wine2unix-path is a help script to convert "Wine windows paths"
# to real paths in linux so sublime can access it
#
# For for example:
# ./sublime.exe "c:\\Program files\\WinScp\\Log.txt"
# Will result:
# /home/YOUR_CURRENT_LINUX_USER/.wine/drive_c/Program files/WinScp/Log.txt
unixpath="`wine2unix-path $1`"
/opt/sublime_text/sublime_text "$unixpath"
该脚本的作用:
- 将 Wine 文件路径转换为真实文件路径。
- 将此路径引用(以避免用空格分割路径)传递给 sublime。
步骤 3. 在 WinScp 中更新编辑器路径
- 打开
WinScp
- 去
Options > Preferences > Editors
- 如果你已经在编辑器中安装了 Sublime:
- 选择 sublime 行
- 点击
Edit
按钮 - 为“外部编辑器”设置以下路径
Z:\usr\local\bin\sublime.exe \"!.!\"
- 点击
Ok
。完成
- 如果你的编辑器中没有 Sublime:
- 单击
Add
(添加 Sublime 编辑器并将其分配给文件类型)。 - 为“外部编辑器”设置以下路径
Z:\usr\local\bin\sublime.exe \"!.!\"
- 在“使用此编辑器编辑以下文件”中设置要用它编辑的文件类型列表。我将其用于 PHP 文件和一些配置
*.ini; *.txt; *.php; *.tpl
或*.*
所有文件类型
- 单击
- 确保 Sublime 行位于列表顶部
Editor preferences
。它将优先考虑您为 Sublime 选择的文件类型。
问题研究
问题出现在 Wine 传递给 Sublime 的文件路径上:
- 路径未用
"
or引用,'
当它传递给 sublime 时 - 路径反斜杠被双重转义
\\
一个例子:
- 要编辑的文件
/server/user/www/my project/some other file.php
- Wine 调用 sublime
Z:\opt\sublime_text\sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php
(路径未引用或转义) - 系统将其作为 运行
/opt/sublime_text/sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php
。 - 因此命令解释为:
- 命令
/opt/sublime_text/sublime_text
- 争论
/home/CURRENT_USER/.wine/drive_c/Program
- 争论
files/WinScp/server/user/www/my
- 争论
project/some
- 争论
file.php
- 命令
结果,由于缺少引号,路径被空格分割。后来我发现,\\
路径中的双转义也存在问题