Завершение истории с помощью 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