aboutsummaryrefslogtreecommitdiff
path: root/plugin/substitute.vim
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/substitute.vim')
-rw-r--r--plugin/substitute.vim59
1 files changed, 17 insertions, 42 deletions
diff --git a/plugin/substitute.vim b/plugin/substitute.vim
index f06afb9..82afab9 100644
--- a/plugin/substitute.vim
+++ b/plugin/substitute.vim
@@ -1,14 +1,10 @@
-
-" gs will create a substitution command to replace the last yanked string with
-" the last inserted string over a motion.
-"
-" This is useful when renaming a variable for example, one can place the cursor
-" over the varibale to rename and type:
+" gs will propegate a change made to a <cword> over a text object. This is done
+" by the plugin taking note of the word under the cursor before a text change is
+" made and what the word was changed to after the text was changed, and gs will
+" create a substitute command based on that and apply it to a text object.
"
-" ciwnew_variable_name<esc>gsiB
-"
-" and this will replace that variable name with 'new_variable_name' inside the
-" Body.
+" This is extremely useful and ergonomic for renaming variables, types or
+" otherwise in a text body.
noremap <silent> gs :set operatorfunc=<SID>do_subst_enter<cr>g@
vnoremap <silent> gs :call <SID>v_do_subst_enter()<cr>
@@ -23,49 +19,28 @@ vnoremap <silent> gS :call <SID>v_do_subst_no_enter()<cr>
" Hotkey for replacing the most recently searched matches.
noremap <C-s> <esc>:<C-u>%s//
-let s:entered_with_change = v:false
-let s:entered_with_append = v:false
-
-let s:old_word=''
-let s:new_word=''
+let s:current_word_1 = ''
+let s:current_word = ''
-let s:override_word = ''
-function! OverrideChange()
- let s:entered_with_change = v:true
- let s:override_word = expand('<cword>')
- return ''
-endfunction
-
-function! s:save_register_on_change()
-endfunction
+let s:old_word = ''
+let s:new_word = ''
-function! s:save_old_word() abort
- if s:entered_with_change
- let s:old_word = s:override_word
- else
- let s:old_word = expand("<cword>")
- endif
+function! s:save_cur_word() abort
+ let s:current_word_1 = s:current_word
+ let s:current_word = expand("<cword>")
endfunction
function! s:save_new_word() abort
- if s:entered_with_change
- let s:entered_with_change = v:false
- let s:new_word = expand("<cword>")
- else
- let s:new_word = expand("<cword>")
- endif
+ let s:old_word = s:current_word_1
+ let s:new_word = expand("<cword>")
endfunction
augroup FieldMarshalSubstitute
au!
- autocmd InsertEnter * call s:save_old_word()
- autocmd InsertLeave * call s:save_new_word()
+ autocmd CursorMoved * call s:save_cur_word()
+ autocmd TextChanged * call s:save_new_word()
augroup END
-noremap <expr> c OverrideChange() . 'c'
-noremap <expr> s OverrideChange() . 's'
-noremap <expr> a OverrideChange() . 'a'
-
function! s:do_subst_enter(...) abort
call s:do_subst_priv("'[", "']", v:true)
endfunction