ОБНОВЛЯТЬ

ОБНОВЛЯТЬ

По 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он отображается, тоты, то его можно настроить, привязав к определенной вами функции.

Исходя из моего ответа в

    я использую эту часть, предоставленную кем-то из списка (Оливер Киддл); проверьте
    архивы от понедельника, 8 октября для получения дополнительной информации по этому вопросу:

    tcsh-обратное-удаление-слова () {
      локальные WORDCHARS="${WORDCHARS:s#/#}"
      zle назад-удалить-слово
    }

    у меня он привязан к control-W с помощью:
    bindkey '^W' tcsh-обратное-удаление-слова

    но вы, конечно, можете это изменить.

    Я думаю, это то, что вы ищете, не так ли?

    Переменная '$WORDCHARS' — это то, как zsh определяет границы слов, поэтому вы
    можно добавить '/' к этому глобально, однако это может повлиять на другие вещи
    вы хотите оставить его для, поэтому я предпочитаю эту функцию.

Итак: вы можете использовать $WORDCHARSкак локальную переменную в своей собственной функции, определяя слова по своему усмотрению и привязывая ее к произвольному ключу.

Когда вы определяете свою функцию, не забудьте добавить ее какраскладка клавиатуры:

zle -N tcsh-backward-delete-word

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