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

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

$ sudo vim [НАЖАТЬ ВВЕРХ]
--> завершит меня до sudo vim .zshrc (если это была моя последняя команда), но если я снова [НАЖИМ ВВЕРХ], я получу завершение для:
$ sudo ls /
(если это была моя предпоследняя команда sudo)

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


person Karsten Morks    schedule 26.07.2015    source источник
comment
Это не уникально для sudo...   -  person Oliver Charlesworth    schedule 26.07.2015
comment
Это ограничение функции up-line-or-search. Откройте man zshzle и найдите up-line-or-search. Эта команда использует только первое слово для поиска в истории.   -  person Francisco    schedule 27.07.2015


Ответы (3)


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

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

% autoload predict-on; predict-on
person Micah Elliott    schedule 26.07.2015

Это ограничение функции 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
person Francisco    schedule 27.07.2015

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

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

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

bindkey '^[[b' history-beginning-search-forward
person Adaephon    schedule 27.07.2015