centos7 - vim special mark behavior? -
i started looked @ vim plugin , trying write 1 myself. want use marking features of vim. found following snipped in book as:
nnoremap <leader>g :set operatorfunc=grepoperator<cr>g@ vnoremap <leader>g :<c-u>call grepoperator(visualmode())<cr> function! grepoperator(type) if a:type ==# 'char' normal! `[v`]y else return endif echom shellescape(@@) endfunction
the behavior of `[ , `] mentioned in vim , here in function not same. vim says as:
`[ first character of changed or yanked text. `] last character of changed or yanked text.
when type following command in normal mode in vim:
normal! `[v`]y
with file yanked lines based on have done previously(how many lines above or below have changed text or yanked).
but if call same command above function bonded motion-operator behavior not same echos character under current cursor.
the motion used is:
vi(<leader>g
why both behavior not per vim documentations.
thanks.
you right, vim "overloads" '[
, ']
change marks represent moved-over text in operator function. avoided introducing special mark. general :help '[
not apply here.
strictly speaking, operator functions normal mode {opfunc}{motion}
, want them work in visual mode, ({visual}{opfunc}
). you've defined both :nmap
, :vmap
, too.
the type
function argument how operator function able differentiate between 2 modes. you've used vi(<leader>g
, visual mode variant (<leader>gi(
should work already). unfortunately, implementation misses code that; handles normal mode (and characterwise motions @ that) far. in visual mode, type
argument contains v
/ v
/ <c-v>
value; need handle that, too:
function! grepoperator(type) if a:type ==# 'char' normal! `[v`]y elseif a:type ==# 'v' normal! `<v`>y else return endif echom shellescape(@@) endfunction
as visual selection defined '<,'>
marks, need use those, not mentioned '[,']
.
:help :map-operator
has example (and uses different approach), , shows how handle different values of 'selection'
correctly.
Comments
Post a Comment