Несколько мелочей для .zshrc: навигация и редактирование

Алексей Федорчук

Как я неоднократно говорил, настройка Zsh — это занятие, от которого оторваться столь же трудно, как от созерцания текущей воды, горящего костра или прогресс-бара скачивания iso-образа дистрибутива на модемной скорости. И я время от времени натыкаюсь в его документации или в примерах из Сети на всякие мелкие полезности, которые беру на вооружение и заношу в свои шпаргалки для памяти. И добавляю к общему их списку.

Сегодня — пара таких мелочей, касающихся навигации по командной строке и её редактирования с помощью управляющих последовательностей (keybindings). Однако прежде — важное предупреждение. Далее в этой шпаргалке будут фигурировать коды отдельных клавиш, которые вписываются в конфигурационный файл Zsh. Они зависят от типа терминала и его настроек, и в общем случае в разных системах могут быть разными. Более того, они, как правило, отличаются в иксовых эмуляторах терминалов и в «голой» консоли.

Так что копировать их ни в коем случае не надо. А следует определить их для себя, и сделать это можно двумя способами:

  1. нажать комбинацию Control+V и затем нужную клавишу или их последовательность (например, Control+Right);
  2. дать команду 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 может показаться излишеством, но мне упрощает жизнь, особенно на компактных и ноутбучных клавиатурах, где управляющие клавиши могут располагаться в самых неожиданных местах, да ещё и в неполном комплекте.

Содержание

Несколько мелочей для .zshrc: навигация и редактирование: 4 комментария

  1. > Meta+Backspace — «большого» слова от позиции курсора до начала.
    А Ctrl-W-то чем плох?

  2. только тем, что я про него совсем забыл
    спасибо

  3. Хотя, кажется, одинаково неудобные варианты. :)

  4. Control+Backspace для меня оказалось удобно — большим и средним пальцем одной руки нажимать.

Добавить комментарий