Вопрос или проблема
Я в курсе backward-kill-word
, но это не то, что мне нужно
hello-world
hello_world
hello.world
hello/world
helloWorld # не ожидайте, что это сработает, но было бы неплохим бонусом
Все примеры выше станут пустыми строками после backward-kill-word
, но я хочу, чтобы в итоге осталось hello
.
Это возможно в zsh?
Спасибо @stéphane-chazelas за то, что указал мне правильное направление, я нашел: изменение разделения слов в оболочке zsh
# настройки по умолчанию:
echo $WORDCHARS
# с удаленными -_/
WORDCHARS='*?.[]~=&;!#$%^(){}<>'
Я не знаю, есть ли какие-либо негативные последствия от удаления этих символов, дайте знать, если вы так думаете.
Ответ или решение
Для того чтобы удалить по одному слову за раз в zsh, вы можете настроить параметры, касающиеся разделителей слов. Как вы уже заметили, команда backward-kill-word
по умолчанию не выполняет нужную задачу, так как удаляет всю строку, оставляя её пустой.
Решение с использованием WORDCHARS
Чтобы изменить то, как zsh определяет слова, вам необходимо настроить переменную WORDCHARS
. Эта переменная определяет, какие символы используются для разделения слов. По умолчанию в WORDCHARS
включены символы, такие как -
, _
, /
, что позволяет zsh определять слова с этими символами. Если вы удалите их из этой переменной, zsh будет считать словами только алфавитные символы, что и решит вашу задачу.
Шаги для настройки WORDCHARS
-
Проверка текущих значений: Сначала посмотрите текущее значение переменной
WORDCHARS
:echo $WORDCHARS
-
Изменение
WORDCHARS
: Установите новое значение переменной, убрав символы, которые вы не хотите использовать как разделители. Для этого выполните следующую команду:WORDCHARS='*?.[]~=&;!#$%^(){}<>'
Применение изменений
После внесения изменений, каждый раз, когда вы будете использовать комбинацию клавиш для удаления слова, zsh будет учитывать только алфавитные символы как часть слова. Это будет означать, что для строки hello-world
после использования backward-kill-word
у вас останется hello
.
Возможные недостатки
Изменение переменной WORDCHARS
может привести к нежелательным результатам в других контекстах. Например, если вам потребуется работа с символами, которые вы убрали из переменной в других сценариях, это может стать проблемой. Возможно, вам придется отключать и включать каждое изменение по мере необходимости или находить более целенаправленное решение.
Заключение
Итак, теперь вы знаете, как настроить WORDCHARS
в zsh для удаления одного слова за раз. Это позволяет более гибко управлять вводом, особенно если вы часто используете конструкции с определёнными символами, такими как дефисы и подчеркивания. Будьте осторожны с изменениями и внимательно отнеситесь к их применению в зависимости от ваших текущих задач в оболочке.