Zsh: Переход по словам, удаление слов целиком

Не знаю где я это впервые встретил, но мне очень нравится фича в shell’е когда можно удалить слово целиком или переместится на целое слово. Обычно это делается в виде комбинации ctrl+стрелка для перехода и ctrl+delete/ctrl+backspace для удаления слова целиком (или, вместо ctrl можно использовать alt). Однако, в Ubuntu под zsh у меня «из коробки» работает только alt+backspace. Поправим досадное недоразумение.

Смотрим какие символы выводятся в командной строке при попытке использовать желаемые комбинации. Это можно сделать открыв терминал и набрав «ctrl+v <нужная комбинация>», вывод может различаться для различных терминалов. На моей системе это выглядит так:

  • ctrl + стрелка вправо — «^[[1;5C»;
  • ctrl + стрелка влево — «^[[1;5D»
  • ctrl + delete — «^[[3;5~»;
  • ctrl + backspace — тут всё несколько сложнее, вывод будет одинаков как для ctrl+backspace, так и для просто backspace. Как вариант, можно довольствоваться alt+backspace.

Проверьте у себя, варианты могут несколько отличаться в зависимости от терминала. Для динамической конфигурации можно использовать команду tput, но сейчас мы её затрагивать не будем.

Открываем конфиг — пользовательский ~/.zshrc или глобальный /etc/zshrc и добавляем следующую «магию»:
bindkey '^[[1;5D' emacs-backward-word
bindkey '^[[1;5C' emacs-forward-word
bindkey -M emacs '^[[3;5~' delete-word

export WORDCHARS=''

Последняя строка нужна если при перемещении по словам zsh не останавливается на символах пунктуации.

Выполняем команду «source ~/.zshrc» (/etc/zhrc) или открываем новый интерпретатор и проверяем работоспособность.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: