Алексей Федорчук
Как я неоднократно говорил, настройка Zsh — это занятие, от которого оторваться столь же трудно, как от созерцания текущей воды, горящего костра или прогресс-бара скачивания iso-образа дистрибутива на модемной скорости. И я время от времени натыкаюсь в его документации или в примерах из Сети на всякие мелкие полезности, которые беру на вооружение и заношу в свои шпаргалки для памяти. И добавляю к общему их списку.
Сегодня — пара таких мелочей, касающихся навигации по командной строке и её редактирования с помощью управляющих последовательностей (keybindings). Однако прежде — важное предупреждение. Далее в этой шпаргалке будут фигурировать коды отдельных клавиш, которые вписываются в конфигурационный файл Zsh. Они зависят от типа терминала и его настроек, и в общем случае в разных системах могут быть разными. Более того, они, как правило, отличаются в иксовых эмуляторах терминалов и в «голой» консоли.
Так что копировать их ни в коем случае не надо. А следует определить их для себя, и сделать это можно двумя способами:
- нажать комбинацию Control+V и затем нужную клавишу или их последовательность (например, Control+Right);
- дать команду
cat
без указания аргумента и уже в ней нажимать клавиши и кейбиндинги.
А вот уже полученные значения (например, в моей системе для Control+Right это будет ^[[1;5C
) копировать в соответствующие места конфига, не забыв заключить их в кавычки (одинарные или двойные — в данном случае значения не имеет).
Наверное, все знают про такие управляющие последовательности, как Control+F/B, перемещающие курсор на один символ вперёд или назад, соответственно. Вряд ли открою большой секрет, сказав, что аналогичные, но «усиленные», последовательности, Meta+F/B, перемещают курсор на одно «большое» слово в тех же направлениях (точнее, от текущего его положения до ближайшего пробела спереди или сзади). И уж конечно, положение мифической клавиши Meta также не является предметом государственной или военной тайны: эту роль исполняет либо нажатая клавиша Alt, либо нажатая и отпущенная клавиша Escape.
Однако в деле навигации можно обойтись и без мифологии — клавишей Control в сочетании со стрелками управления курсором Right и Left. Для этого в файл ~/.zshrc
достаточно внести две строчки:
bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word
Смысл их, думаю, ясен без комментариев.
Общеизвестны и управляющие последовательности для удаления элементов командной строки:
- Control+D — символа в позиции курсора;
- Control+H — предыдущего символа;
- Meta+D — «большого» слова от позиции курсора до конца;
- Meta+Backspace — «большого» слова от позиции курсора до начала.
Для удаления предыдущего символа можно пользоваться и просто клавишей Backspace, а вот клавиша Delete для удаления текущего символа может и не работать. Однако, как говорилось ранее, это безобразие устраняется такой строкой в ~/.zshrc
:
bindkey "^[[3~" delete-char
А если добавить туда ещё и строку
bindkey "^[[3;5~" delete-word
то комбинация Control+Delete будет удалять «большое» слово от позиции курсора до конца, подобно комбинации Meta+D.
Аналогично и при удалении «большого» слова до его начала можно обойтись без клавиши Meta, вписав в ~/.zshrc
такую строку:
bindkey "^?" backward-kill-word
После этого данная операция будет выполняться последовательностью Control+Backspace.
Дублирование кейбиндингов с Control и Meta может показаться излишеством, но мне упрощает жизнь, особенно на компактных и ноутбучных клавиатурах, где управляющие клавиши могут располагаться в самых неожиданных местах, да ещё и в неполном комплекте.
> Meta+Backspace — «большого» слова от позиции курсора до начала.
А Ctrl-W-то чем плох?
только тем, что я про него совсем забыл
спасибо
Хотя, кажется, одинаково неудобные варианты. :)
Control+Backspace для меня оказалось удобно — большим и средним пальцем одной руки нажимать.