
Я использую iTerm2 с bash и прокручиваю буфер истории на одну строку, набрав Shift+Up
. Когда я переключаюсь на оболочку zsh, она просто вводит 2A
. Как мне прокрутить одну строку в zsh, используя только клавиатуру, желательно с помощью Shift+Up
?
решение1
Я думаю, это зависит от эмулятора терминала.
Например, сзш, в konsole работает Shift+ Up.
В xterm нет, но работает Shift+ PgUp.
Похоже, что с iTerm2 это должно работать по умолчанию:
- ⌘ ↑переместиться на одну строку вверх
- ⌘ ↓переместиться на одну строку вниз
решение2
Функция, которую вы ищете, предоставляется виджетами up-history
и up-line-or-history
( down-history
и down-line-or-history
для прокрутки вниз).
По умолчанию up-line-or-history
должно быть привязано к , Upно вы можете привязать его к (почти) любой другой последовательности клавиш с помощью bindkey
. В терминалах специальные клавиши (клавиши, которые не генерируют печатные символы) генерируют последовательность клавиш, которая затем интерпретируется оболочкой - или нет, как показывает ваш пример 2A
for 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даже используются для ярлыков самого терминала и недоступны в оболочке.