Vim bị kẹt trong chế độ chèn


52

Tôi đã sử dụng Vim được vài tháng nay qua máy chủ web của mình (họ cho phép truy cập putty). Đột nhiên, escapechìa khóa đã trở nên không phản hồi. Tôi không thể tồn tại chèn hoặc bất kỳ chế độ nào khác bằng cách nhấn thoát. Tôi phải đánh F1để mang lại sự giúp đỡ trong vim và đá tôi vào chế độ chỉ huy.

Tôi chắc chắn rằng phím thoát trên bàn phím của tôi hoạt động tốt vì tất cả các phím tắt cửa sổ sử dụng phím thoát hoạt động bình thường.

Tôi biết đây là một câu hỏi lố bịch và tôi chắc chắn còn nhiều điều cần xem xét về một giải pháp. Những gì tôi thực sự cần là một sự dẫn dắt vững chắc về nơi bắt đầu tìm kiếm.

Những điều có thể giúp:

  1. Tôi đang sử dụng vim qua putty
  2. Tôi đang đăng nhập bằng jailshell
  3. Tôi không root

thiết lập thiết bị đầu cuối của bạn là gì? tức là chính xác biến môi trường TERM được đặt thành (trong vỏ từ xa) là gì?
quack quixote

$ TERM được đặt thành 'xterm'
Levi Hackwith

Ctrl-[hoạt động không? Bạn nhận được gì nếu bạn nhấn Ctrl-vrồi thoát? Nó sẽ hiển thị như ^[.
Dennis Williamson

Ctrl- [đã hoạt động. Đá vào! Điều này tiết kiệm cho tôi rất nhiều thất vọng. Có bất kỳ cơ hội bạn có thể giải thích tại sao esckhông còn làm việc? Ngoài ra, xin vui lòng gửi bình luận của bạn như là một câu trả lời để tôi có thể chấp nhận nó.
Levi Hackwith

Suy nghĩ đầu tiên của tôi khi đọc điều này: "Ồ, anh ấy đã phá vỡ nút 'Đưa tôi ra khỏi đây"
Daniel

Câu trả lời:


16

Hãy thử sử dụng Ctrl-[thay vì Esc.

Kết quả của:

python -c "print ord(raw_input('char '))"

khi bạn nhấn EscEnter? Nó phải là "27". Kết quả của việc nhấn Ctrl-Vsau đó là Escgì?

Bạn đã kiểm tra tất cả các cài đặt trong PuTTY để xem chúng có hợp lý không?

Bạn đang sử dụng Bash trên hệ thống từ xa? Nhìn vào đầu ra của

bind -p | grep -i '\\e' | less

và xem nếu bạn thấy bất cứ điều gì bất thường. Bạn có một tập tin được gọi là ~/.inputrc? Nhìn vào nội dung của nó để xem có gì bất thường không.

Nhìn vào của bạn ~/.vimrcvà xem nếu mọi thứ cũng ổn.


Ctrl-c cũng nên kết thúc chế độ chèn ('đôi khi hơi khó khăn để truy cập vào một số bàn phím)
akira

1
Tôi đã chạy tập lệnh python và nó trở lại dưới dạng một chuỗi rỗng. Làm thế nào để tôi sửa lỗi này? Tôi đang sử dụng putty.
Keith

@Keith: Bạn đã thử bất kỳ đề xuất chẩn đoán nào khác chưa?
Dennis Williamson

ctrl + [làm việc cho tôi vì bất kỳ lý do gì, không biết tôi đã làm gì để khiến vim của tôi bị mắc kẹt.
Derek Adair

147

Tôi đã nhấn nhầm Ctrl+ svà bị kẹt trong chế độ chèn. Để thoát khỏi nó, hãy sử dụng Ctrl+ q.


7
Đó không phải là chế độ chèn XOFF. Bạn có thể vô hiệu hóa kiểm soát luồng phần mềm bằng cách thực hiện stty -ixon(thêm nó vào của bạn ~/.bashrc). Sau đó, tổ hợp phím đó sẽ có sẵn để được ràng buộc với một cái gì đó khác. Theo mặc định trong Bash, nó bị ràng buộc forward-search-history(ngược lại với Ctrl-r). Ctrl-q (Bash quoted-insert) cũng sẽ có sẵn.
Dennis Williamson

@DennisWilliamson Sẽ không phải .bash_profilelà một nơi tốt hơn? Không cần phải tắt nó trong vỏ không tương tác, phải không?
Piotr Dobrogost

1
@PiotrDobrogost: "Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, Bash đọc và thực thi các lệnh từ ~ / .bashrc, nếu tệp đó tồn tại." .bash_profilechỉ được thực thi khi Bash là shell đăng nhập. "Vì vậy, thông thường, ~ / .bash_profile của bạn chứa dòng if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
Dennis Williamson

@DennisWilliamson Bạn nói đúng. Điều tôi muốn nói là có lẽ chỉ nên tắt điều khiển luồng phần mềm trong các vỏ tương tác. Nếu điều này là đúng thì sau đó sẽ có ý nghĩa khi tìm cách để biết liệu shell có tương tác hay không và chỉ vô hiệu hóa điều khiển luồng phần mềm trong trường hợp này.
Piotr Dobrogost

@PiotrDobrogost: Xem câu trả lời của tôi về "Làm cách nào tôi có thể kiểm tra bash nếu shell đang chạy trong chế độ tương tác?"
Dennis Williamson

4

Có thể bạn đang sử dụng chế độ chèn .

'insertmode' 'im' 'noinsertmode' 'noim'
boolean (tắt mặc định)
Làm cho Vim hoạt động theo cách chế độ Chèn là chế độ mặc định. Hữu ích nếu bạn muốn sử dụng Vim như một trình soạn thảo không mod. Được sử dụng cho | evim |.
[...]
- Sử dụng CTRL-Ođể thực thi một lệnh chế độ Bình thường | i_CTRL-O |). Khi đây là ánh xạ, nó được thực thi như thể 'insertmode' đã tắt. Chế độ bình thường vẫn hoạt động cho đến khi ánh xạ kết thúc. - Sử dụng CTRL-Lđể thực thi một số lệnh chế độ Bình thường, sau đó sử dụng Escđể quay lại chế độ Chèn. Lưu ý rằng CTRL-Ldi chuyển con trỏ sang trái, giống như khi 'insertmode' không được đặt. | i_CTRL-L |

Tôi đề nghị chỉnh sửa ~/.vimrcđể thêm dòng sau:

set noinsertmode         "disable insert mode

1
Trong trường hợp của tôi, nó bị kẹt trong chế độ chèn vì tôi đã vô tình sử dụng `-y` trong dòng lệnh Như đã nói trong hướng dẫn: -y Bắt đầu Vim ở chế độ dễ, giống như tệp thực thi được gọi là "evim" hoặc "eview". Làm cho Vim hoạt động như một trình soạn thảo nhấp và loại. Để thoát khỏi "chế độ dễ dàng" này, chỉ cần sử dụng <kbd> CTRL </ kbd> + <kbd> l </ kbd> (chữ thường) như đã nói bởi + SandRock
tấn

0

Tôi gặp vấn đề này, nhưng nhận ra đó là do vô tình thay đổi chế độ đầu vào SCIM thành "Khác - MÃ SỐ". Tôi đã đổi nó thành tiếng Anh / Bàn phím và không gặp vấn đề gì nữa.

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.