A focused Vim-style editing layer for pi: fast motions, text objects, visual selections, and optional clipboard sync.
It brings the essential Vim editing loop into pi without the full Vim complexity.
Edit faster inside pi, with the Vim commands people actually reach for.
- Move with
h j k l,w b e,0 ^ $, andgg G - Change text with
dw,ciw,dd,yy,p,u, andr<char> - Select with
v/V, then yank, delete, or paste - Target regions with text objects like
iw,aw,ip, andap - Mirror yank/delete/change operations to the system clipboard when enabled
Install with pi:
pi install npm:vim-motions-piOr try it for the current run only:
pi -e npm:vim-motions-piRun the extension directly from this repo:
pi -e ./extensions/vim-motion.tsinsertnormalvisualvisual-line
- Character motions:
h j k l - Word motions:
w b e - Line motions:
0 ^ $ - Buffer motions:
gg G - Find motions:
f F t T - Repeat find:
;and,
- Operators:
d y c - Motion-based edits:
dw,yw,cw,d$,y^, etc. - Linewise forms:
dd,yy,cc,D,C,S - Direct helpers:
x,X,p,P,u,r<char>,o,O,J,i,I,a,A
venters visual modeVenters visual-line mode- Visual selections support
y,d, andp
iw,awiW,aWi",a"ip,ap- Works with operators, for example:
diw,yaw,ciW,ci",dap
- Prefix counts are supported for motions and many commands
- Examples:
3w,2dd,5x,4G
oswaps the visual selection ends.vexits visual mode.Vswitches to visual-line mode.p/Preplace the selection with the current register contents.
- Yanks, deletes, and changes go to a single unnamed register.
pandPpaste from that register.- Linewise operations keep line breaks when that makes sense.
Keep the unnamed register in sync with your system clipboard.
Set one parameter:
VIM_MOTION_PI_CLIPBOARD=off|all|yankoff: disable clipboard syncall: sync yank, delete, and change operationsyank: sync only yank operations
Change it inside pi with:
/vim-clipboard
pi shows a short notification when the mode changes.
When enabled, the extension uses the usual clipboard command on your OS (pbcopy, clip, wl-copy, xclip, or xsel) if available.
3w move forward 3 words
ciw change inner word
daw delete around word
yy yank current line
p paste yanked text
f, find the next comma
; repeat the last find
This is a Vim-like subset, not full Vim.
It only affects the text input/editor area inside pi, not the whole app.
In insert mode, most keys pass through to pi directly, except Esc, which returns to normal mode.
In normal / visual modes, some pi hotkeys may be intercepted by Vim-style key handling.
Not supported:
- search with
/or? - macros
- marks
- dot-repeat (
.) - multiple named registers
pi remove npm:vim-motions-pi- GitHub: https://github.com/kepatrick/vim-motions-pi
- Source lives in
extensions/vim-motion.ts
