Як зупинити zsh від поїдання місця перед символом труби?


18

Коли я набираю пробіл, який супроводжується символом труби '|'в командному рядку zsh, 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 більше цього не робитиме. Тоді вам доведеться закопати (швидше за все) в о-мі-зш, щоб зрозуміти, як це викликає ;-)
Франциско

Відповіді:


18

Я думаю, ви маєте на увазі, що при 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.