2013-05-27 2 views
1

Есть очень приятная функция, которую я люблю в ZSH. Когда вы набираете! символ, за которым следует слово + клавиша TAB, он заставит оболочку вытащить последнюю команду, начинающуюся с слова, за которым следует! и расширить его; например .:! символ для вызова поиска в zsh

% !ssh 

Тогда ожидаемое поведение является то, что вы можете использовать клавиши со стрелками вверх и вниз, чтобы перебрать истории с размахом ограничивается теми командами, которые начинаются с SSH. Теперь я получаю эту работу в Mac OS X, но по какой-то причине я не получаю ее в своем Linux-окне. Мой bindkeys выглядит в моей установке Linux:

[email protected] ⮀ ~ ⮀ bindkey | fgrep history 
"^N" down-line-or-history 
"^O" accept-line-and-down-history 
"^P" up-line-or-history 
"^R" history-incremental-search-backward 
"^S" history-incremental-search-forward 
"^X^N" infer-next-history 
"^Xr" history-incremental-search-backward 
"^Xs" history-incremental-search-forward 
"^[ " expand-history 
"^[!" expand-history 
"^[," _history-complete-newer 
"^[/" _history-complete-older 
"^[<" beginning-of-buffer-or-history 
"^[>" end-of-buffer-or-history 
"^[N" history-search-forward 
"^[OA" up-line-or-history 
"^[OB" down-line-or-history 
"^[P" history-search-backward 
"^[[5~" up-line-or-history 
"^[[6~" down-line-or-history 
"^[n" history-search-forward 
"^[p" history-search-backward 

Что bindkey я должен изменить в порядке получения поведения ожидается? Я уже изменил некоторые из них, но результат не является желательным. Я был бы рад, если бы кто-нибудь мог мне помочь. Версия zsh, которую я установил, - 5.0.2.

Edited чт 30 май 10:27:49 CEST 2013:

@Francisco он работал. Я не знал, что необходимая опция была в режиме «вверх-line-or-search» и «down-line-or-search». Так что я следующим образом:

1) Я проверил, которые были назначены ключи:

⮀ ~/.dotfiles ⮀ ⭠ ihacku ⮀ bindkey | fgrep search 
"^R" history-incremental-search-backward 
"^S" history-incremental-search-forward 
"^Xr" history-incremental-search-backward 
"^Xs" history-incremental-search-forward 
"^[N" history-search-forward 
"^[OA" up-line-or-search 
"^[OB" down-line-or-search 
"^[P" history-search-backward 
"^[[A" up-line-or-search 
"^[[B" down-line-or-search 
"^[n" history-search-forward 
"^[p" history-search-backward 

2) Затем я напечатал Ctrl + v следуют стрелка вверх, а затем вниз стрелку и я получил:

⮀ ~/.dotfiles ⮀ ⭠ ihacku ⮀ ^[OA 
⮀ ~/.dotfiles ⮀ ⭠ ihacku ⮀ ^[OB 

3) Я добавил свой код на .zshrc:

bindkey '^[OA' up-line-or-search             
bindkey '^[OB' down-line-or-search 

Примечание: Я добавил эти строки после загрузки oh-my-zsh.sh.

5) Я соерсед мой .zsh:

. ~/.zshrc 

И, наконец, я получить ожидаемый результат. Большое спасибо за Вашу помощь.

ответ

1

Я думаю, вам нужно убедиться, что up-line-or-search ограничено ключом "up-arrow" (в зависимости от того, какой символ). На моем собственном .zshrc (работает поверх Linux), я получаю это сделано с

bindkey '^[[A' up-line-or-search 
bindkey '^[[B' down-line-or-search 

Обратите внимание, что эти функции назначены но "^[[5~" ...