Разница между разделителями слов вперед/назад между bash и zsh

После того, как macOS Catalina перетащила в 21 век, теперь по умолчанию используется zsh вместо bash для своей оболочки, я пытаюсь восстановить некоторые возможности редактирования строк в bash. В частности, если я нахожусь в конце строки:

bash$ ls /foo/bar/baz

и я нажимаю Alt-Стрелка влево, курсор переходит на «баз», затем на «бар», затем на «фу». Он рассматривает косую черту как разделитель слов, как и большинство сред (таких как Safari и приложения, использующие функции редактирования текста Cocoa).

В zsh, когда я пытаюсь сделать то же самое, первая стрелка Alt-Left перемещает курсор полностью назад к началу "/foo/bar/baz", что делает его гораздо менее полезным для редактирования частей длинного напрямую.

Можно ли это настроить в zsh? Если да, то как?


person marcprux    schedule 17.03.2020    source источник
comment
Вы можете установить и использовать современную версию bash, если хотите.   -  person chepner    schedule 18.03.2020


Ответы (1)


Символы в переменной zsh WORDCHARS считаются частью слова.

Вам просто нужно удалить / из него

% echo "$WORDCHARS"
*?_-.[]~=/&;!#$%^(){}<>
% WORDCHARS="${WORDCHARS/\//}"
# Now Alt-left-arrow will stop at /

Просто имейте в виду, что $WORDCHARS используется и в других ситуациях. См. man zshall

person Philippe    schedule 17.03.2020
comment
Отлично, спасибо! Интересно, почему косая черта не включена по умолчанию, поскольку большая часть редактирования строк связана с длинными путями к файлам… - person marcprux; 18.03.2020
comment
Как сделать так, чтобы | не считалось символом слова? - person HappyFace; 09.05.2021
comment
@HappyFace По умолчанию | не является частью слова. Можете ли вы запустить echo "$WORDCHARS", чтобы увидеть, содержит ли он |? - person Philippe; 09.05.2021
comment
@Philippe Филипп, я только что заметил, что мне нужно добавить | к WORDCHARS, чтобы получить желаемый эффект. Спасибо! - person HappyFace; 09.05.2021