
По zsh
умолчанию CTRL+ wи ALT+, Backspaceпохоже, имеют абсолютно одинаковый эффект.
Как мне сохранить CTRL+ wкак есть и изменить ALT+ Backspaceтак, чтобы он останавливался на символах, не являющихся буквами и цифрами?
т.е. когда курсор находится в конце следующей команды: echo /aaa/bbb/ccc
, нажатие CTRL+ wдолжно оставить echo
, а нажатие ALT+ Backspaceдолжно оставить echo /aaa/bbb/
.
ОБНОВЛЯТЬ
основываясь на ответе от @Thomas Dickey
, я добавил следующее к своему .zshrc
:
my-backward-delete-word () {
local WORDCHARS='~!#$%^&*(){}[]<>?+;'
zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '\e^?' my-backward-delete-word
Теперь редактор командной строки ведет себя не так, как я ожидал.
Например, символ одинарной кавычки '
не пронумерован в моем WORDCHARS
, поэтому при нажатии Alt+BackSpace, он backward-delete-word
должен остановиться на '
.
Это работает в первом примере, но не во втором:
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
во втором примере я echo '=
вышел из командной строки. После того, как я нажал Alt+BackSpaceвторой раз, все было съедено, включая echo
. Я бы ожидал, что =
было съедено только то, что должно было быть, потому что оно должно было остановиться на '
.
Почему это не работает так, как ожидалось?
решение1
На самом деле я не вижу этого в списке привязок zsh, но если bindkey
он отображается, тоты, то его можно настроить, привязав к определенной вами функции.
Исходя из моего ответа в
Как удалить слеш или слово в zsh?, Я нашел это:
zsh: остановить backward-kill-word на разделителе каталогов, который указал на
- Re: убийство назад, приводя пример Уилла Ярдли:
я использую эту часть, предоставленную кем-то из списка (Оливер Киддл); проверьте архивы от понедельника, 8 октября для получения дополнительной информации по этому вопросу: tcsh-обратное-удаление-слова () { локальные WORDCHARS="${WORDCHARS:s#/#}" zle назад-удалить-слово } у меня он привязан к control-W с помощью: bindkey '^W' tcsh-обратное-удаление-слова но вы, конечно, можете это изменить. Я думаю, это то, что вы ищете, не так ли? Переменная '$WORDCHARS' — это то, как zsh определяет границы слов, поэтому вы можно добавить '/' к этому глобально, однако это может повлиять на другие вещи вы хотите оставить его для, поэтому я предпочитаю эту функцию.
что приводит к примерам использования
$WORDCHARS
визменение разделения слов оболочки zsh, а также вики
Итак: вы можете использовать $WORDCHARS
как локальную переменную в своей собственной функции, определяя слова по своему усмотрению и привязывая ее к произвольному ключу.
Когда вы определяете свою функцию, не забудьте добавить ее какраскладка клавиатуры:
zle -N tcsh-backward-delete-word