Обратный поиск в CLI: после неудачного вывода [duplicate]

См. man bash, в котором есть весь раздел Readline:

READLINE
   This  is  the  library  that  handles  reading  input  when  using   an
   interactive  shell,  unless  the  --noediting  option is given at shell
   invocation.  Line editing is also used when using the -e option to  the
   read  builtin.

GNU Readline - это библиотека, которая разработана вместе с bash, но используется рядом других программ для обеспечения лучшей интерактивной команды -line (например, цикл REPL Python). Его можно настроить с помощью ~/.inputrc или /etc/inputrc. Подробнее см. man bash .

5
задан 11 May 2018 в 19:56

6 ответов

Обтекание цветовых последовательностей в readline происходит таким образом:

echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow
echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red
echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green

Плейлисты readline являются \001 в начале последовательности без печати и \002 в конце. Они эквивалентны \[ и \] соответственно в строке PS1.

Источник: ответ archemiro на подсказку bash и эхо цвета внутри функции - переполнение стека

[ ! d5]

Это мой ответ из другого вопроса с измененным кодом.

7
ответ дан 22 May 2018 в 10:47

Обтекание цветовых последовательностей в readline происходит таким образом:

echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green

Плейлисты readline являются \001 в начале последовательности без печати и \002 в конце. Они эквивалентны \[ и \] соответственно в строке PS1.

Источник: ответ archemiro на подсказку bash и эхо цвета внутри функции - переполнение стека

[ ! d5]

Это мой ответ из другого вопроса с измененным кодом.

7
ответ дан 17 July 2018 в 14:34

Обтекание цветовых последовательностей в readline происходит таким образом:

echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green

Плейлисты readline являются \001 в начале последовательности без печати и \002 в конце. Они эквивалентны \[ и \] соответственно в строке PS1.

Источник: ответ archemiro на подсказку bash и эхо цвета внутри функции - переполнение стека

[ ! d5]

Это мой ответ из другого вопроса с измененным кодом.

7
ответ дан 20 July 2018 в 14:39

Когда вы вводите цветовые коды в своем приглашении, вам нужно добавить дополнительные маркеры, чтобы сообщить терминалу, что в приглашении есть невидимые символы

Измените

 echo -e "\033[33m${branch}\033[00m" # yellow

на [ ! d2]

 echo -e "\[\033[33m\]${branch}\[\033[00m\]" # yellow
 # .......^^........^^.........^^........^^

и т. д.

См. «Управление подсказкой» в руководстве bash.

3
ответ дан 22 May 2018 в 10:47
  • 1
    Я сделал это, но он не ускользнул, он просто добавляет \[ и \] к окончательному результату: \[\] (master)\[\] $. Я думаю, что это потому, что я использую echo для вывода строки, а затем записываю ее через вызов функции в назначении PS1 ... – MrYoshiji 11 May 2018 в 18:28
  • 2
    После дальнейшего исследования на самом деле используется echo -e, который выводит \[ и \], которые должны быть экранированы для PS1 ... – MrYoshiji 11 May 2018 в 18:38
  • 3
    Вы можете игнорировать \[ и \] и добавить новую строку перед \$, затем «странный вывод», проблема больше не беспокоит вас - вот что я делаю, но мне нравится $ слева от экрана. – glenn jackman 11 May 2018 в 18:51

Когда вы вводите цветовые коды в своем приглашении, вам нужно добавить дополнительные маркеры, чтобы сообщить терминалу, что в приглашении есть невидимые символы

Измените

echo -e "\033[33m${branch}\033[00m" # yellow

на [ ! d2] echo -e "\[\033[33m\]${branch}\[\033[00m\]" # yellow # .......^^........^^.........^^........^^

и т. д.

См. «Управление подсказкой» в руководстве bash.

3
ответ дан 17 July 2018 в 14:34

Когда вы вводите цветовые коды в своем приглашении, вам нужно добавить дополнительные маркеры, чтобы сообщить терминалу, что в приглашении есть невидимые символы

Измените

echo -e "\033[33m${branch}\033[00m" # yellow

на [ ! d2] echo -e "\[\033[33m\]${branch}\[\033[00m\]" # yellow # .......^^........^^.........^^........^^

и т. д.

См. «Управление подсказкой» в руководстве bash.

3
ответ дан 20 July 2018 в 14:39
  • 1
    Я сделал это, но он не ускользнул, он просто добавляет \[ и \] к окончательному результату: \[\] (master)\[\] $. Я думаю, что это потому, что я использую echo для вывода строки, а затем записываю ее через вызов функции в назначении PS1 ... – MrYoshiji 11 May 2018 в 18:28
  • 2
    После дальнейшего исследования на самом деле используется echo -e, который выводит \[ и \], которые должны быть экранированы для PS1 ... – MrYoshiji 11 May 2018 в 18:38
  • 3
    Вы можете игнорировать \[ и \] и добавить новую строку перед \$, затем «странный вывод», проблема больше не беспокоит вас - вот что я делаю, но мне нравится $ слева от экрана. – glenn jackman 11 May 2018 в 18:51

Другие вопросы по тегам:

Похожие вопросы: