При использовании vi-режима (set -o vi) с Bash было бы неплохо иметь подсказку, которая зависит от режима, в котором вы сейчас находитесь (вставка или команда). Как узнать этот режим редактирования?
B.t.w, это возможно в ZSH:
При использовании vi-режима (set -o vi) с Bash было бы неплохо иметь подсказку, которая зависит от режима, в котором вы сейчас находитесь (вставка или команда). Как узнать этот режим редактирования?
B.t.w, это возможно в ZSH:
Fresh bash 4.3 и readline 6.3 есть что-то для вас, ребята.. из журнала изменений:
4. New Features in Readline
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(спасибо stooj) должен влиять на все ваши программы, поддерживаемые readline;)
После поиска google, просматривая справочную страницу bash, а затем просматривая исходный код bash (lib/readline/vi_mode.c), похоже, что нет простого способа изменить приглашение при переходе с вставьте режим в режим команд. Похоже, что у кого-то может быть возможность исправить источник bash, хотя есть призывы к запуску и остановке режимов в источнике.
Увидев ваш пост, меня заинтересовало настройку режима bash vi. Мне нравится vi, и почему бы и нет в командной строке. Однако похоже, что нам нужно будет следить за тем, находимся ли мы в режиме вставки без быстрого изменения (так говорит много сообщений на форуме). Для чего вы всегда находитесь в режиме вставки, если не нажмете ESC. Делает это немного легче, но не всегда интуитивно.
Я поднимаю ваш вопрос, поскольку мне интересно, где это происходит.
Bash 4.4/Readline 7.0 добавит поддержку строк, настраиваемых пользователем.
Вы можете попробовать бета-версии, но на данный момент они кажутся немного глючными. Они также пока не поддерживают указание, где в подсказке вы хотите, чтобы индикатор режима появился (что, я думаю, является функцией убийцы).
Если вы не хотите ждать и не боитесь небольшой компиляции, я опубликовал исправленные версии bash 4.3 и readline 6.3 для github, которые поддерживают эту функциональность.
С исправленными версиями вы можете делать такие вещи:
Более подробную информацию, в том числе о том, как установить, можно найти в https://github.com/calid/bash
.inputrc
В Inputrc есть возможность показать +
для вставки и :
для обычного режима, добавив set show-mode-in-prompt on
в ~/.inputrc
как пишет eMPee584, но это не очень хорошо работает с многострочным приглашением (в старых версиях bash и readline).
Решение состоит в том, чтобы иметь одну строку PS1
(>
) и функцию, которая выводит что-то перед запросом. Он встроен в bash и называется PROMPT_COMMAND
.
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
Обычные строки подсказки не доступны в эхо 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 _
Хотя это не одношаговое решение, один из способов добиться этого - написать script, который одновременно меняет режим редактирования и подсказку и использует указанный script исключительно при изменении режимов.
IE: пусть script называется bash -vi, который выполняет "set -o vi; PS1='desired vi mode prompt';"
Изменить: (Пока не могу комментировать) Я вижу, я не слишком внимательно прочитал вопрос и не обратил внимания на ссылку на режим ввода и команды. Не знаете, как это установить. Обычно это не проблема для меня, так как я использую только командный режим для кратких операций - я могу понять, почему это было бы полезно.
Я также пытаюсь получить индикатор для режима BASH vi, и вы все узнали, что он звучит просто и просто не может этого сделать.
Мой текущий подход: нажмите 'a', когда я не уверен, какой режим. IF 'a' появляется после BASH PROMOT, я узнаю, что я в режиме INSERT. Затем я нажимаю "ВОЗВРАТ" и продолжаю. Это легкий способ решить небольшую досаду.
Кстати, я 'alias a =' cal ', или что-то еще, чтобы дать пустому хиту "небольшую полезность".
для многострочной подсказки, как это изображение
у меня такая работа
моя подсказка bash
export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "
.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"
надеюсь, это помогло тебе