
Как изменить ширину табуляции для отступа в однострочных и многострочных командах в 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
программа не зашита в код (и, вероятно, установлена на вашем компьютере).