Я использую iTerm2 w/ bash и прокручиваю вверх по буферу истории на одну строку, набирая Shift+Up . Когда я переключаюсь на свою оболочку zsh, она просто вводит 2A . Как прокрутить вверх по одной строке в zsh только клавиатуру, желательно с помощью Shift+Up?
2 ответа
Я думаю, это зависит от эмулятора терминала.
Например, с zsh, в консоле работает Shift+Up.
В xterm нет, но работает Shift+PgUp.
Похоже, что с iTerm2 он должен работать по умолчанию:
- Move ↑ переместиться на одну строку вверх
- ⌘ ↓ для перемещения на одну строку вниз
Функция, которую вы ищете, предоставляется виджетами up-history и up-line-or-history (down-history и down-line-or-history для прокрутки вниз).
По умолчанию up-line-or-history должна быть связана с Up, но вы можете связать ее (почти) с любой другой последовательностью клавиш с помощью bindkey . В терминалах специальные ключи (ключи, которые не генерируют печатаемый символ) генерируют последовательность клавиш, которая затем интерпретируется оболочкой - или нет, как показывает ваш пример 2A для Shift+Up . Эти последовательности клавиш также могут отличаться между терминальными эмуляторами. Чтобы получить правильную последовательность клавиш для вашего терминала, откройте его, затем нажмите Ctrl+v, а затем нужную комбинацию клавиш (Shift+Up). На моем терминале (rxvt-unicode) я получаю ^[[a . Затем вы можете привязать последовательность к up-history :
bindkey <in-string> up-history
Просто замените <in-string> найденной последовательностью. В моем случае
bindkey '^[[a' up-history
Примечание 1: Скорее всего, вам нужно поместить последовательность в кавычки, поскольку она, вероятно, будет содержать символы, которые в противном случае будут интерпретироваться zsh .
Примечание 2: Некоторые комбинации клавиш могут генерировать идентичные последовательности клавиш. Например, буквы в сочетании с Ctrl+Shift обычно не отличаются от тех же букв, что и Ctrl. Оба, Ctrl+Shift+a и Ctrl+a обычно производят ^A В некоторых терминальных эмуляторах комбинации Ctrl+Shift даже используются для ярлыков самого терминала и недоступны в оболочке.
