3 votes

Peut-on créer une nouvelle commande en attente dans Vim ?

Quelqu'un sait-il s'il est possible de créer une nouvelle commande en attente d'opération ?

Par exemple, je voudrais remplacer une séquence telle que vf(r<space>w con ,cf( . Concrètement, il s'agit ici de "vider" le texte depuis la position du curseur jusqu'à l'accolade suivante incluse, puis de placer le curseur au début du mot suivant.

Il se peut que j'aie oublié quelque chose dans les fichiers d'aide (ou que je ne sois pas très doué avec Google aujourd'hui), alors un pointeur vers le bon endroit serait très apprécié.

4voto

Peter Rincker Points 14594

Vous voulez utiliser :set opfunc y g@ . La documentation est assez bonne, :h g@ .

nnoremap <silent> ,c :set opfunc=Clearing<cr>g@
vnoremap <silent> ,c :<c-u>set opfunc=Clearing<cr>g@

function! Clearing(type, ...)
  let sel_save = &selection
  let &selection = "inclusive"
  let reg_save = @@

  if a:0  " Invoked from Visual mode, use '< and '> marks.
    silent exe "normal! `<" . a:type . "`>r "
  elseif a:type == 'line'
    silent exe "normal! '[V']r "
  elseif a:type == 'block'
    silent exe "normal! `[\<C-V>`]r "
  else
    silent exe "normal! `[v`]r "
  endif
  norm! `]w

  let &selection = sel_save
  let @@ = reg_save
endfunction

3voto

sidyll Points 20176

Je pense :h map-opérateur est ce que vous recherchez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X