Змініть форму курсора (або колір), щоб вказати режим vi в bash


30

Для уточнення: я не запитую, як змінити курсор при використанні vim в терміналі . Я хочу, щоб курсор змінювався при переключенні між режимом введення та команд у вісовому режимі Баша:

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

Я знайшов сценарій, який робить можливим зміна кольору курсора при зміні режиму в zsh , але я не хочу міняти оболонки лише для цієї функції.

Чи є спосіб змусити курсор змінити форму, наприклад, у gvim, (або навіть просто кольорі) під час перемикання між командним та вставним режимами в командному рядку Bash?


Те ж питання в SO для Putty, немає відповіді Тхо :( - stackoverflow.com/questions/2393383 / ...
studgeek

Відповіді:


5

додайте ці два рядки до ~ / .inputrc :

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

4
Ця відповідь була б набагато кориснішою, якщо ви поясните, що вони роблять, і надайте певний контекст, наприклад, чи потрібні налаштування користувачеві мати певну версію Readline.
Ентоні Г - справедливість для Моніки

:) ось ручний запис: gnu.org/software/bash/manual/html_node/…
Holytrousers

1
Це буде працювати лише на терміналах та емуляторах терміналів, які розуміють DECSCUSR.
JdeBP

Я повинен був додати set show-mode-in-prompt onв ~/.inputrcтакож , щоб зробити цю роботу.
ronakg

4

Скопійовано звідси - редагування командного рядка vim стиль

Повинен бути доступний у bash4.3 - див. Журнал змін -

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 наразі знаходиться на rcстадії, ви повинні мати можливість отримати пакети для більшості дистрибутивів без компіляції з джерела, хоча і не в основних сховищах. Напр. Ubuntu (amd64) тут і Debian (експериментальний репо) тут .


Зауважте, що: запит не буде оновлюватися, якщо ви використовуєте користувацький PS1, який містить символ нового рядка. знайдено тут
pgericson

@pgericson Схоже, працює з користувацьким PS1, що містить для мене новий рядок на баш 4.4.12.
DuBistKomisch

2

Я не знайшов справжнього рішення, але, можливо, це могло б допомогти вам (або комусь іншому) знайти краще.

Ви повинні створити сценарій (наприклад, 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

а після додавання його до свого PS1, щось на кшталт:

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

але, як я вже сказав, це не те, що ви хочете, оскільки воно змінює колір курсору лише після кнопок. Удачі

гб


Це насправді спрацювало для вас? Мені це не вийшло; він просто зробив курсор червоним. Я не думаю, що kmtest.sh запускається кожен раз, коли я перемикаюся між режимами вставки та команд. Схоже, це буде працювати лише над створенням підказки.
joecan

1

Схоже, може бути спосіб зробити це через злому читацької лінії. Можливо, ми могли б наштовхнутись на те, щоб перетворити на мейнстрім?

Ось моя відповідь на тему https://stackoverflow.com/a/12201092/255961, яку я оновлю, якщо отримаю більше інформації.


1

Хоча це не зовсім те, що ви хочете (динамічно змінюючи курсор), bash 4.4 / readline 7.0 додасть підтримку для динамічної зміни підказки . Ви зможете вказати індикатори користувальницького режиму для режимів вставки / команди (Це відрізняється від поточного show-mode-in-promptпараметра, який жорстко кодується для використання +та :).

На жаль, ці версії наразі перебувають у бета-версії, але, здається, ще не виправлені всі помилки. Вони також не мають можливості вказати, у якому підказку ви хочете, щоб з'явився індикатор режиму.

Тим часом я опублікував виправлені версії bash 4.3 / readline 6.3 на github з цією функціональністю.


0

Я запитав те саме питання на AskUbuntu, коли я переходив з Gvim на Console Vim.

Я отримав одну відповідь, але вона включала перемикання налаштувань терміналу gnome, і ці налаштування застосовувалися через термінали. Таким чином, було можливо, що курсор терміналу gnome часом застряг у неправильному стані.

Мені все ще цікаво, чи отримаєте ви задовільне рішення, але з часом я пристосувався до відсутності інформації про стан режиму в курсорі. Можливо, я просто частіше натискаю клавішу escape (наприклад, escщоб переконатися, що я перебуваю в командному режимі; esc iщоб переконатися, що я перебуваю у режимі вставки); можливо, я дивлюся на стан, відображене внизу екрана; можливо, я просто інтерналізував режим.


3
Просто для уточнення, у вас питання не те саме, що у мене. Ви запитали, як змінити курсор у Vim на консолі. Це добре зафіксовано на вікі Vim . Я хочу знати, як це зробити у ві-режимі Баша .
Джокан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.