Tramp kann einige Dateien nicht öffnen


10

Ich habe erst letzte Woche angefangen, Emacs zu verwenden, und bis jetzt läuft alles gut. Ich verwende tramp, um entfernte Dateien wie folgt zu bearbeiten:

C-x C-f
/ssh:user@server:/file/to/edit

Ich melde mich mit einem SSH-Schlüssel beim Server an, daher wird kein Passwort benötigt. Daher mache ich nichts Besonderes, um Tramp zu starten, und meiner .emacs-Datei wurde nichts hinzugefügt. Ich gebe einfach das Obige in meine lokalen Emacs ein und es funktioniert.

Die Dateien, die ich bearbeite, sind meistens Python (dh: Nur-Text * .py-Dateien) und zum größten Teil funktioniert alles korrekt. Wenn ich jedoch versuche, einige Dateien zu öffnen, werden sie nicht geöffnet und die folgende Meldung wird angezeigt:

gzip: stdin: unexpected end of file

Gibt es eine Möglichkeit, dieses Problem zu umgehen?

UPDATE: Wie in den von mir aktivierten Kommentaren vorgeschlagen (setq tramp-verbose 6). Der Tramp-Debug-Puffer ist riesig (Tausende von Zeilen), daher habe ich versucht, die Teile auszuwählen, die wichtig erscheinen oder bei denen ein Fehler erwähnt wird. Hoffentlich hilft dies dabei, herauszufinden, was passiert:

16:11:29.124528 tramp-sh-handle-file-local-copy (3) # Encoding remote file `/ssh:myuser@myserver:/path/to/python/file.py' with `(gzip <%s | base64)'...done


16:11:29.130875 tramp-sh-handle-file-truename (4) # Finding true name for `/ssh:myuser@myserver:/path/to/python/file/'


16:11:29.131565 tramp-send-command (6) # \readlink --canonicalize-missing /path/to/python/file/ 2>/dev/null; echo tramp_exit_status $?
16:11:29.376133 tramp-wait-for-regexp (6) #

16:11:33.245252 tramp-sh-handle-file-local-copy (3) # Decoding local file `/tmp/tramp.4885Mau.py' with `(lambda (beg end) (base64-decode-region beg end) (let ((coding-system-for-write (quote binary)) (coding-system-for-read (quote binary))) (apply (quote call-process-region) (point-min) (point-max) (car (split-string gzip -d)) t t nil (cdr (split-string gzip -d)))))'...done
16:11:33.249827 tramp-call-process (6) # `chown 1000:1000 /tmp/tramp.4885Mau.py' nil nil
16:11:33.252963 tramp-call-process (6) # 0
16:11:33.255820 tramp-handle-insert-file-contents (3) # Inserting `/ssh:myuser@myserver:/path/to/python/file.py'...done


///b47a60d20b86781fc5d02f0fac35ec59#$16:11:34.975322 tramp-send-command-and-check (1) # File error: Couldn't find exit status of `( (test -e /path/to/python/file.py || test -h /path/to/python/file.py) && \stat -c '(("%N") %h %ue0 %ge0 %Xe0 %Ye0 %Ze0 %se0 "%A" t %ie0 -1)' /path/to/python/file.py || echo nil)'

Die letzte Zeile scheint der eigentliche Fehler zu sein.


Zeigen Sie uns eine solche Datei oder zumindest das Ende davon? Können Sie es problemlos entpacken, wenn Sie dies außerhalb von Emacs tun?
Drew

Es ist nur eine normale Python-Textdatei. Ich gehe davon aus, dass beim Zugriff mit tramp automatisch ein Reißverschluss erstellt wird, um eine kleinere Übertragungsgröße zu ermöglichen. Es ist nicht sehr hilfreich, eine der Python-Dateien zu veröffentlichen, da sie alle ziemlich groß sind (über 100 Codezeilen). Am Ende handelt es sich jedoch nur um reine Python-Textdateien. Eine Sache, die nicht zu beachten ist, ist, dass sich die Dateien ursprünglich auf meinem lokalen Computer befanden und ich sie mithilfe von SFTP auf den Server hochgeladen habe. Ich bin mir nicht sicher, ob das wichtig ist.
Darkpool

2
Verschwindet das Problem, wenn Sie den Wert tramp-inline-compress-start-sizeauf 1000000 erhöhen ?
Nispio

Danke @nispio, das hat den Trick gemacht. Scheint jetzt zu arbeiten. Was ist aus Interesse der Unterschied zwischen Ihrem Vorschlag und der Größenbeschränkung für Tramp-Kopien? Vielleicht scheint das auch eine Lösung gewesen zu sein, oder nicht?
Darkpool

3
Wir haben Ihr Problem nicht behoben, sondern nur gezeigt, dass es wahrscheinlich ein Problem mit der Inline-Komprimierung von tramp ist. Wenn die Dateien groß genug sind (größer als tramp-inline-compress-start-size), komprimiert tramp die Daten auf der Serverseite und dekomprimiert sie auf der Clientseite. Dies gilt nur für Dateien, die größer als, tramp-inline-compress-start-sizeaber kleiner als sind tramp-copy-size-limit.
Nispio

Antworten:


7

Ich hatte ein ähnliches Problem beim Versuch, einfache ASCII-Dateien über sampp von tramp zu öffnen / zu speichern: Die Dateien waren in Ordnung, ich konnte sie beispielsweise bearbeiten nano, aber der Versuch, sie über tramp zu öffnen, wurde mit der eher kryptischen Nachricht abgelehnt : invalid string format.

Dies hing wahrscheinlich mit Inlining und Komprimierung zusammen, da das Ändern dieser Probleme das Problem für mich löste. Folgendes habe ich mithilfe der Benutzeroberfläche getan:

  1. M-x customize-mode RET tramp-mode
  2. Stellen Tramp Copy Size Limitund Tramp Inline Compress Start Sizeauf eine sehr hohe Zahl ( 1000000in meinem Fall) zu vermeiden , Out-of-Band und / oder Druckdatenübertragung. Beachten Sie, dass ich im Gegensatz zum OP beide ändern musste, damit es funktioniert. Dies bedeutet wiederum, dass es nur für die unkomprimierte Inline-Übertragung funktioniert. Für das OP ist dies jedoch mehr als genug, da ich nur relativ kleine ASCII-Dateien mit dem besten vorhandenen Editor aus der Ferne bearbeiten möchte.

Ich wollte es nur posten, falls jemand auf dasselbe Problem stößt, weil das Googeln der Fehlermeldung keine nützlichen Ergebnisse brachte und ich eine Weile brauchte, um herauszufinden, dass es mit der Größe der Datei zusammenhängt (was mich zu diesem Beitrag führte ). Wenn Sie zusätzliche Informationen oder Protokolldateien benötigen, um das Problem zu lösen, können Sie sich gerne an uns wenden. Ich glaube jedoch, dass Sie es reproduzieren können, indem Sie die oben genannten Variablen eingrenzen.

Prost! Andres

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.