Что такое разделители слов readline?

9

Когда я удаляю слово в Bash, оно останавливается на определенных символах, таких как _и /. Например, если я наберу

/foo/bar

и активировать backward-kill-word(обычно сопоставляется с Alt- Backspaceи / или Ctrl- w), оставшийся текст

/foo/

, Это не соответствует $COMP_WORDBREAKSили readline'srl_completer_word_break_characters . Как я могу определить (предпочтительно в работающей системе, а не значения по умолчанию в коде, поскольку они предположительно могут быть переопределены), какие символы используются для определения разрывов слов?

l0b0
источник

Ответы:

9

Документация bash гласит:

backward-kill-word (M-Rubout)

Убей слово за точкой. Границы слова такие же, как и у обратных слов.

А также

backward-word (M-b)

Вернитесь к началу текущего или предыдущего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).

Обработка backward-wordв Bash 4.2 осуществляется в комплекте кода libreadline ( text.c:rl_backward_word). Слово «перерыв» основано на том rl_alphabetic, что само зависит от isalnumфункции. Это зависит от локали, но не настраивается напрямую в bash.

Обратите внимание , что Bash 4.0 введен другой «слово» типа с shell-forward-wordи shell-backward-wordдействия (и убить их эквивалентов). Они разбиваются только на метасимволы оболочки ( ()<>;&|") и пробелы (возможно, зависящие от локали через isblank), обработанные в основном коде bash ( bashline.c).

Мат
источник
1
Хорошие ссылки, но это довольно расплывчато. Есть ли они в виду [^A-Za-z0-9], [^[:alnum:]](локализация зависит) или что - то еще?
10
Строго говоря, это настраивается с помощью локалей ( alnumкласс символов), хотя это повлияет и на другие приложения.
Стефан Шазелас
Хорошо, мы искали не то место в коде (shell-backward - *) ... isalnumРазделение основано на , поэтому действительно зависит от локали и эквивалентно вашей второй версии, @ l0b0.
Мат
1
@Stephane Chazelas: Я имел в виду, что это не может быть настроено с помощью опций bash, перефразируя этот бит.
Мат