Làm cách nào để hiển thị chế độ Vi hiện tại khi sử dụng bàn phím Vi trong trình bao?


15

Tôi sử dụng các phím bấm vi trong vỏ tcsh của tôi.

Bây giờ, tôi không biết tôi đang ở chế độ vi nào ( insertchế độ hoặc commandchế độ), điều này dẫn đến rất nhiều sự thất vọng.

Có ai biết một cách để hiển thị chế độ vi hiện tại trong trình bao không? (bằng cách bao gồm trong lời nhắc hoặc một cái gì đó)

Câu trả lời:


4

Tôi không tin có bất kỳ cách nào để xác định trực quan chế độ của bạn trong chế độ nào, nhưng nếu bạn sửa đổi hành vi của mình một chút thì điều đó không thành vấn đề.

Nếu bạn muốn ở chế độ lệnh, nhấn ESC trước khi gõ lệnh.

Nếu bạn muốn ở chế độ chèn, nhấn ESC và i trước khi nhập nội dung.

Cuối cùng, bạn sẽ nhấn ESC rất nhiều, nhưng mọi người dùng vi tôi từng gặp đều làm điều đó.


1
Vấn đề là, trong shell, các ESC bổ sung không bị bỏ qua - khi tôi đưa ESC thêm, sau đó gõ lệnh (giả sử h để di chuyển sang trái), nó chỉ đơn giản là phát ra tiếng bíp và không làm gì cả.
- Phục hồi Monica

2
Bằng cách "thêm ESC", ý tôi là nhấn ESC khi tôi đang ở chế độ lệnh - điều mà tôi làm rất nhiều vì tôi không biết tôi đang ở chế độ nào.
sundar - Phục hồi lại

Bạn nói đúng. Tôi đã sử dụng nó quá lâu đến nỗi tôi thậm chí không nhận thấy hành vi đó nữa. Một lần nữa, câu trả lời đơn giản nhất. Nếu bạn nhấn ESC và h và không có gì xảy ra, hãy nhấn lại h. Tôi nghĩ rằng điều đó mở ra một câu hỏi khác. Tại sao nhấn ESC trong khi ở chế độ 'lệnh' của các phím bấm vi khiến ký tự tiếp theo không được hiểu chính xác? Bản thân vi không làm điều này. Tôi có thể gõ ESC 10 lần và lệnh tiếp theo vẫn hoạt động như dự đoán.
Bob Weber

Một mẹo khác, tắt chuông. Nó cực kỳ khó chịu chỉ vì lý do bạn mô tả - và bởi vì nó phát ra tiếng bíp khi hoàn thành tab. Có nhiều cách khác nhau để làm điều này tùy thuộc vào môi trường của bạn.
Bob Weber

1
Ok, tôi hiện đang thử giải pháp này. Ánh xạ Caps Lock to Escape đã giúp thực hiện việc này dễ dàng hơn, nhưng tôi vẫn chưa quen với ESC-i cho chế độ chèn. Tôi hy vọng tôi sẽ sớm. > Nếu bạn nhấn ESC và h và không có gì xảy ra, hãy nhấn lại h Vấn đề với điều này là, nó khá là bực bội và phá vỡ dòng chảy rất nhiều. Đó là một điều nữa mà tôi phải suy nghĩ ngoài lệnh tôi đang hình thành. Tôi thích vi keybindings vì lý do là chúng nằm trong bộ nhớ cơ bắp của tôi và đưa ra một điều ít suy nghĩ hơn - loại phá vỡ này có mục đích chính nó ...
- Phục hồi lại vào

3

Tôi đã xem qua tài liệu này và tôi phải nói rằng tôi không thể tìm thấy bất kỳ cách nào để phát hiện và hiển thị chế độ vi hiện tại. Tôi hy vọng bạn có một bất ngờ thú vị và ai đó đưa ra giải pháp, nhưng tôi chắc chắn không thể thấy cách nào để làm những gì bạn yêu cầu.

Tôi nghĩ rằng có một cách để làm điều này, nhưng nó quá mức cần thiết cho một sự phiền toái nhỏ, và tôi không nghĩ đó là những gì bạn có trong đầu khi bạn đặt ra câu hỏi này. Nếu điều này là đúng, hãy ngừng đọc ngay bây giờ và tận hưởng cuộc sống của bạn.

OTOH, nếu đây thực sự là thú cưng của bạn, và nó khiến bạn phát điên, và bạn thực sự tuyệt vọng muốn giải quyết vấn đề này, đây là ý tưởng của tôi về cách giải quyết vấn đề này:

  1. Nhận một bản sao của Lập trình nâng cao trong Môi trường UNIX (R) của W. Richard Stevens.
  2. Đọc các chương về Luồng và Thiết bị đầu cuối I / O.
  3. Tải mã nguồn về cuốn sách nói trên, bao gồm một ví dụ về luồng có thể được xếp lớp trên thiết bị đầu cuối.
  4. Thực hiện xử lý của bạn đối với tổ hợp phím Esc (hoặc cả hai lần nhấn phím thay đổi chế độ) và chỉ ra điều đó thông qua thao tác bấm chuông hoặc nền của dòng hiện tại.

Tóm lại, Unix triển khai I / O đầu cuối dưới dạng luồng I / O song công hoàn chỉnh giữa trình điều khiển thiết bị và quy trình người dùng, trong đó các mô-đun có thể được chèn vào. Nó được tổ chức thành một ngăn xếp, vì vậy bạn có thể tạo nhiều luồng như bạn muốn. Tổng các luồng được tạo sẽ tạo ra hành vi I / O đầu cuối của bạn.

Khi một ký tự được nhập, mô-đun đầu tiên sẽ kiểm tra nó và chuyển nó vào (nếu nó muốn). Khi phản hồi đến theo hướng ngược lại, nó lại có cơ hội kiểm tra và chuyển nó đi. Đây là cách Ctrl-C được xử lý ở mức cao hơn so với khóa ký tự bình thường.

Bạn có thể tạo nhị phân triển khai mô-đun luồng, khi được gọi sẽ chạy âm thầm ở nền trước, kiểm tra và chuyển qua tất cả các tổ hợp phím, thực hiện hành động ưa thích của bạn trên tổ hợp phím bạn quan tâm. Đối với tất cả ý định và mục đích, nó sẽ xuất hiện như thể bạn đang làm việc trên vỏ. Ôi. Bạn có thể gọi nhị phân này trên dòng cuối cùng (hoặc đầu tiên hoặc bất kỳ) nào trong .tcshrc của bạn và bạn thậm chí sẽ không biết nó ở đó.

Có một mồi tốt ở đây , nhưng tôi không thể tìm thấy nhiều về chủ đề này, có lẽ bởi vì nó đã qua quá khứ.


2

Trang này có một kịch bản khá chi tiết, thiết lập những gì bạn muốn (và hơn thế nữa) trong zsh . Có lẽ nó có thể được điều chỉnh để hoạt động với tcsh (tôi không quen thuộc lắm với cái vỏ đó).


Tôi cũng không quen thuộc với tcsh, nhưng tôi nghĩ rằng trang bạn hiển thị sử dụng các tiện ích zsh (với zle). Tôi không nghĩ những cái vỏ khác có cái đó, nhưng nếu chúng làm được, thì đó chắc chắn sẽ là mánh khóe.
BrianH

1

Đối với bất kỳ ai có vấn đề chính xác này (như bản thân tôi): Tôi đã tìm thấy một giải pháp tại stackoverflow . Rõ ràng có hỗ trợ riêng cho việc này trong đường dẫn, vì vậy bạn chỉ cần thêm những điều sau vào ~/.inputrc:

set show-mode-in-prompt on

Và để tùy chỉnh sử dụng nhân vật thực tế:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"

0

Chỉnh sửa dòng lệnh với tcsh

Có hai chế độ chính để chỉnh sửa dòng lệnh,
dựa trên hai trình soạn thảo văn bản được sử dụng phổ biến nhất là Emacs và vi.

Với các ràng buộc vi , bạn phải chuyển đổi giữa chế độ chènlệnh ;
các lệnh khác nhau rất hữu ích trong mỗi chế độ.

chế độ vi có hai nút con, chèn lệnh .

  • Chế độ mặc định là chèn .
  • Bạn có thể chuyển đổi giữa các chế độ bằng cách nhấn Esc .
  • Ngoài ra, trong chế độ lệnh ,
    nhập 'a' (chắp thêm) hoặc 'i' (chèn) sẽ đưa bạn trở lại chế độ chèn
    .

Thêm ghi chú trên trang tcshtùy chỉnh đã được liên kết ở trên.


2
Các liên kết của bạn đến các sách O'Reilly có bản quyền ...
BrianH

0

Tôi đã có cùng một vấn đề chính xác và tình cờ đã tìm ra giải pháp. Mặc dù chủ đề này đã cũ, tôi không thể tìm thấy bất kỳ trang web nào khác cung cấp giải pháp, vì vậy tôi cho rằng việc đăng bài trên chủ đề này là ổn.

Chỉ cần đặt lại các cài đặt của chương trình thiết bị đầu cuối hoặc vỏ của bạn. Tôi hiện đang sử dụng PuTTY và tôi vừa xóa các cài đặt đã lưu cho kết nối đã lưu của mình và tạo lại một phiên đã lưu. Làm việc như người ở.

Hi vọng điêu nay co ich!


0

Xin vui lòng xem câu trả lời của tôi trên SO . Bash 4.4 / Readline 7.0 sẽ thêm hỗ trợ cho chức năng này và trong thời gian tạm thời tôi đã xuất bản các phiên bản vá của Bash 4.3 / Readline 6.3 cho github .

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.