@hnnazm/pi-vi
GNU Readline vi-mode prompt editor extension for Pi
Package details
Install @hnnazm/pi-vi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@hnnazm/pi-vi- Package
@hnnazm/pi-vi- Version
0.1.3- Published
- Sep 16, 2026
- Downloads
- 447/mo · 369/wk
- Author
- hnnazm
- License
- MIT
- Types
- extension
- Size
- 121.4 KB
- Dependencies
- 0 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Pi Vi
GNU Readline-style vi-mode prompt editing for Pi.
The extension preserves Pi's prompt editor, autocomplete, paste handling, and application actions while adding command, insert, and replace modes. It ships a Bash 5 / Readline 8 profile and resolves user bindings through Bash when $INPUTRC or ~/.inputrc exists.
Install
Install the published package:
pi install npm:@hnnazm/pi-vi
Or run/install from a checkout:
npm ci
npm run check
pi -e "$PWD/src/index.ts" # temporary smoke test
pi install "$PWD" # persistent local package
Rollback with the same source used to install:
pi remove npm:@hnnazm/pi-vi
# or: pi remove "$PWD"
You can also disable the package interactively with pi config.
The prompt border shows INSERT, COMMAND, or REPLACE. Press Escape to enter command mode.
Implemented command-mode editing
- Motions:
h,l,0,^,$,w,W,b,B,e,E,f,F,t,T,;,,,% - Modes:
i,I,a,A,R - Operators:
d,c,ywith character, word, search, delimiter, and line motions - Direct edits:
x,X,s,S,r,~,D,C,Y,p,P - State:
u,Ctrl-_,U,., marks viam,`, and' - History:
k,j,-,+,Ctrl-P,Ctrl-N,/,?,n,N - External editing:
vdelegates to Pi'sapp.editor.externalaction and therefore honors Pi's$VISUAL/$EDITORbehavior
Numeric counts are accepted before motions and editing commands.
Inputrc
The extension checks $INPUTRC first, then ~/.inputrc. If present, Bash resolves includes, conditionals, variables, and macros and emits canonical keymaps. Paths are passed as process arguments rather than interpolated into shell source. If loading fails, the extension warns and falls back to the bundled profile.
Inputrc bind -x shell-command bindings are never executed by default.
Development
npm run format
npm run lint
npm run typecheck
npm run test:unit
npm run test:integration
npm run check
Capture the default profile for a Bash executable (profile directories use major versions only):
READLINE_BASH=/opt/homebrew/bin/bash READLINE_VERSION=8.3.3 npm run capture:profile
npm run compatibility:report
See COMPATIBILITY.md for implementation and profile details.