Мой ~/.zshrc:

setopt histignoredups
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end

Я хочу, чтобы стрелка вверх заполнила последнюю командную строку, которая соответствует введенной до сих пор командной строке,

dotnet build
dotnet bin/Debug/netcoreapp2.2/MyProg.dll
dotnet build
dotnet bin<UP ARROW>

Следует заполнить dotnet bin/Debug/netcoreapp2.2/MyProg.dll.

Однако с ~/.zshrc, который у меня есть сейчас, он заполняет dotnet build.

Похоже, это работает только до первого пробела.

Как я могу заставить стрелку вверх выбрать последнюю командную строку, которая соответствует введенной командной строке?

2
Gilles 'SO- stop being evil' 11 Ноя 2020 в 12:16

1 ответ

Лучший ответ

TL, DR:

bindkey "^[OA" history-beginning-search-backward-end
bindkey "^[OB" history-beginning-search-forward-end

Действительно ли ваш терминал отправляет ^[[A для Up? Мой отправляет ^[OA. С вашим .zshrc:

darkstar% bindkey | grep '\^\[.A'
"^[OA" up-line-or-history
"^[[A" history-beginning-search-backward-end

Нажатие Вверх отправляет ^[OA с привязкой по умолчанию и вызывает предыдущую строку. Это просто совпадение, что предыдущая строка начинается с того же слова. Нажатие Esc [ A вызывает предыдущую строку, начинающуюся с dotnet bin по желанию.

Чтобы проверить, что ваш терминал посылает для функции или клавиши курсора, нажмите Ctrl+V, затем клавишу или аккорд клавиши. Обратите внимание, что полноэкранные приложения часто используют режим терминала, отличный от приложений командной строки, где некоторые клавиши отправляют другие escape-последовательности (клавиши курсора приложения). ^[[A – обычная escape-последовательность командной строки для Up, ^[OA – обычная полноэкранная escape-последовательность.

1
Gilles 'SO- stop being evil' 11 Ноя 2020 в 12:16
Это кажется непоследовательным. Некоторые из вкладок моего терминала имеют вид ^[[A, а некоторые - ^[OA. Вы знаете, почему это может быть? Terminal.app на macOS
 – 
theonlygusti
12 Ноя 2020 в 16:52