Tramp không thể mở một số tập tin


10

Tôi mới bắt đầu sử dụng emacs vào tuần trước và mọi thứ đang diễn ra tốt đẹp cho đến nay. Tôi đang sử dụng tramp để chỉnh sửa các tập tin từ xa như sau:

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

Tôi đăng nhập vào máy chủ bằng khóa ssh, vì vậy không cần mật khẩu. Vì vậy, tôi không làm gì đặc biệt để bắt đầu tramp và không có gì được thêm vào tệp .emacs của tôi, tôi chỉ cần nhập phần trên vào emacs cục bộ của mình và nó hoạt động.

Các tập tin tôi đang chỉnh sửa chủ yếu là python (tức là: văn bản thuần túy * .py tập tin) và đối với hầu hết mọi thứ, mọi thứ đều hoạt động chính xác. Tuy nhiên, khi tôi cố mở một số tệp, chúng không mở và thông báo sau được hiển thị:

gzip: stdin: unexpected end of file

Có cách nào để khắc phục vấn đề này không?

CẬP NHẬT: Theo đề xuất trong các ý kiến ​​tôi kích hoạt (setq tramp-verbose 6). Bộ đệm gỡ lỗi rất lớn (hàng ngàn dòng) vì vậy tôi đã cố gắng chọn ra các phần có vẻ quan trọng hoặc khi một số lỗi được đề cập, hy vọng điều đó sẽ giúp tìm ra điều gì đang xảy ra:

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)'

Dòng cuối cùng có vẻ là lỗi thực tế.


Cho chúng tôi xem một tập tin như vậy, hoặc ít nhất là kết thúc của nó? Bạn có thể giải nén nó mà không có vấn đề gì nếu bạn làm điều đó bên ngoài Emacs?
vẽ

Nó chỉ là một tập tin văn bản python thông thường. Tôi đoán khi truy cập nó bằng tramp, nó sẽ tự động được nén để cho phép kích thước chuyển nhỏ hơn. Sẽ không có ích gì khi đăng bất kỳ tệp python nào vì chúng đều khá lớn (hơn 100 dòng mã). Nhưng cuối cùng, chúng chỉ là các tệp python văn bản đơn giản. Một điều không nên là, các tệp ban đầu trên máy cục bộ của tôi và tôi đã sử dụng sftp để tải chúng lên máy chủ. Không chắc chắn nếu điều đó quan trọng.
Darkpool

2
Vấn đề có biến mất nếu bạn tăng giá trị của tramp-inline-compress-start-sizemột thứ gì đó lớn như 1000000 không?
nispio

Cảm ơn @nispio đã làm điều đó. Có vẻ như đang làm việc bây giờ. Không quan tâm, sự khác biệt giữa đề xuất của bạn và giới hạn kích thước bản sao-tramp là gì? Có vẻ như có lẽ đó cũng là một giải pháp, hay không?
Darkpool

3
Chúng tôi thực sự chưa khắc phục vấn đề của bạn, chỉ cho thấy rằng đó có thể là sự cố với tính năng nén nội tuyến của tramp. Nếu các tệp đủ lớn (lớn hơn tramp-inline-compress-start-size) thì tramp sẽ nén dữ liệu ở phía máy chủ và giải nén nó ở phía máy khách. Điều này chỉ áp dụng cho các tệp lớn hơn tramp-inline-compress-start-sizenhưng nhỏ hơn tramp-copy-size-limit.
nispio

Câu trả lời:


7

Tôi đã gặp một vấn đề tương tự khi cố gắng mở / lưu các tệp ASCII đơn giản thông qua sftp của tramp: các tệp đều ổn, ví dụ, tôi có thể chỉnh sửa chúng bằng cách nano, nhưng cố gắng mở chúng qua tramp sẽ bị từ chối với thông điệp khá khó hiểu : invalid string format.

Điều này có lẽ liên quan đến nội tuyến và nén, bởi vì việc thay đổi chúng đã giải quyết vấn đề cho tôi. Đây là những gì tôi đã làm, sử dụng UI:

  1. M-x customize-mode RET tramp-mode
  2. Đặt Tramp Copy Size LimitTramp Inline Compress Start Sizeở một số rất cao ( 1000000trong trường hợp của tôi) để tránh truyền dữ liệu ngoài luồng và / hoặc truyền dữ liệu nén. Lưu ý rằng, không giống như OP, tôi đã phải thay đổi cả hai để làm cho nó hoạt động. Một lần nữa, điều này có nghĩa là nó chỉ hoạt động đối với truyền nội tuyến, không nén nhưng đối với OP, điều này là quá đủ đối với tôi vì tôi chỉ muốn chỉnh sửa từ xa các tệp ASCII khá nhỏ với trình chỉnh sửa tốt nhất tồn tại.

Chỉ muốn đăng nó trong trường hợp ai đó gặp phải vấn đề tương tự, vì việc thông báo lỗi không mang lại kết quả hữu ích nào và tôi phải mất một thời gian để nhận ra rằng nó có liên quan đến kích thước tệp (dẫn tôi đến bài đăng này ). Nếu bạn cần thêm thông tin hoặc tệp nhật ký để giải quyết vấn đề, vui lòng hỏi, nhưng tôi tin rằng bạn sẽ có thể sao chép nó bằng cách thu hẹp các biến đã đề cập ở trên.

Chúc mừng! Andres

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.