SSH cắt xén các ký tự trong vim / nano trên máy chủ từ xa


18

... và nó khiến tôi phát điên.

Về cơ bản (điều này đã xảy ra trong vài tháng qua), tôi đăng nhập vào một vài máy chủ CentOS khác nhau (một Linode, VPS khác và một máy chủ chia sẻ mà tôi có quyền truy cập shell), chạy 5.5, 5.7 và 6, từ Mac chạy OS X Lion, sử dụng Terminal.

Về cơ bản:

$ ssh username@example.com

[remote-host] $ nano somefile.txt

Khi tôi bắt đầu chỉnh sửa các tập tin, nếu tôi sử dụng các phím mũi tên để di chuyển xung quanh con trỏ, hoặc bắt đầu xóa, sau đó gõ một lần nữa, con trỏ nhảy xung quanh một chút, và nếu tôi lưu các tập tin và mở lại nó, nó là rõ ràng rằng con trỏ , trên thực tế, nhảy khắp nơi trên một dòng không có lý do rõ ràng.

Tôi cuối cùng nhận được những thứ như "Đây là một văn bản neof." Khi tôi đã gõ (vào trình soạn thảo điên con trỏ) "Đây là một dòng văn bản."

Đó là một vấn đề lớn khi chỉnh sửa các tệp cấu hình, bởi vì tôi thường phải chỉnh sửa một dòng, lưu và đóng, sau đó mở lại chỉ để đảm bảo rằng dòng đó đúng ... sau đó chỉnh sửa một dòng khác ... và nó trở nên khá khó chịu .

Tôi thấy các vấn đề về kết xuất Linode Lish Shell Vim và Nano: các dòng không xuất hiện / vị trí con trỏ sai , nhưng tôi không biết điều đó có liên quan nhiều hay không, vì điều đó đặc biệt đề cập đến lish.


1
Xin chào @ge Muffguy, tôi đã đăng câu trả lời cho câu hỏi này nhiều năm trước khi tên của bạn không có ý nghĩa gì với tôi, nhưng bây giờ tôi sử dụng công việc của bạn thường xuyên. Cảm ơn tất cả những đóng góp ansible của bạn!
dbenton

1
@dbenton - Tôi giúp bạn, bạn giúp tôi, chúng tôi là một cộng đồng hạnh phúc :)
ge Muffguy

Câu trả lời:


14

[ Cập nhật: Kể từ Mac OS X Mountain Lion 10.8, Terminal hỗ trợ chuỗi thoát Backtab, loại bỏ vấn đề này.]

Phiên bản nano trên các máy chủ đó đôi khi gửi một chuỗi Backtab (ESC [Z) khi di chuyển con trỏ sang một ký tự, nhưng Terminal không hỗ trợ chuỗi này, vì vậy nano nghĩ rằng con trỏ đã di chuyển khi nó không ' t và ý tưởng của nó về vị trí hiện tại của con trỏ không đồng bộ với thiết bị đầu cuối.

Vì những lý do tôi không thể hiểu được, nano gửi Backtab khi di chuyển sang trái và con trỏ là một ký tự ở bên phải của điểm dừng tab. Tương tự, IIRC, nó sẽ gửi một Tab (Control-I) khi di chuyển sang phải và con trỏ là một ký tự ở bên trái của một điểm dừng tab. Tôi không biết tại sao nó lại dừng xung quanh tab thay vì luôn di chuyển sang trái / phải bằng cách sử dụng cùng một chuỗi ký tự. Phiên bản nano được phân phối với Mac OS X Lion 10.7 không làm được điều này.

Nano chỉ làm điều này khi terminfo nói rằng cbtkhả năng được hỗ trợ. Thuật ngữ mặc định cho Terminal là xterm-256color, khai báo khả năng này và ánh xạ nó tới chuỗi Backtab. Cách giải quyết là đặt TERMbiến môi trường thành thứ không khai báo khả năng này. Bạn có thể thực hiện việc này trên máy cục bộ trước khi gọi sshhoặc trong tệp khởi động shell trên máy chủ từ xa. Cài đặt nó xterm-colorsẽ thực hiện trong một nhúm, mặc dù không được khuyến khích, vì nó vô hiệu hóa các hành vi quan trọng khác (ví dụ 256 màu, BCE, bảo quản nội dung màn hình thay thế). (Cách tiếp cận nặng hơn là tùy chỉnh tệp xterm-256color(hoặc xterm) terminfo của bạn trên máy chủ từ xa để xóa cbt.)

Nên tùy chỉnh máy chủ từ xa (bằng cách này hay cách khác), vì vậy các tùy chỉnh không áp dụng cục bộ hoặc cho các máy chủ từ xa khác, nhưng cách khắc phục đơn giản nhất là thay đổi cài đặt tùy chọn Terminal để sử dụng xterm-colorthay vì xterm-256color:

Thiết bị đầu cuối> Tùy chọn> Cài đặt> [hồ sơ]> Nâng cao> Khai báo thiết bị đầu cuối dưới dạng:

Tôi khuyên bạn nên sao chép cấu hình cài đặt hiện có, tùy chỉnh nó và chỉ sử dụng nó khi bạn kết nối với các máy chủ từ xa đó.


Cài đặt xterm-color chắc chắn hoạt động - bạn có thể giải thích cách tùy chỉnh tệp terminfo của tôi trên máy chủ từ xa không? Một liên kết sẽ làm, nhưng tôi có thể sẽ quay lại bài đăng này mọi lúc và sau đó để ghi nhớ mẹo này :)
ge Muffguy

1
@ge Muffguy Sửa đổi một định nghĩa terminfo hiện có . Loại bỏ các cbt=\E[Zmục trong .titập tin nguồn.
TachyonVortex 15/03/13

Điều này đã giúp tôi, tôi đã đặt tùy chọn từ xterm-256color thành xterm và bây giờ tôi có thể chọn, sao chép, v.v. như tôi đã từng làm trước đây. (Tôi không biết làm thế nào hoặc ai đã thay đổi tùy chọn này). Cảm ơn!
tàu vũ trụ

8

Tôi đã có vấn đề tương tự. Tôi tìm thấy chủ đề này, trong số các giải pháp khác, một biến môi trường trên máy chủ từ xa:

export TERM=xterm-color

Thêm phần này vào ~ / .bash_profile đã giải quyết vấn đề cho tôi. Giải pháp này đơn giản và có lợi ích là chỉ ảnh hưởng đến một người dùng cụ thể trên một máy chủ cụ thể.


2

Tôi gặp vấn đề tương tự trong chương trình MobaXTerm. Nguyên nhân của sự cố là -K key mà tôi đã sử dụng để bật numpad trong Nano khi sử dụng PuTTY. Như tôi đã tìm thấy trong MobaXTerm -K là không cần thiết (numpad hoạt động theo mặc định) và không có phím mũi tên hoạt động chính xác và không chèn rác ngẫu nhiên.


1

OSX 10.7.4 với Centos chạy như một hệ điều hành khách

Trong tùy chọn thiết bị đầu cuối OSX, cài đặt, nâng cao

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

Không có vấn đề nữa :)


Lưu ý rằng hành vi bàn phím của VT VT-100 Ưu tiên hoàn toàn không liên quan đến Hỏi & Đáp này và không ảnh hưởng đến kết quả.
Chris Trang

1

Đối với người dùng MobaXterm. Nếu bạn không sử dụng -K và vẫn gặp sự cố. Đảm bảo rằng các dòng sau được nhận xét trong tệp / etc / nanorc của bạn.

# đặt rebinddelete

# đặt rebindkeypad


0

Vấn đề có thể xảy ra là, vâng, cả máy cục bộ và máy chủ của bạn đều nằm trên các hệ thống unix có nano, nhưng các phiên bản nano đó có thể khác nhau.

export TERM=xterm-color

-1

Nếu những gì bạn nhận được là "Đây là một văn bản neof" và những gì bạn đã nhập là "Đây là một dòng văn bản" (tôi phải đoán rằng báo cáo của bạn là chính xác) thì bạn có một phím "điều khiển" không ổn định cho dù đó là gì trên Mac (lệnh ? táo?). Bởi vì nano đang sử dụng các phím điều khiển + để "nhảy xung quanh" và bạn có ít ký tự hơn gõ nên chúng tôi có a) các ký tự biến mất b) các chuỗi điều khiển xuất hiện mà không có gì suy ra rằng a) trở thành b) là hợp lý.

Bạn cũng có thể có một số chương trình hotkey / macro / whatnot đáng ghét. Tôi nghi ngờ điều này thuộc về superuser chứ không phải serverfault nhưng tôi sẽ giữ việc gắn cờ có thể ai đó có câu trả lời thực tế, bị ràng buộc bởi SSH.


Nó xảy ra khi tôi sử dụng các phím mũi tên để di chuyển qua lại trên một dòng, thường xuyên hơn so với khi tôi chỉ cần gõ. Nhưng nó có vẻ khá ngẫu nhiên. Tôi sẽ nhanh chóng thử đề xuất của Chris để xem nó có hoạt động không, nhưng cảm ơn vì đã trả lời!
ge Muffguy
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.