Завершение истории с помощью sudo

Мне было интересно, есть ли функция, где вы получаете завершение истории (нажимая ВВЕРХ и ВНИЗ) для команды, а также для уже введенных аргументов, это было бы очень удобно с sudoтак, например:

$ sudo vim [PRESSING UP]
-> дополнит меня sudo vim .zshrc (если это была моя последняя команда), но если я снова нажму [PRESS UP], я получу завершение:
$ sudo ls /
(если это была моя предпоследняя команда sudo)

Но я хочу завершить команды, начинающиеся с sudo vim только.
Я надеюсь это имеет смысл.

3 ответа

Это похоже на "рыбные" предложения. Вот реализация для Zsh. Такие вещи чаще всего ориентированы на tab или же Ctrl-D завершение, чем стрелка вверх.

Также есть predict-on Zsh виджет, который будет автоматически заполнять вашу последнюю подобную команду, как набрано до сих пор. Стоит поэкспериментировать с:

% autoload predict-on; predict-on

Вы можете использовать history-beginning-search-backward виджет для этого. Он ищет в истории в обратном направлении строки с тем же началом, что и текущая строка до позиции курсора. Вы можете заменить текущую привязку или создать новую, например, при ShiftUp (на моей машине она отображается на ^[[a):

bindkey '^[[a' history-beginning-search-backward

Вы также можете связать history-beginning-search-backward виджет для того, чтобы иметь возможность перемещаться в обоих направлениях по истории (ShiftDown, ^[[b на моей машине):

bindkey '^[[b' history-beginning-search-forward

Это ограничение функции up-line-or-search, открыто man zshzle и искать up-line-or-search, Эта команда использует только первое слово для поиска в истории.

Чтобы получить "полную строку" поиска по up/down ключи

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
Другие вопросы по тегам