feat(npm): toggle `npm install` / `npm uninstall` by pressing F2 twice (#9717)

Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
Alex Matheson 2021-12-29 07:12:52 -06:00 committed by GitHub
parent 2acb3071ca
commit ce9104c4f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 0 deletions

View File

@ -29,3 +29,20 @@ plugins=(... npm)
| `npmI` | `npm init` | Run npm init | | `npmI` | `npm init` | Run npm init |
| `npmi` | `npm info` | Run npm info | | `npmi` | `npm info` | Run npm info |
| `npmSe` | `npm search` | Run npm search | | `npmSe` | `npm search` | Run npm search |
## `npm install` / `npm uninstall` toggle
The plugin adds a function that toggles between `npm install` and `npm uninstall` in
the current command or the last command, for up to 2 previous commands. **The default
key binding is pressing <kbd>F2</kbd> twice**.
You can change this key binding by adding the following line to your zshrc file:
```zsh
bindkey -M emacs '<seq>' npm_toggle_install_uninstall
bindkey -M vicmd '<seq>' npm_toggle_install_uninstall
bindkey -M viins '<seq>' npm_toggle_install_uninstall
```
where `<seq>` is a key sequence obtained by running `cat` and pressing the keyboard
sequence you want.

View File

@ -69,3 +69,43 @@ alias npmi="npm info"
# Run npm search # Run npm search
alias npmSe="npm search" alias npmSe="npm search"
npm_toggle_install_uninstall() {
# Look up to the previous 2 history commands
local line
for line in "$BUFFER" \
"${history[$((HISTCMD-1))]}" \
"${history[$((HISTCMD-2))]}"
do
case "$line" in
"npm uninstall"*)
BUFFER="${line/npm uninstall/npm install}"
(( CURSOR = CURSOR + 2 )) # uninstall -> install: 2 chars removed
;;
"npm install"*)
BUFFER="${line/npm install/npm uninstall}"
(( CURSOR = CURSOR + 2 )) # install -> uninstall: 2 chars added
;;
"npm un "*)
BUFFER="${line/npm un/npm install}"
(( CURSOR = CURSOR + 5 )) # un -> install: 5 chars added
;;
"npm i "*)
BUFFER="${line/npm i/npm uninstall}"
(( CURSOR = CURSOR + 8 )) # i -> uninstall: 8 chars added
;;
*) continue ;;
esac
return 0
done
BUFFER="npm install"
CURSOR=${#BUFFER}
}
zle -N npm_toggle_install_uninstall
# Defined shortcut keys: [F2] [F2]
bindkey -M emacs '^[OQ^[OQ' npm_toggle_install_uninstall
bindkey -M vicmd '^[OQ^[OQ' npm_toggle_install_uninstall
bindkey -M viins '^[OQ^[OQ' npm_toggle_install_uninstall