⚙️ Command Architect
z-shell/zsh-cmd-architect
The Zsh Command Architect allows to copy segments of commands in history, rearrange segments of the current command, and delete segments of the current command. This way user glues commands from parts without using a mouse. Advanced history search (multi-word, without duplicate lines) allows to quickly find the parts.
Command architect keybindings
Key(s) | Description |
---|---|
Ctrl-T | Start Zsh Command Architect (Z shell binding) |
Enter | Delete selected segment (when in the command window) or add selected segment (when in the history window) |
[ or ] | Move active segment (when in the command window) |
Shift-left or Shift-right | Move active segment (when in command window) |
Tab | Switch between the two available windows |
g, G | Beginning and end of the list |
/ | Start incremental search |
Esc | Exit incremental search, clearing filter |
<,>, {,} | Horizontal scroll |
Ctrl-L | Redraw the whole display |
Ctrl-O, o | Enter unique mode (no duplicate lines) |
Ctrl-W (in incremental search) | Delete whole word |
Ctrl-K (in incremental search) | Delete whole line |
Ctrl-D, Ctrl-U | Half page up or down |
Ctrl-P, Ctrl-N | Previous and next (also done with vim's j,k) |
Install Zsh Command Architect
- Zi
- Zgen
- Manual
- Single File
- Standalone
Add the following to .zshrc
. The config files will be available in ~/.config/zca
.
zi load z-shell/zsh-cmd-architect
Add the following to .zshrc
and issue a zgen reset
(this assumes that there is a proper zgen save
construct in .zshrc
). The config files will be available in ~/.config/zca
.
zgen load z-shell/zsh-cmd-architect
After extracting ZCA
to {some-directory}
add the following two lines to ~/.zshrc
:
fpath+=( {some-directory} )source "{some-directory}/zsh-cmd-architect.plugin.zsh"
As you can see, no plugin manager is needed to use the *.plugin.zsh
file. The above two lines of code are all that almost all plugin managers do:
source "{some-directory}/zsh-cmd-architect.plugin.zsh"
because ZCA
detects if it is used by any plugin manager and can handle the $fpath
update by itself.
Running script doc/generate_single_file
will create a single-file version of ZCA
. It can be sourced from .zshrc
. Don't forget about configuration files (copy them to ~/.config/zca
).
sh -c "$(curl -fsSL https://raw.githubusercontent.com/z-shell/zsh-cmd-architect/main/doc/install.sh)"
To update run the command again.
ZCA
will be installed at ~/.config/zca/zsh-cmd-architect
, config files will be copied to ~/.config/zca
. .zshrc
will be updated with only 4
lines of code that will be added to the bottom.
After installing and reloading the shell give ZCA
a quick try with Ctrl-T.
Performance
ZCA
is fastest with Zsh
before 5.0.6
and starting from 5.2
Fixing tmux, screen, and Linux vt
If TERM=screen-256color
(often a case for tmux
and screen
sessions) then ncv
terminfo capability will have 2
nd bit set.
This in general means that underlining won't work. To fix this by creating your own ncv=0
-equipped terminfo file, run:
{ infocmp -x screen-256color; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t
A file will be created in the directory ~/.terminfo
and will be automatically used, tmux
and screen
will work.
Similar is for Linux virtual terminal:
{ infocmp -x linux; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t
It will not display underline properly, but will instead highlight by a color, which is quite nice. The same will not work for FreeBSD's vt, ZCA
will detect if that vt
is used and will revert to highlighting elements via reverse
mode.