Zsh - Как изменить ширину табуляции для команд

Zsh - Как изменить ширину табуляции для команд

Как изменить ширину табуляции для отступа в однострочных и многострочных командах в ZSH? Это не то же самое, что и литеральные табуляции; когда вы нажимаете клавишу табуляции, ZSH фактически выводит пробелы на терминал:

zsh -f # Run without config
blackcap% echo $'\t.'
        .
blackcap%       .
blackcap% if
if>     .
blackcap% tabs 4
blackcap% echo $'\t.'
    .
blackcap%       .
blackcap% if
if>     .

На это поведение не влияют настройки моего эмулятора терминала, setterm --regtabs, или многообещающе звучащая IFSпеременная, упомянутая в man zshparam.

Я, конечно, мог бы написать свою собственную версию и привязать ее к вкладке, но этот последний вариант быстро становится неудобным, когда курсор перемещается, строки переносятся, если строк больше одной, не говоря уже о >>дружбе с клавишами vi.

решение1

ZLE расширяет символы TAB в строках приглашений и строках команд ввода до пробелов на дисплее. Расширение использует фиксированный расчет табуляции каждые 8 ​​столбцов и не включает в себя передачу фактического символа TAB на терминал и, таким образом, фактических настроек табуляции вашего терминала. Он делает то же самое предположение, когда использует TAB в качестве ярлыка для перемещения курсора вправо, когда база данных terminfo/termcap сообщает ему, что у него нет параметризованной последовательности управления курсором вперед.пример,пример,пример)

С вкладками вам повезло. В общем, не используйте util-linuxsetterm в каком эмуляторе терминала, кроме встроенного в Linux, который управляет Linux KVT. Смотритеhttps://unix.stackexchange.com/a/491883/5132для портативного аналога, который не запрограммирует жестко последовательности управления встроенного эмулятора терминала Linux.

решение2

stty -aпокажет вам, настроен ли терминал на использование аппаратных вкладок (которыеможетбыть запрограммирован) или нет (ищитеtab0в выходных данных).

zshможет быть жестко запрограммировано;settermконечно есть (см.этот). Это сработает, если ваш терминал настроен на аппаратные вкладки. Ноtabsпрограмма не зашита в код (и, вероятно, установлена ​​на вашем компьютере).

введите описание изображения здесь

Связанный контент