Zsh autocomplete is amazing, but I cannot configure one thing properly: I want zsh to offer me a list of commands from history.
I know that I can search the history with Ctrl+R, but I want something a bit different. When I type:
shelajev@elephant ~ » kill 1TAB
1642 shelajev gnome-keyring-d
1718 shelajev gnome-session
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 offers me a list of processes to kill. I want to have something like this:
shelajev@elephant ~ » kill Ctrl+X Ctrl+X
kill -9 12093
kill -15 4123
where those items in the list are taken from my history.
There exists a ZLE hist-complete thing, but I don't know how to properly configure it.
I have the following in my .zshrc
:
zle -C hist-complete complete-word _generic
zstyle ':completion:hist-complete:*' completer _history
bindkey "^X^X" hist-complete
But this only completes individual words, which doesn't give me much. Is there a way to combine history search for lines in the history and showing a listing of that?
To view all the commands stored in your ZSH history file, use the history command. In most cases, the history command will display an extensive list of all your executed commands. You can pipe the output to commands such as grep to search for a specific command or less to navigate it easily.
zsh-autocomplete adds real-time type-ahead autocompletion to Zsh. Find as you type, then press Tab to insert the top completion, Shift Tab to insert the bottom one, or ↓ / PgDn to select another completion.
On macOS completions are stored in /usr/share/zsh/5.3/functions (replace the 5.3 with 5.7. 1 in Catalina). This directory stores many functions used with zsh and is in the default fpath . All the files in that directory that start with an underscore _ contain the completion definitions command.
Use of compinit When run, it will define a few utility functions, arrange for all the necessary shell functions to be autoloaded, and will then re-bind all keys that do completion to use the new system.
there is something in zsh called history-beginning-search-menu
.
if you put:
autoload -Uz history-beginning-search-menu
zle -N history-beginning-search-menu
bindkey '^X^X' history-beginning-search-menu
in your .zshrc file. then for example:
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
then you need to give the index number to fire the command in history.
of course there could be some optimization for that. but I think this gets you start.
hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With