https://github.com/z-shell/zsh-cmd-architect
⚙️ Zsh Command Architect
https://github.com/z-shell/zsh-cmd-architect
command-line-tool history-management zsh zsh-plugins
Last synced: 11 months ago
JSON representation
⚙️ Zsh Command Architect
- Host: GitHub
- URL: https://github.com/z-shell/zsh-cmd-architect
- Owner: z-shell
- License: other
- Created: 2021-11-08T13:05:38.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-03-23T13:17:02.000Z (11 months ago)
- Last Synced: 2025-03-23T14:24:29.311Z (11 months ago)
- Topics: command-line-tool, history-management, zsh, zsh-plugins
- Language: Shell
- Homepage: https://wiki.zshell.dev/ecosystem/plugins/zsh-cmd-architect
- Size: 79.1 KB
- Stars: 11
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: docs/README.md
- License: LICENSE
Awesome Lists containing this project
README
❮ Zsh Command Architect ❯
ZCA allows to copy segments of commands in history, rearrange segments of current command, delete segments of current command.
This way user glues command from parts without using a mouse.
Advanced history search (multi word, without duplicate lines) allows to quickly find the parts.
[](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/test-sh.yml) [](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/zsh-n.yml)
## 💡 Wiki: [ZCA](https://wiki.zshell.dev/ecosystem/plugins/zsh-cmd-architect) - [Plugins](https://wiki.zshell.dev/ecosystem/category/%EF%B8%8F-plugins)
| Keys | Description |
| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Ctrl+T | Start Zsh Command Architect (Zshell binding) |
| Enter | Delete selected segment (command window) or add selected segment (history window) |
| [ or ] | Move active segment (when in 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 of whole display |
| Ctrl+O, o | Enter uniq 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) |
## Installation
### [Zi](https://github.com/z-shell/zi)
Add `zi load z-shell/zsh-cmd-architect` to `.zshrc`.
### Zgen
Add `zgen load z-shell/zsh-cmd-architect` to `.zshrc` and issue a `zgen reset` (this assumes that there is a proper `zgen save` construct in `.zshrc`).
### Antigen
Add `antigen bundle z-shell/zsh-cmd-architect@main` to `.zshrc`. There also should be `antigen apply`.
### Standalone
```sh
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 code snippet at the bottom.
> After installing and reloading shell give `ZCA` a quick try with Ctrl+T.
#### Manual
After extracting `ZCA` to `{some-directory}` add following two lines to `~/.zshrc`:
```shell
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. In fact, what's actually needed is only:
```shell
source "{some-directory}/zsh-cmd-architect.plugin.zsh"
```
`ZCA` detects if it is used by **any** plugin manager and can
handle `$fpath` update by itself.
#### Single File
Running script `doc/generate_single_file` will create single-file version of `ZCA`.
It can be sourced from `.zshrc`.
> **Note:**
>
> - Don't forget about configuration files (copy them to `~/.config/zca`).
## 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
underline won't work. To fix this by creating your own `ncv=0`-equipped
terminfo file, run:
```shell
{ infocmp -x screen-256color; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t
```
A file will be created in directory `~/.terminfo` and will be automatically
used, `tmux` and `screen` will work. Similar is for Linux virtual terminal:
```shell
{ 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.
> Also check out [Zsh Navigation Tools](https://github.com/z-shell/zsh-navigation-tools) and [Zsh Editing Workbench](https://github.com/z-shell/zsh-editing-workbench)