Меню завершения истории ZSH

Автозаполнение Zsh удивительно, но я не могу правильно настроить одну вещь: Я хочу, чтобы zsh предложил мне список команд из истории.

Я знаю, что я могу искать историю с помощью Ctrl + R, но мне нужно что-то другое. Когда я печатаю:

шелаев @слон ~ "убить 1 TAB
 1642 shelajev gnome-keyring-d
 1718 шелаев гном-сессия
 1807 shelajev ssh-agent
 1810 shelajev dbus-launch
 1811 shelajev dbus-daemon
 1822 shelajev gnome-settings-
 1884 shelajev gvfsd
 1891 shelajev gvfs-fuse-daemo

Zsh предлагает мне список процессов, которые нужно убить. Я хочу иметь что-то вроде этого:

шелаев @слон ~ "убить Ctrl + X Ctrl + X
 kill -9 12093
 kill -15 4123

где те элементы в списке берутся из моей истории.

Существует полная версия ZLE, но я не знаю, как ее правильно настроить.

У меня есть следующее в .zshrc:

zle -C hist-complete complete-word _generic
zstyle ':completion:hist-complete:*' completer _history
bindkey "^X^X" hist-complete

Но это только завершает отдельные слова, что не дает мне многого. Есть ли способ объединить поиск истории для строк в истории и показать список этого?

Ответ 1

есть что-то в zsh, называемое history-beginning-search-menu. если вы положили:

autoload -Uz history-beginning-search-menu
zle -N history-beginning-search-menu
bindkey '^X^X' history-beginning-search-menu

в вашем .zshrc файле. затем, например:

kent$  sudo systemctl[here I type C-X twice]
Enter digits:
01 sudo systemctl acpid.service                      11 sudo systemctl enable netfs
02 sudo systemctl enable acpid                       12 sudo systemctl enable networkmanager
03 sudo systemctl enable alsa                        13 sudo systemctl enable NetworkManager
04 sudo systemctl enable alsa-restore                14 sudo systemctl enable NetworkManager-wait-online
05 sudo systemctl enable alsa-store                  15 sudo systemctl enable ntpd
06 sudo systemctl enable cronie                      16 sudo systemctl enable sshd
07 sudo systemctl enable cups                        17 sudo systemctl enable syslog-ng
08 sudo systemctl enable dbus                        18 sudo systemctl enable tpfand
09 sudo systemctl enable gdm                         19 sudo systemctl reload gdm.service
10 sudo systemctl enable hal                         20 sudo systemctl restart gdm.service

то вам нужно указать номер индекса для запуска команды в истории.

конечно, для этого может быть какая-то оптимизация. но я думаю, это поможет вам начать.

надеюсь, что это поможет.