Eu tive exatamente o mesmo problema ( Ubuntu + Wine + WinSCP + Sublime
) e o Sublime estava me dando páginas em branco uma vez que eu tentei editar com ele.
Googling não me deu nada, então eu fiz minha própria solução para isso (testado em Ubuntu 14.04 Trusty
)
Aqui está minha solução e pesquisa .
Solução
Solução testada e funciona com Ubuntu 14.04 Trusty
+ Sublime 3
+ Wine-1.6.2
. Eu acho que ele também funcionará para o Debian (não testei).
Eu dividi a solução em dois scripts para ter duas ferramentas universais em vez de uma específica.
A solução é adicionar um script para corrigir o caminho antes de chegar ao Sublime:
- O primeiro script
wine2unix-path
transformará o "caminho windows" do Wine em real caminho do sistema de arquivos e corrigirá seu formato (aspas duplas e invertidas\
) - O segundo script
sublime.exe
usará o caminho do arquivo real fixo dewine2unix-path
e o transmitirá para o Sublime.
Eu nomeei o primeiro script "sublime.exe" porque senão o Wine se recusa a vê-lo nas configurações de "Editores", quando eu atualizar o caminho do editor.
Etapas a serem executadas:
- Crie
/usr/local/bin/wine2unix-path
- Crie
/usr/local/bin/sublime.exe
- Atualizar caminho do editor em
WinScp
Etapa 1. wine2unix-path
Exemplo de uso: wine2unix-path c:\Program files\WinScp\Log.txt
retorna /home/YOUR_CURRENT_LINUX_USER/.wine/drive_c/Program files/WinScp/Log.txt
.
- Criar arquivo
sudo touch /usr/local/bin/wine2unix-path
- Tornar executável
sudo chmod +x /usr/local/bin/wine2unix-path
Coloque o seguinte script:
#!/bin/bash
# Trim quotes
FILE=$(echo "$@" | sed -e "s#\(^['\"]*\)\|\(['\"]*$\)##g")
USER_NAME=$(id -u -n)
DRIVE_LETTER="'echo $FILE | sed -e "s/^\([a-Z]\):.*//" | awk '{print tolower($0)}''"
echo "$FILE" | sed \
-e 's#\#\/#g' \
-e "s#^[a-Z]:#/home/${USER_NAME}/.wine/drive\_${DRIVE_LETTER}#"
exit 0
O que esse script faz:
-
FILE
- Obter o caminho do arquivo e aparar"
e'
aspas se houver alguma -
USER_NAME
- Obtém o nome do usuário atual / home /USER
-
DRIVE_LETTER
- obtém a letra da unidade do caminho do arquivo (primeiro caractere). Pode ser diferenteC:\
refere-se a.wine/drive_c
,D:\
refere-se a.wine/drive_d
etc. - Atualizar caminho do arquivo
- Substitua o caminho raiz
C:\
pelo caminho completo da pasta wine.C:\
se torna/home/USER/.wine/drive_c
- Substitui
\
(barras invertidas de escape em um modo de janelas) por\
, caso contrário,C:\users\files
se tornaráC:usersfiles
quando passar para sublime.
- Substitua o caminho raiz
- Caminho do arquivo de resultado da saída (caminho do arquivo real)
Etapa 2. sublime.exe
- Criar arquivo
sudo touch /usr/local/bin/sublime.exe
- Tornar executável
sudo chmod +x /usr/local/bin/sublime.exe
- Coloque lá, fornecido abaixo
- Altere
/opt/sublime_text/sublime_text
caminho no script abaixo (última linha) com o seu caminho sublime.
Meu Sublime version 3103
está localizado em /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"
O que esse script faz:
- Converte o caminho do arquivo de vinho em caminho de arquivo real.
- Passa este caminho entre aspas (para evitar dividir o caminho por espaços) para sublimar.
Etapa 3. Atualizar caminho do editor no WinScp
- Abrir
WinScp
- Ir para
Options > Preferences > Editors
- Se você já tem o Sublime nos editores:
- Selecionar linha com sublime
- Clique no botão
Edit
- Definir o seguinte caminho para "Editor externo"
Z:\usr\local\bin\sublime.exe \"!.!\"
- Clique em
Ok
. Feito
- Se você não tem o Sublime nos editores:
- Clique em
Add
(para adicionar o editor sublime e atribuí-lo aos tipos de arquivo). - Definir o seguinte caminho para "Editor externo"
Z:\usr\local\bin\sublime.exe \"!.!\"
- Defina a lista de tipos de arquivos que você deseja editar com ela em "Usar este editor para os arquivos a seguir". Eu uso para arquivos PHP e algumas configurações
*.ini; *.txt; *.php; *.tpl
ou*.*
para todos os tipos de arquivos
- Clique em
- Verifique se a linha Sublime está no topo da lista em
Editor preferences
. Isso priorizará os tipos de arquivos selecionados para o Sublime.
Imagem: configurações sublimes no WinScp
Pesquisa do problema
O problema aparece no caminho do arquivo que o Wine passa para o Sublime:
- O caminho não é cotado com
"
ou'
quando passou para sublime - As barras invertidas de caminho são duplicadas em
\
Um exemplo:
- Arquivo para editar
/server/user/www/my project/some other file.php
- O vinho chama sublime
Z:\opt\sublime_text\sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php
(caminho não citado ou com escape) - Sistema executa como
/opt/sublime_text/sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php
. - Então, o comando é interpretativo como:
- Comando
/opt/sublime_text/sublime_text
- Argumento
/home/CURRENT_USER/.wine/drive_c/Program
- Argumento
files/WinScp/server/user/www/my
- Argumento
project/some
- Argumento
file.php
- Comando
Como o caminho resultante é dividido por espaços devido à falta de aspas.
Como eu encontrei mais tarde, há também problema com double escapes \
em um caminho