Другое приглашение bash для разных режимов редактирования vi?
114
При использовании режима vi (set -o vi) с Bash было бы неплохо иметь подсказку, которая зависит от режима, в котором вы сейчас находитесь (вставка или команда). Как узнать этот режим редактирования?
Мне это тоже любопытно. Искал документацию по bash, но ничего не нашел.
Эндрю Феррье
Ответы:
68
В свежем bash 4.3 и readline 6.3 есть кое-что для вас, ребята ... из журнала изменений:
4.NewFeaturesinReadline
j.New user-settable variable, show-mode-in-prompt, adds a characters to the
beginning of the prompt indicating the current editing mode.
Так положив
set show-mode-in-prompt on
в / etc / inputrc или ~ / .inputrc (thx stooj) должны повлиять на все ваши программы с поддержкой readline;)
какой статус по этому поводу? Я пытаюсь найти что-то подобное (не для bash, а для других подсказок на основе строки чтения, которые я использую). Я искал в Google и не нашел никаких других обновлений (кроме этой и статьи, на которую вы ссылались )
Mike HR
4
Просто добавление из eMPee584 - если вы используете bash 4.3 или выше, добавьте следующее в свой файл ~ / .inputrc set show-mode-in-prompt Это добавляет + в самый левый угол вашего приглашения, если вы находитесь в режиме редактирования , и a: если вы находитесь в командном режиме.
stooj
3
Итак, пока это работает; есть ли способ переместиться туда, где находится этот персонаж в режиме vi, в подсказке? Если у вас есть многострочные подсказки (пользовательские), это не так хорошо работает :)
Джеймс Миллс,
Для 4.3 он всегда находится в начале приглашения, и, к сожалению, readline перерисовывает только последнюю строку многострочного приглашения. См. Ответ «Многострочное приглашение и .inputrc» для обходного пути или ответ о исправлении bash 4.3 с исправлением 4.4 для этого.
Вы можете попробовать бета-версии, но на данный момент они кажутся немного ошибочными. Они также еще не поддерживают указание того, где в приглашении вы хотите, чтобы индикатор режима отображался (что, я думаю, является отличительной особенностью).
Если вы не хотите ждать и не боитесь небольшой компиляции, я опубликовал на github исправленные версии bash 4.3 и readline 6.3, которые поддерживают эту функцию.
С пропатченными версиями вы можете делать такие вещи:
После поиска в Google, просмотра страницы руководства bash, а затем просмотра исходного кода bash (lib / readline / vi_mode.c), похоже, нет простого способа изменить приглашение при переходе из режима вставки в командный режим. Похоже, здесь может быть возможность для кого-то исправить исходный код bash, хотя есть призывы к запуску и остановке режимов в источнике.
Увидев ваш пост, я заинтересовался настройкой режима bash vi. Мне нравится vi, и почему бы и нет в командной строке. Однако похоже, что нам придется отслеживать, находимся ли мы в режиме вставки, без быстрого изменения (так говорится во многих сообщениях на форуме). Как бы то ни было, вы всегда находитесь в режиме вставки, если не нажмете ESC. Делает это немного проще, но не всегда так интуитивно понятно.
Я поднимаю ваш вопрос, так как мне интересно посмотреть, к чему это приведет.
INPUTRC имеет возможность показать +для вставки и :для нормального режима, добавив set show-mode-in-prompt onв ~/.inputrcкак писало eMPee584, но это не очень хорошо работает с многострочными строками (с более старыми версиями Баша и Readline).
Решение состоит в том, чтобы иметь одну строку PS1( >) и функцию, которая выводит что-то перед подсказкой. Он встроен в bash и называется PROMPT_COMMAND.
Обычные строки приглашения недоступны в echo printf. Он -eпредназначен для интерпретации цветовых кодов, и нет необходимости добавлять \[или \], что в любом случае не работает.
Режим вставки :
20:57/home/sshbio/dotfiles/bash
+> _
Нормальный режим:
20:57/home/sshbio/dotfiles/bash
:> _
Нажимая вкладку , повторяется только PS1, что имеет смысл для меня:
20:57/home/sshbio/dotfiles/bash
+> ls _
bashrc bash_profile inputrc
+> ls _
Если используются цвета в vi-cmd-mode-stringили vi-ins-mode-string, они должны иметь префикс \1и после него \2. Смотрите здесь . Также,\[ и \[все равно должны выделяться, но вам нужно \\[и \\]внутри Printf.
Том Хейл
2
для многострочного приглашения, такого как это
изображение
Я также пытаюсь получить индикатор для режима BASH vi, и вы все узнали, что это звучит просто, и пока что нет возможности сделать это.
Мой текущий подход: нажмите «а», когда я не уверен, какой режим. ЕСЛИ после BASH PROMOT появляется «a», я узнаю, что нахожусь в режиме «INSERT». ЗАТЕМ нажимаю «ВОЗВРАТ» и продолжаю. Для меня это простой способ решить небольшое раздражение.
Между прочим, я 'псевдоним a =' cal 'или что-то еще, чтобы дать пустому удару немного полезности.
Для меня было бы разумнее просто нажать "esc || c- [", а не a. Тогда вам не нужно смотреть, в каком режиме вы находитесь; или вставьте ненужные символы, которые нужно удалить (или нажмите клавишу возврата)
wom
0
Другой стиль подсказки и курсора через .inputrc
Сначала вы должны убедиться, что вы используете версию bash выше, чем 4.3:
$ bash --version
GNU bash, version 4.4
Затем введите следующие строки в свой ~/.inputrc:
#################### VIM ##################### FOR MORE INFORMATION CHECK:# https://wiki.archlinux.org/index.php/Readline# TURN ON VIM (E.G. FOR READLINE)set editing-mode vi
# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)set show-mode-in-prompt on
# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE# FOR THE NUMBER AFTER `\e[`:# 0: blinking block# 1: blinking block (default)# 2: steady block# 3: blinking underline# 4: steady underline# 5: blinking bar (xterm)# 6: steady bar (xterm)set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2
В командном режиме курсор отображается как блок.
В режиме вставки курсор отображается в виде вертикальной полосы.
Сама подсказка будет выглядеть так, в зависимости от режима:
Ответы:
В свежем bash 4.3 и readline 6.3 есть кое-что для вас, ребята ... из журнала изменений:
Так положив
в / etc / inputrc или ~ / .inputrc (thx stooj) должны повлиять на все ваши программы с поддержкой readline;)
источник
Bash 4.4 / Readline 7.0 добавит поддержку строк режима, задаваемых пользователем .
Вы можете попробовать бета-версии, но на данный момент они кажутся немного ошибочными. Они также еще не поддерживают указание того, где в приглашении вы хотите, чтобы индикатор режима отображался (что, я думаю, является отличительной особенностью).
Если вы не хотите ждать и не боитесь небольшой компиляции, я опубликовал на github исправленные версии bash 4.3 и readline 6.3, которые поддерживают эту функцию.
С пропатченными версиями вы можете делать такие вещи:
Более подробная информация, в том числе о том, как установить, доступны на https://github.com/calid/bash.
источник
После поиска в Google, просмотра страницы руководства bash, а затем просмотра исходного кода bash (lib / readline / vi_mode.c), похоже, нет простого способа изменить приглашение при переходе из режима вставки в командный режим. Похоже, здесь может быть возможность для кого-то исправить исходный код bash, хотя есть призывы к запуску и остановке режимов в источнике.
Увидев ваш пост, я заинтересовался настройкой режима bash vi. Мне нравится vi, и почему бы и нет в командной строке. Однако похоже, что нам придется отслеживать, находимся ли мы в режиме вставки, без быстрого изменения (так говорится во многих сообщениях на форуме). Как бы то ни было, вы всегда находитесь в режиме вставки, если не нажмете ESC. Делает это немного проще, но не всегда так интуитивно понятно.
Я поднимаю ваш вопрос, так как мне интересно посмотреть, к чему это приведет.
источник
Многострочная подсказка и
.inputrc
INPUTRC имеет возможность показать
+
для вставки и:
для нормального режима, добавивset show-mode-in-prompt on
в~/.inputrc
как писало eMPee584, но это не очень хорошо работает с многострочными строками (с более старыми версиями Баша и Readline).Решение состоит в том, чтобы иметь одну строку
PS1
(>
) и функцию, которая выводит что-то перед подсказкой. Он встроен в bash и называетсяPROMPT_COMMAND
.Обычные строки приглашения недоступны в echo printf. Он
-e
предназначен для интерпретации цветовых кодов, и нет необходимости добавлять\[
или\]
, что в любом случае не работает.Режим вставки :
Нормальный режим:
Нажимая вкладку , повторяется только PS1, что имеет смысл для меня:
(Источник)
источник
vi-cmd-mode-string
илиvi-ins-mode-string
, они должны иметь префикс\1
и после него\2
. Смотрите здесь . Также,\[
и\[
все равно должны выделяться, но вам нужно\\[
и\\]
внутри Printf.для многострочного приглашения, такого как это изображение
моя работа такая
моя подсказка bash
.inputrc
надеюсь, это помогло вам
источник
Это то, что у меня есть
~/.inputrc
Режим вставки окрашен в синий цвет.
Командный режим окрашен в желтый цвет.
Обратной стороной является то, что он не отображается, то
tty
есть работает только на эмуляторе терминала только с цветами.источник
Я также пытаюсь получить индикатор для режима BASH vi, и вы все узнали, что это звучит просто, и пока что нет возможности сделать это.
Мой текущий подход: нажмите «а», когда я не уверен, какой режим. ЕСЛИ после BASH PROMOT появляется «a», я узнаю, что нахожусь в режиме «INSERT». ЗАТЕМ нажимаю «ВОЗВРАТ» и продолжаю. Для меня это простой способ решить небольшое раздражение.
Между прочим, я 'псевдоним a =' cal 'или что-то еще, чтобы дать пустому удару немного полезности.
источник
Другой стиль подсказки и курсора через
.inputrc
Сначала вы должны убедиться, что вы используете версию bash выше, чем
4.3
:Затем введите следующие строки в свой
~/.inputrc
:В командном режиме курсор отображается как блок.
В режиме вставки курсор отображается в виде вертикальной полосы.
Сама подсказка будет выглядеть так, в зависимости от режима:
источник