Я использую 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 даже используются для ярлыков самого терминала и недоступны в оболочке.