Thay đổi hình dạng con trỏ (hoặc màu) để biểu thị chế độ vi trong bash


30

Để làm rõ: Tôi không hỏi làm thế nào để thay đổi con trỏ khi sử dụng vim trong một thiết bị đầu cuối . Tôi muốn con trỏ thay đổi khi chuyển đổi giữa chế độ đầu vào và chế độ lệnh trong chế độ vi của Bash:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

Tôi đã tìm thấy một tập lệnh giúp thay đổi màu của con trỏ trên chế độ có thể thay đổi trong zsh , nhưng tôi không muốn thay đổi shell chỉ cho một tính năng này.

Có cách nào để khiến con trỏ thay đổi hình dạng, như trong gvim, (hoặc thậm chí chỉ là màu) khi chuyển đổi giữa các chế độ lệnh và chèn trên dòng lệnh Bash?


Cùng một câu hỏi trong SO cho Putty, không có câu trả lời tho :( - stackoverflow.com/questions/2393383/...
studgeek

Câu trả lời:


5

thêm hai dòng này vào ~ / .inputrc :

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2

4
Câu trả lời này sẽ hữu ích hơn nhiều nếu bạn giải thích những gì họ làm và cung cấp một số ngữ cảnh, ví dụ: các cài đặt yêu cầu người dùng phải có một phiên bản Readline cụ thể.
Anthony G - công lý cho Monica

:) đây là mục nhập thủ công: gnu.org/software/bash/manual/html_node/ Kẻ
holytularers

1
Điều này sẽ chỉ hoạt động trên các thiết bị đầu cuối và trình giả lập thiết bị đầu cuối hiểu được DECSCUSR.
JdeBP

Tôi đã phải thêm set show-mode-in-prompt onvào ~/.inputrcđể làm cho công việc này.
ronakg

4

Sao chép từ đây - Kiểu vim chỉnh sửa dòng lệnh

Nên có sẵn trong bash4.3 - xem thay đổi -

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash4.3 hiện đang ở rcgiai đoạn, bạn sẽ có thể nhận được các gói cho hầu hết các bản phát hành mà không cần biên dịch từ nguồn, mặc dù không có trong kho chính. Ví dụ. Ubuntu (amd64) tại đây và Debian (repo thử nghiệm) tại đây .


Lưu ý rằng: lời nhắc sẽ không được cập nhật nếu bạn sử dụng PS1 tùy chỉnh có chứa ký tự dòng mới. tìm thấy ở đây
pgericson

@pgericson Dường như nó hoạt động với PS1 tùy chỉnh có chứa một dòng mới cho tôi trên bash 4.4.12.
DuBistKomisch

2

Tôi không tìm thấy giải pháp thực sự, nhưng có lẽ điều này có thể giúp bạn (hoặc người khác) tìm ra giải pháp tốt hơn.

Bạn phải tạo một tập lệnh (ví dụ kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

và sau khi thêm nó vào PS1 của bạn, một cái gì đó như:

export PS1="\u@\h \$(kmtest.sh)> "

nhưng như tôi đã nói, đó không phải là điều bạn muốn, vì nó chỉ thay đổi màu con trỏ sau một cr. Chúc may mắn

gb


Điều này thực sự làm việc cho bạn? Nó không làm việc cho tôi; Nó chỉ làm cho con trỏ đỏ. Tôi không nghĩ kmtest.sh được chạy mỗi khi tôi chuyển đổi giữa chế độ chèn và lệnh. Có vẻ như nó sẽ chỉ được chạy khi tạo dấu nhắc.
joecan

1

Có vẻ như có thể có một cách để làm điều đó thông qua hackline. Có lẽ chúng ta có thể thúc đẩy nó để có được chính thống?

Đây là câu trả lời của tôi trên SO https://stackoverflow.com/a/12201092/255961 mà tôi sẽ cập nhật nếu tôi có thêm thông tin.


1

Mặc dù đó không phải là chính xác những gì bạn muốn (thay đổi động con trỏ), bash 4.4 / readline 7.0 sẽ thêm hỗ trợ cho việc thay đổi động lời nhắc . Bạn sẽ có thể chỉ định các chỉ báo chế độ tùy chỉnh cho các chế độ chèn / lệnh (Điều này khác với show-mode-in-prompttùy chọn hiện tại được mã hóa cứng để sử dụng+:).

Thật không may, các phiên bản này hiện đang trong giai đoạn thử nghiệm và dường như chưa có tất cả các lỗi được giải quyết. Họ cũng thiếu khả năng chỉ định vị trí trong dấu nhắc bạn muốn chỉ báo chế độ xuất hiện.

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 trên github với chức năng này.


0

Tôi đã hỏi cùng một câu hỏi một lúc trước AskUbfox khi tôi đang chuyển từ Gvim sang Console Vim.

Tôi đã nhận được một câu trả lời nhưng nó liên quan đến việc tắt các cài đặt thiết bị đầu cuối gnome và các cài đặt này được áp dụng trên các thiết bị đầu cuối. Do đó, đôi khi con trỏ thiết bị đầu cuối gnome bị mắc kẹt ở trạng thái sai.

Tôi vẫn quan tâm đến việc bạn có nhận được giải pháp thỏa đáng hay không, nhưng theo thời gian tôi đã điều chỉnh việc thiếu thông tin trạng thái chế độ trong con trỏ. Có lẽ tôi chỉ cần nhấn thoát thường xuyên hơn (ví dụ: escđể đảm bảo tôi ở chế độ lệnh; esc iđể đảm bảo tôi ở chế độ chèn); có lẽ tôi nhìn vào trạng thái hiển thị ở dưới cùng của màn hình; có lẽ tôi vừa mới nội hóa chế độ.


3
Chỉ cần làm rõ, câu hỏi của bạn không giống như của tôi. Bạn đã hỏi cách thay đổi con trỏ trong Vim trên bàn điều khiển. Điều này cũng được ghi nhận trên wiki Vim . Tôi muốn biết làm thế nào để làm điều này trong chế độ vi của Bash .
joecan
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.