使用 Wine 上运行的 WinSCP 在 Sublime 中打开文件

使用 Wine 上运行的 WinSCP 在 Sublime 中打开文件

我最近将 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 3Wine-1.6.2我认为它也适用于 Debian(尚未测试)。

我把解决方案分成两个脚本,这样就有两个通用工具,而不是一个特定的工具。

解决方案是添加一个脚本使固定到达 Sublime 之前的路径:

  1. 第一个脚本wine2unix-path将 Wine “windows 路径”转换为真实的文件系统路径并修复其格式(引号和双反斜杠\\
  2. 第二个脚本sublime.exe将使用固定的真实文件路径wine2unix-path并将其传递到 Sublime。

我将第一个脚本命名为“sublime.exe”,因为否则当我更新编辑器路径时,Wine 会拒绝在“编辑器”设置中看到它。

操作步骤:

  1. 创造/usr/local/bin/wine2unix-path
  2. 创造/usr/local/bin/sublime.exe
  3. 更新编辑器路径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

  1. 创建文件sudo touch /usr/local/bin/wine2unix-path
  2. 使可执行文件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

该脚本的作用:

  1. FILE- 获取文件路径和修剪"'引号(如果有)
  2. USER_NAME- 获取当前用户名/家/USER
  3. DRIVE_LETTER- 从文件路径(第一个字符)获取驱动器号。它可能不同于C:\.wine/drive_cD:\等等.wine/drive_d
  4. 更新文件路径
    1. C:\用 wine 文件夹的完整路径替换根路径。C:\变成/home/USER/.wine/drive_c
    2. 用 替换\\(以 Windows 方式转义的反斜杠) \,否则当它传递到 Sublime 时C:\\users\\files会变成。C:usersfiles
  5. 输出结果文件路径(真实文件路径)

第 2 步.sublime.exe

  1. 创建文件sudo touch /usr/local/bin/sublime.exe
  2. 使可执行文件sudo chmod +x /usr/local/bin/sublime.exe
  3. 放在那里提供以下
  4. /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"

该脚本的作用:

  1. 将 Wine 文件路径转换为真实文件路径。
  2. 将此路径引用(以避免用空格分割路径)传递给 sublime。

步骤 3. 在 WinScp 中更新编辑器路径

  1. 打开WinScp
  2. Options > Preferences > Editors
  3. 如果你已经在编辑器中安装了 Sublime:
    1. 选择 sublime 行
    2. 点击Edit按钮
    3. 为“外部编辑器”设置以下路径Z:\usr\local\bin\sublime.exe \"!.!\"
    4. 点击Ok。完成
  4. 如果你的编辑器中没有 Sublime:
    1. 单击Add(添加 Sublime 编辑器并将其分配给文件类型)。
    2. 为“外部编辑器”设置以下路径Z:\usr\local\bin\sublime.exe \"!.!\"
    3. 在“使用此编辑器编辑以下文件”中设置要用它编辑的文件类型列表。我将其用于 PHP 文件和一些配置*.ini; *.txt; *.php; *.tpl*.*所有文件类型
  5. 确保 Sublime 行位于列表顶部Editor preferences。它将优先考虑您为 Sublime 选择的文件类型。

图:WinScp 中的 Sublime 设置

问题研究

问题出现在 Wine 传递给 Sublime 的文件路径上:

  • 路径未用"or引用,'当它传递给 sublime 时
  • 路径反斜杠被双重转义\\

一个例子:

  1. 要编辑的文件/server/user/www/my project/some other file.php
  2. 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(路径未引用或转义)
  3. 系统将其作为 运行/opt/sublime_text/sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php
  4. 因此命令解释为:
    1. 命令/opt/sublime_text/sublime_text
    2. 争论/home/CURRENT_USER/.wine/drive_c/Program
    3. 争论files/WinScp/server/user/www/my
    4. 争论project/some
    5. 争论file.php

结果,由于缺少引号,路径被空格分割。后来我发现,\\路径中的双转义也存在问题

相关内容