13

Когда я набираю пробел с последующим символом трубы '|' в командной строке zsh zsh ест место, помещая символ канала прямо напротив предыдущего слова. Как я могу остановить это от этого? Я не уверен ни в каких возможных стилистических соглашениях, но мне нравится пространство с обеих сторон символа трубы для удобства чтения. Я использую Oh-My-Zsh в значительной степени из коробки.

Решение

Основываясь на ответе mpy ниже, я использовал следующее решение:

По умолчанию ZLE_REMOVE_SUFFIX_CHARS не определено в zsh/ohmyzsh. Когда оно не определено, оно действует так, как если бы оно было:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Я добавил следующее определение в ~/.zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(все кроме трубы) и presto, отлично! проблема ушла

1 ответ1

13

Я предполагаю, что вы имеете в виду, что когда вы нажимаете клавишу TAB выполняете команду / имя файла, пробел добавляется автоматически, но после нажатия кнопки | это снова исчезает. В противном случае я не могу воспроизвести этот эффект.

Однако в этом случае решение должно быть таким простым, как

ZLE_REMOVE_SUFFIX_CHARS=""

Объяснение немного хитрое, поэтому я просто цитирую man zshparam

ZLE_REMOVE_SUFFIX_CHARS / ZLE_SPACE_SUFFIX_CHARS Эти параметры используются редактором строк. В определенных обстоятельствах суффиксы (обычно пробел или косая черта), добавленные системой завершения, будут удалены автоматически либо потому, что следующая команда редактирования не была вставляемым символом, либо потому, что символ был помечен как требующий удаления суффикса.

Эти переменные могут содержать наборы символов, которые приведут к удалению суффикса. Если ZLE_REMOVE_SUFFIX_CHARS установлен, эти символы приведут к удалению суффикса; если ZLE_SPACE_SUFFIX_CHARS установлен, эти символы приведут к удалению суффикса и замене пробела.

Если ZLE_REMOVE_SUFFIX_CHARS не установлен, поведение по умолчанию эквивалентно:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Если ZLE_REMOVE_SUFFIX_CHARS установлен, но пуст, ни один символ не имеет такого поведения. ZLE_SPACE_SUFFIX_CHARS имеет приоритет, так что следующее:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

вызывает символы & и | удалить суффикс, но заменить его пробелом.

Чтобы проиллюстрировать разницу, предположим, что опция AUTO_REMOVE_SLASH действует, и каталог DIR был только что завершен с добавлением / , после чего пользователь вводит & . Результат по умолчанию - DIR& . С установленным ZLE_REMOVE_SUFFIX_CHARS но без включения & результат - DIR/& . С ZLE_SPACE_SUFFIX_CHARS установленным для включения & результат - DIR & .

Обратите внимание, что некоторые дополнения могут обеспечивать свое собственное удаление суффикса или поведение замены, которое переопределяет значения, описанные здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .