File tree Expand file tree Collapse file tree
src/cli/cmd/tui/component/vim Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -65,7 +65,12 @@ export function createVimHandler(input: {
6565 }
6666
6767 function isPrintable ( event : VimEvent ) {
68- return ! ! event . name && event . name . length === 1
68+ return ! ! event . name && ( event . name . length === 1 || event . name === "space" )
69+ }
70+
71+ function value ( event : VimEvent ) {
72+ if ( event . name === "space" ) return " "
73+ return event . name ?? ""
6974 }
7075
7176 function isShifted ( event : VimEvent , key : string ) {
@@ -560,7 +565,7 @@ export function createVimHandler(input: {
560565 }
561566
562567 if ( isPrintable ( event ) && ! hasModifier ( event ) ) {
563- replaceUnderCursor ( input . textarea ( ) , event . name )
568+ replaceUnderCursor ( input . textarea ( ) , value ( event ) )
564569 input . state . setTyped ( true )
565570 event . preventDefault ( )
566571 return true
Original file line number Diff line number Diff line change @@ -721,6 +721,17 @@ describe("vim motion handler", () => {
721721 expect ( ctx . state . mode ( ) ) . toBe ( "replace" )
722722 } )
723723
724+ test ( "replace mode overwrites with space key" , ( ) => {
725+ const ctx = createHandler ( "abcd" , { mode : "replace" } )
726+ ctx . textarea . cursorOffset = 1
727+
728+ const key = createEvent ( "space" )
729+ expect ( ctx . handler . handleKey ( key . event ) ) . toBe ( true )
730+ expect ( key . prevented ( ) ) . toBe ( true )
731+ expect ( ctx . textarea . plainText ) . toBe ( "a cd" )
732+ expect ( ctx . textarea . cursorOffset ) . toBe ( 2 )
733+ } )
734+
724735 test ( "replace mode inserts at line end without removing newline" , ( ) => {
725736 const ctx = createHandler ( "ab\ncd" , { mode : "replace" } )
726737 ctx . textarea . cursorOffset = 2
You can’t perform that action at this time.
0 commit comments