Открытые файлы в Sublime из WinSCP, работающие на Wine

Я недавно изменил ОС Windows для Ubuntu. Как разработчик, я действительно любил WinSCP для Windows и просто не могу найти другую подходящую программу для Linux.

Тем не менее, все работает нормально с WinSCP, работающим на Wine, за исключением того, что я не могу просто дважды щелкнуть файл и открыть его в Sublime Text Editor.

в «Предпочтениях» -> «Редакторы». Я пытался установить / usr / bin / subl и / opt / sublime_text / sublime_text в качестве редакторов по умолчанию, но ни один из этих двух вариантов не работает для меня.

Когда я открываю файл на удаленном сервере, открывается Sublime, но он пуст, без содержимого внутри. Или, если щелкнуть правой кнопкой мыши и выбрать «Открыть» из меню, я получу «Нет программы для Windows, настроенной на открытие этого типа файла».

Кто-нибудь знает, как настроить WinSCP для открытия файла в локальном редакторе?

1
задан 23 May 2016 в 12:02

1 ответ

У меня была точно та же проблема (Ubuntu + Wine + WinSCP + Sublime) и Сублимат давал мне пустые страницы, после того как я попытался отредактировать с ним. Поиск с помощью Google ничего не дал мне так, что я сделал свое собственное решение для этого (протестированный на Ubuntu 14.04 Trusty)

Вот мое решение и исследование.

Решение

Решение протестировано и работы с Ubuntu 14.04 Trusty + Sublime 3 + Wine-1.6.2. Я думаю, что это будет также работать на Debian (не протестировали).

Я разделил решение на 2 сценария, чтобы иметь два универсальных инструмента вместо одного определенного.

Решение, добавляет сценарий для фиксации пути, прежде чем это будет get's для Сублимации:

  1. Первый сценарий wine2unix-path преобразует Вино "путь окон" к реальной файловой системе, соединяют каналом и фиксируют, это - формат (кавычки и двойные обратные косые черты \\)
  2. Второй сценарий sublime.exe будет использовать зафиксированный реальный путь к файлу от wine2unix-path и передаст его в Сублимат.

Я назвал первый сценарий "sublime.exe", потому что иначе Вино отказывается видеть его в настройках "Editors", когда я обновляю путь редактора.

Шаги, чтобы сделать:

  1. Создать /usr/local/bin/wine2unix-path
  2. Создать /usr/local/bin/sublime.exe
  3. Обновите путь редактора в WinScp

Шаг 1. wine2unix-путь

Использование в качестве примера: 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 - Получите текущее имя пользователя/home/USER
  3. DRIVE_LETTER - Получите букву диска от пути к файлу (первый символ). Это может отличаться C:\ относится к .wine/drive_c, D:\ относится к .wine/drive_d и т.д.
  4. Путь к файлу обновления
    1. Корневой путь замены C:\ с полным путем к винной папке. C:\ становится /home/USER/.wine/drive_c
    2. Замены \\ (завершенные обратные косые черты в окна путь) с \, иначе 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. Преобразовывает Винный путь к файлу к реальному пути к файлу.
  2. Передачи этот заключенный в кавычки путь (для предотвращения разделения соединяют каналом пробелами) сублимировать.

Шаг 3. Обновите путь редактора в WinScp

  1. Открытый WinScp
  2. Перейдите в Options > Preferences > Editors
  3. Если у Вас уже есть Сублимат в редакторах:
    1. Выберите строку с сублиматом
    2. Нажать Edit кнопка
    3. Установленный после пути для "Внешнего редактора" Z:\usr\local\bin\sublime.exe \"!.!\"
    4. Нажать Ok.Готово
  4. Если у Вас нет Сублимата в редакторах:
    1. Нажать Add (чтобы добавить сублимированного редактора и присвоить его типам файлов).
    2. Установленный после пути для "Внешнего редактора" Z:\usr\local\bin\sublime.exe \"!.!\"
    3. Установите Вас список типов файлов, Вы хотите отредактировать с ним в "Использовании этого редактора для следующих файлов". Я использую его для файлов PHP и некоторых конфигураций *.ini; *.txt; *.php; *.tpl или *.* для всех типов файлов
  5. Удостоверьтесь, что Сублимированная строка сверху списка в Editor preferences. Это сделает приоритет для типов файлов, которые Вы выбрали для Сублимата.

Изображение: Сублимированные настройки в WinScp

Исследование проблемы

Проблема появляется в пути к файлу, который Вино передает Сублимату:

  • Путь не заключается в кавычки с " или ' когда это передало сублимату
  • Обратные косые черты пути являются doubleescaped \\

Пример:

  1. Файл для редактирования /server/user/www/my project/some other file.php
  2. Вино называет сублимат 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

Как путь результата, разделяемый пробелами из-за кавычек отсутствия. Когда я нашел позже существует также проблема с двойными Escape \\ в пути

5
ответ дан 23 May 2016 в 22:02

Другие вопросы по тегам:

Похожие вопросы: