Độ trễ nhẹ khi chuyển chế độ trong vim bằng tmux hoặc màn hình


68

Chuyển sang và từ chế độ chèn trong Vim không còn tức thời kể từ khi tôi sử dụng tmux. Sau khi nhấn Esctrong chế độ chèn, phải mất một khoảng thời gian đáng chú ý để thực sự thoát khỏi chế độ chèn. Sau khi nhấn Escvà bất kỳ phím nào khác sau đó, công tắc sẽ ngay lập tức và lệnh cho phím được nhấn sau đó Escđược thực thi. Bất cứ ý tưởng những gì có thể gây ra điều này?

Cấu hình Vim không phải là vấn đề vì sự chậm trễ không xảy ra khi tôi chạy Vim bên ngoài tmux, vì vậy điều này có lẽ liên quan đến tmux bằng cách nào đó. Tôi sử dụng btw gnome-terminal.

Cũng đáng chú ý, có vẻ như tôi không thể xác định các ràng buộc chính trong tmux cho Esc, kế hoạch của tôi là liên kết Escvới:

bind Escape send-keys ^[

Than ôi, có vẻ như ràng buộc bất cứ điều gì Esccho tmux không hoạt động. Vấn đề tương tự cũng xảy ra trong màn hình.

Câu trả lời:


122

Sau khi cày qua các trang man, hóa ra tmux có một tùy chọn cho việc này. Sau đây là cách ~/.tmux.confkhắc phục sự cố chậm trễ:

 set -sg escape-time 0

Bạn phải khởi động lại máy chủ tmux của bạn hoặc tải lại cấu hình của bạn để điều này có hiệu lực. Để làm điều này, vấn đề source-file ~/.tmux.conftừ dấu nhắc tmux.


2
Bạn đã tìm thấy cái này ở đâu? Tôi không thể tìm thấy thời gian thoát ở bất cứ đâu man tmuxvà lệnh không hoạt động với tôi.
djeikyb

Tôi nghi ngờ là chỉ có sẵn trong phiên bản phát triển. Bạn có thể lấy nó ở đây: github.com/ThomasAdam/tmux
Ton van den Heuvel

4
Tôi đã phải sử dụng tmux kill-server trước khi cài đặt này hoạt động với tôi. Cảm ơn!
Sam

1
Điều này làm cho tôi ước tôi có thể cung cấp cho bạn 10 upvote. Tìm thấy điều này sau một giờ chiến đấu với thời gian chờ trong vim. Cảm ơn bạn!
malvim

1
@MichaelBrown, tôi cũng vậy, và vẫn gặp phải vấn đề này. Nó thực sự không quan trọng, bởi vì cùng một mã khóa được gửi đến trình giả lập thiết bị đầu cuối bất kể bạn nhấn thoát hay ^ [.
Ton van den Heuvel

4

Tôi đã có một vấn đề khác nhưng tương tự mà tôi đang cố gắng giải quyết khi tìm thấy trang này, vì vậy tôi sẽ đăng nó ở đây trong trường hợp nó hữu ích cho bất kỳ ai khác đang tìm kiếm câu trả lời này và tìm thấy trang này theo cách tương tự.

Sự cố: chế độ vi trong bash có độ trễ khi chuyển từ chế độ chèn sang chế độ lệnh

Giải pháp: Trong của bạn ~/.inputrctập tin, thêm set keyseq-timeout nnơi nmột số giá trị thấp hơn 0. nmặc định là 500ms, đó là những gì gây ra sự chậm trễ. Xem tài liệu ở đây .

Ngoài ra, nếu bạn muốn biết bạn đang ở chế độ nào, hãy xem bash của Dylan Cali .


Điều đó rất hữu ích, tôi thiết lập nó 0.01và bây giờ nó nhanh hơn nhiều. cảm ơn!

Nó cũng có thể được thêm vào /etc/inputrcđể làm cho nó có sẵn cho tất cả người dùng.

1

Có vẻ như bạn đang sử dụng bản đồ bắt đầu bằng ESC. Khi bạn nhấn phím ESC, vim phải chờ xem khóa tiếp theo có phải là phím trong ánh xạ không. Nếu không, nó có thể tiếp tục ngay lập tức.

Cấu hình vim có thể phụ thuộc vào thiết bị đầu cuối, vì vậy thực tế là nó không xảy ra bên ngoài tmux không có nhiều ý nghĩa. Vim có thể truy vấn $TERMbiến môi trường và chọn cấu hình khác nhau tùy thuộc vào giá trị của nó.

Vì gnome-terminal sử dụng, AFAIK, xtermlà giá trị của $TERMbiến và tmux sử dụng screen, tôi sẽ xem qua tất cả các tệp cấu hình vim của bạn cho các cài đặt chỉ được sử dụng là $TERMbiến bằng screen. Tôi đoán là một số tệp cấu hình vim trên hệ thống của bạn đặt ánh xạ để xử lý các phím mũi tên (bắt đầu bằng ESCký tự) khi thiết bị đầu cuối screen.

Bạn có thể kiểm tra nó bằng cách tạm thời thay đổi $TERMbiến trong tmux trước khi bắt đầu vim. Nếu shell của bạn bị bash, hãy gọi vim là

TERM=xterm vim

trong tmux và xem nếu vấn đề vẫn còn. Tuy nhiên, bạn không nên sử dụng nó như một cách khắc phục, vì có thể có sự khác biệt giữa các khả năng đầu cuối của tmux và xterm, và bạn có thể gặp phải một số vấn đề.


Một số gợi ý tốt ở đây. Tôi sử dụng bash, nhưng tiếc là TERM=xterm vimkhông khắc phục được vấn đề. Tôi sẽ phải đào sâu hơn một chút.
Ton van den Heuvel

1

Như tiêu đề đề cập đến Màn hình, đây là giải pháp để khắc phục hành vi của phím Escape trong Màn hình GNU. (Lấy từ đây .)

Thêm vào

maptimeout 5

để .screenrccấu hình tập tin.

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.