Как остановить зш от еды перед символом трубы?


17

Когда я набираю пробел, за которым следует символ канала '|'в командной строке 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
сначала повторите попытку, используя zsh -f(чтобы пропустить загрузку вашей конфигурации). Вы заметите, что Zsh больше не будет этого делать. Затем вам придется копаться (скорее всего) в oh-my-zsh, чтобы выяснить, как он это вызывает ;-)
Francisco

Ответы:


17

Я предполагаю, что вы имеете в виду, что когда вы 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 &.

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


Да, я не заметил этого, пока вы не упомянули об этом, но это происходит только после завершения табуляции, спасибо за ответ, это дает мне то, что мне нужно :)
scanny
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.