Khóa ESC gây ra một độ trễ nhỏ trong thiết bị đầu cuối do hành vi Alt + của nó


67

Thiết lập thiết bị đầu cuối của tôi là gnome-terminal + tmux + zsh với các ràng buộc vi.

Trong các ứng dụng như vim hoặc thậm chí trong chế độ chỉnh sửa vi dòng lệnh của zsh, tôi cần thường xuyên nhấn ESCphím nhưng có một độ trễ nhỏ trước khi các hiệu ứng của phím này diễn ra. Xem màn hình GNU làm cho phím Vim ESC chậm

Sau một số thử nghiệm, tôi thấy rằng việc nhấn ESCphím và ngay lập tức một phím khác (giả sử b) có tác dụng tương tự như nhấn Alt+b. Tôi không biết tại sao lại như vậy (có lẽ vì lý do di sản khi không có Alt? Tôi không biết). Dù bằng cách nào, tôi có hai Altkhóa và tôi không muốn hành vi này với ESCkhóa của mình . Tôi đã thử với C+[nó và cùng một vấn đề với điều đó.

Tôi không chắc ai chịu trách nhiệm cho việc này, gnome-terminal hoặc tmux hoặc chính hệ điều hành của tôi (Ubuntu Natty). Bất kỳ ý tưởng về cách giải quyết điều này sẽ là tuyệt vời.

Cập nhật : Tôi đã kiểm tra mà không có tmux trên một thiết bị đầu cuối khác (LXTerminal) và sự chậm trễ cũng xuất hiện ở đó.


1
Tôi không thể hiểu tại sao vim của tôi lại hành động kỳ lạ. Câu hỏi này khiến tôi nhớ rằng tôi mới bắt đầu sử dụng nó trong màn hình. Bạn đã cứu sự tỉnh táo của tôi.
pabo

Câu trả lời:


111

Đây là một sửa chữa thực tế. Thêm vào như sau .tmux.conf:

set -s escape-time 0

4
Rực rỡ, cảm ơn! Có một sự chậm trễ khi rời chế độ chèn trong vim và thực sự không nghĩ rằng nó có thể đã bị can thiệp. Đây đã làm các trick
actionshrimp

7
Như đã đề cập trong superuser.com/questions/252214/ Tôi đã phải làm tmux kill-serverđiều này để có hiệu lực.
PhilT

Đối với bất kỳ ai đến trang này đang cố gắng hiểu tại sao có sự chậm trễ khi chuyển từ chế độ chèn sang chế độ lệnh trong khi sử dụng chế độ vi trong bash, hãy xem superuser.com/a/1161871/236677
Kvass

3
Bạn có thể tải lại tệp cấu hình bằng cách mở dấu nhắc lệnh bên trong tmux với tmux-prefix(mặc định Ctrl+b) theo sau :và nhập source-file $HOME/.tmux.conf.
Folfy

7

Độ trễ được gây ra bởi các thói quen đầu vào có thể phải quyết định liệu phím chức năng có được nhấn hay không. Đối với điều này, thói quen đầu vào bắt đầu một bộ đếm thời gian bất cứ khi nào nó đọc trong một ký tự ESC. Các ký tự được đọc từ đầu vào trước khi hết giờ (giả sử một phần mười giây) sau đó được hiểu là chuỗi ESC của một phím chức năng và chuỗi ESC này sẽ được so sánh với các chuỗi ESC được biết đến từ terminfo hoặc cơ sở dữ liệu termcap (phụ thuộc vào các thói quen cấp thấp được sử dụng).

Về nguồn này, điều này gây khó chịu cho các ứng dụng mà ESC được sử dụng riêng, nhưng tôi không biết cách giải quyết nào cho việc này.

Về câu hỏi của bạn với hành vi của ESC a= Meta a:

Các phím meta không có sẵn với tất cả các bàn phím. Như một giải pháp thay thế, nó thường được phép sử dụng phím ESC để được nhấn trước phím kia.


Cảm ơn bạn đã giải thích ktf. Sự chậm trễ không có trong gvim, chỉ trong thiết bị đầu cuối (tôi đã kiểm tra mà không có tmux và sự chậm trễ vẫn còn đó).
Shrikant Sharat

gvim không gặp phải vấn đề này, bởi vì nó nhận được thông tin phím nào được nhấn từ máy chủ X11 (vì vậy nó không phải phân tích các chuỗi ESC).
ktf

Ok, vậy tôi cần làm cho thiết bị đầu cuối gnome của tôi hoạt động theo cùng một cách sau đó.
Shrikant Sharat

gnome-terminal không phải là vấn đề - sự cố được mô tả chỉ ảnh hưởng đến các chương trình chạy trên thiết bị đầu cuối (hoặc trong mô phỏng Terminal) và phải phân tích các phím chức năng. Bạn sẽ trải nghiệm hành vi tương tự, nếu bạn thử xterm hoặc KDE-Terminal chẳng hạn.
ktf

2
"Các phím meta không có sẵn với tất cả các bàn phím. Như một cách giải quyết, nó thường được phép sử dụng phím ESC để được nhấn trước phím kia." Có lẽ thậm chí còn đoán trước rằng, ttys thường chỉ có giao diện dữ liệu bảy bit; không có "meta bit" thứ tám, vì vậy bạn phải gửi ESC cho Meta. Và ngày nay UTF-8 đã phổ biến rộng rãi, vì vậy ngay cả với các kết nối tám bit, bạn không thể sử dụng bit cao cho Meta.
Chris Trang

3

Mặc dù điều này có thể không trực tiếp khắc phục sự cố của bạn, tôi đã thấy rằng tôi có thể sử dụng <Ctrl> cđể thoát khỏi chế độ chèn. Điều này cũng có thể được sử dụng để thoát cuộn màn hình của tmux (có thể được gọi bằng cách sử dụng <leader> PgUP)


3
Tôi không khuyên bạn nên sử dụng <C-c>để thoát khỏi chế độ chèn trong sử dụng thường xuyên vì nó không chạy chế độ InsertLeavetự động mà một số plugin có thể đang xem. Xem :h i_CTRL-C.
Shrikant Sharat
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.