Під час використання режиму vi (set -o vi) з Bash, було б непогано мати підказку, яка залежить від режиму, в якому ви зараз перебуваєте (вставка або команда). Як дізнатися цей режим редагування?
До речі, це здається, що це можливо в ZSH :
Під час використання режиму vi (set -o vi) з Bash, було б непогано мати підказку, яка залежить від режиму, в якому ви зараз перебуваєте (вставка або команда). Як дізнатися цей режим редагування?
До речі, це здається, що це можливо в ZSH :
Відповіді:
Свіжий 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 (thx stooj) має впливати на всі ваші програми з включеною читанням;)
Bash 4.4 / Readline 7.0 додасть підтримку рядків режиму, встановлених користувачем .
Ви можете спробувати бета-версії, але вони здаються трохи невдалими на даний момент. Вони також ще не підтримують вказівку, де в підказці ви хочете, щоб з'явився індикатор режиму (що, на мою думку, є вбивчою функцією).
Якщо ви не хочете чекати і не боїтеся невеликої компіляції, я опублікував виправлені версії bash 4.3 та readline 6.3 до github, які підтримують цю функціональність.
З виправленими версіями ви можете робити такі речі:
Докладніші відомості, зокрема про встановлення, доступні на веб- сайті https://github.com/calid/bash
Після пошуку в Google, переглядаючи сторінку bash man, а потім переглядаючи вихідний код bash (lib / readline / vi_mode.c), схоже, немає простого способу змінити підказку при переході з режиму вставки в режим команд. Схоже, тут може виникнути можливість, щоб хтось зафіксував джерело bash, хоча є виклики для запуску та зупинки режимів у джерелі.
Побачивши ваш пост, мене зацікавило налаштування режиму bash vi. Я люблю vi, і чому б не в командному рядку. Однак, схоже, нам доведеться відслідковувати, чи перебуваємо ми в режимі вставки без швидкої зміни (так говорить багато дописів на форумі). Для того, що це варто, ти завжди перебуваєш у режимі вставки, якщо не натиснеш ESC. Це робить трохи простіше, але не завжди настільки інтуїтивно.
Я відповідаю на ваше запитання, оскільки мені цікаво бачити, куди це йде.
.inputrc
INPUTRC має можливість показати +
для вставки і :
для нормального режиму, додавши set show-mode-in-prompt on
в ~/.inputrc
як писало eMPee584, але це не дуже добре працює з багаторядковими рядками (з більш старими версіями Баша і Readline).
Рішення - це один рядок PS1
( >
) та функція, яка повторює щось перед запитом. Він вбудований в баш і називається PROMPT_COMMAND
.
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
Звичайні рядки підказок недоступні у відголосі printf. -e
Є Interprete колірних кодів, і не потрібно , щоб додати \[
або \]
, який не працює в будь-якому випадку.
Режим вставки :
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 _
Це те, що у мене є ~/.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2
В режимі вставки він кольоровий синій.
└──[ins]
Командний режим кольоровий жовтий.
└──[cmd]
Мінус полягає в тому, що він не відображається за tty
значенням, він працює на термінальному емуляторі лише кольорами.
Я намагаюся отримати індикатор і для режиму BASH vi, і ви всі дізналися, що це звучить просто і просто немає можливості цього зробити.
Мій сучасний підхід: натиснути "a", коли я не впевнений, який режим. ЯКЩО "a" з'являється після BASH PROMOT, я дізнаюся, що перебуваю в режимі "ВСТАВИТЬ". ТОГО, я натискаю "ПОВЕРНУТИСЯ" і продовжую. Це простий спосіб для мене, щоб вирішити невеликий роздратування.
До речі, я "псевдонім a = 'cal", або щось інше, щоб дати порожній удар "мало" корисності.
для підказки Multiline, як це зображення
моя робота така
мій баш-підказка
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):"
сподіваюся, що це вам допомогло
.inputrc
Спочатку переконайтеся, що ви використовуєте баш-версію вище 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
У командному режимі курсор відображається як блок.
У режимі вставки курсор відображається у вигляді вертикальної смуги.
Після цього сама підказка буде виглядати приблизно так, залежно від режиму:
(cmd)$ ...
(ins)$ ...