@@ -1703,6 +1703,25 @@ export type TextBufferAction =
17031703 | { type : 'vim_change_to_first_nonwhitespace' }
17041704 | { type : 'vim_delete_to_first_line' ; payload : { count : number } }
17051705 | { type : 'vim_delete_to_last_line' ; payload : { count : number } }
1706+ | { type : 'vim_delete_char_before' ; payload : { count : number } }
1707+ | { type : 'vim_toggle_case' ; payload : { count : number } }
1708+ | { type : 'vim_replace_char' ; payload : { char : string ; count : number } }
1709+ | {
1710+ type : 'vim_find_char_forward' ;
1711+ payload : { char : string ; count : number ; till : boolean } ;
1712+ }
1713+ | {
1714+ type : 'vim_find_char_backward' ;
1715+ payload : { char : string ; count : number ; till : boolean } ;
1716+ }
1717+ | {
1718+ type : 'vim_delete_to_char_forward' ;
1719+ payload : { char : string ; count : number ; till : boolean } ;
1720+ }
1721+ | {
1722+ type : 'vim_delete_to_char_backward' ;
1723+ payload : { char : string ; count : number ; till : boolean } ;
1724+ }
17061725 | {
17071726 type : 'toggle_paste_expansion' ;
17081727 payload : { id : string ; row : number ; col : number } ;
@@ -2484,6 +2503,13 @@ function textBufferReducerLogic(
24842503 case 'vim_change_to_first_nonwhitespace' :
24852504 case 'vim_delete_to_first_line' :
24862505 case 'vim_delete_to_last_line' :
2506+ case 'vim_delete_char_before' :
2507+ case 'vim_toggle_case' :
2508+ case 'vim_replace_char' :
2509+ case 'vim_find_char_forward' :
2510+ case 'vim_find_char_backward' :
2511+ case 'vim_delete_to_char_forward' :
2512+ case 'vim_delete_to_char_backward' :
24872513 return handleVimAction ( state , action as VimAction ) ;
24882514
24892515 case 'toggle_paste_expansion' : {
@@ -3043,6 +3069,58 @@ export function useTextBuffer({
30433069 dispatch ( { type : 'vim_delete_char' , payload : { count } } ) ;
30443070 } , [ ] ) ;
30453071
3072+ const vimDeleteCharBefore = useCallback ( ( count : number ) : void => {
3073+ dispatch ( { type : 'vim_delete_char_before' , payload : { count } } ) ;
3074+ } , [ ] ) ;
3075+
3076+ const vimToggleCase = useCallback ( ( count : number ) : void => {
3077+ dispatch ( { type : 'vim_toggle_case' , payload : { count } } ) ;
3078+ } , [ ] ) ;
3079+
3080+ const vimReplaceChar = useCallback ( ( char : string , count : number ) : void => {
3081+ dispatch ( { type : 'vim_replace_char' , payload : { char, count } } ) ;
3082+ } , [ ] ) ;
3083+
3084+ const vimFindCharForward = useCallback (
3085+ ( char : string , count : number , till : boolean ) : void => {
3086+ dispatch ( {
3087+ type : 'vim_find_char_forward' ,
3088+ payload : { char, count, till } ,
3089+ } ) ;
3090+ } ,
3091+ [ ] ,
3092+ ) ;
3093+
3094+ const vimFindCharBackward = useCallback (
3095+ ( char : string , count : number , till : boolean ) : void => {
3096+ dispatch ( {
3097+ type : 'vim_find_char_backward' ,
3098+ payload : { char, count, till } ,
3099+ } ) ;
3100+ } ,
3101+ [ ] ,
3102+ ) ;
3103+
3104+ const vimDeleteToCharForward = useCallback (
3105+ ( char : string , count : number , till : boolean ) : void => {
3106+ dispatch ( {
3107+ type : 'vim_delete_to_char_forward' ,
3108+ payload : { char, count, till } ,
3109+ } ) ;
3110+ } ,
3111+ [ ] ,
3112+ ) ;
3113+
3114+ const vimDeleteToCharBackward = useCallback (
3115+ ( char : string , count : number , till : boolean ) : void => {
3116+ dispatch ( {
3117+ type : 'vim_delete_to_char_backward' ,
3118+ payload : { char, count, till } ,
3119+ } ) ;
3120+ } ,
3121+ [ ] ,
3122+ ) ;
3123+
30463124 const vimInsertAtCursor = useCallback ( ( ) : void => {
30473125 dispatch ( { type : 'vim_insert_at_cursor' } ) ;
30483126 } , [ ] ) ;
@@ -3542,6 +3620,13 @@ export function useTextBuffer({
35423620 vimMoveBigWordBackward,
35433621 vimMoveBigWordEnd,
35443622 vimDeleteChar,
3623+ vimDeleteCharBefore,
3624+ vimToggleCase,
3625+ vimReplaceChar,
3626+ vimFindCharForward,
3627+ vimFindCharBackward,
3628+ vimDeleteToCharForward,
3629+ vimDeleteToCharBackward,
35453630 vimInsertAtCursor,
35463631 vimAppendAtCursor,
35473632 vimOpenLineBelow,
@@ -3630,6 +3715,13 @@ export function useTextBuffer({
36303715 vimMoveBigWordBackward ,
36313716 vimMoveBigWordEnd ,
36323717 vimDeleteChar ,
3718+ vimDeleteCharBefore ,
3719+ vimToggleCase ,
3720+ vimReplaceChar ,
3721+ vimFindCharForward ,
3722+ vimFindCharBackward ,
3723+ vimDeleteToCharForward ,
3724+ vimDeleteToCharBackward ,
36333725 vimInsertAtCursor ,
36343726 vimAppendAtCursor ,
36353727 vimOpenLineBelow ,
@@ -3937,6 +4029,20 @@ export interface TextBuffer {
39374029 * Delete N characters at cursor (vim 'x' command)
39384030 */
39394031 vimDeleteChar : ( count : number ) => void ;
4032+ /** Delete N characters before cursor (vim 'X') */
4033+ vimDeleteCharBefore : ( count : number ) => void ;
4034+ /** Toggle case of N characters at cursor (vim '~') */
4035+ vimToggleCase : ( count : number ) => void ;
4036+ /** Replace N characters at cursor with char, stay in NORMAL mode (vim 'r') */
4037+ vimReplaceChar : ( char : string , count : number ) => void ;
4038+ /** Move to Nth occurrence of char forward on line; till=true stops before it (vim 'f'/'t') */
4039+ vimFindCharForward : ( char : string , count : number , till : boolean ) => void ;
4040+ /** Move to Nth occurrence of char backward on line; till=true stops after it (vim 'F'/'T') */
4041+ vimFindCharBackward : ( char : string , count : number , till : boolean ) => void ;
4042+ /** Delete from cursor to Nth occurrence of char forward; till=true excludes the char (vim 'df'/'dt') */
4043+ vimDeleteToCharForward : ( char : string , count : number , till : boolean ) => void ;
4044+ /** Delete from Nth occurrence of char backward to cursor; till=true excludes the char (vim 'dF'/'dT') */
4045+ vimDeleteToCharBackward : ( char : string , count : number , till : boolean ) => void ;
39404046 /**
39414047 * Enter insert mode at cursor (vim 'i' command)
39424048 */
0 commit comments