Можем ли мы создать новую ожидающую команду в Vim? - PullRequest
3 голосов
/ 08 сентября 2011

Кто-нибудь знает, возможно ли создать новую команду, ожидающую операции?

Например, я хотел бы заменить последовательность, такую ​​как vf(r<space>w, на ,cf(.В частности, здесь идея состоит в том, чтобы «очистить» текст от позиции курсора до следующей включающей фигурной скобки и затем поместить курсор в начало следующего слова.

Возможно, я просто что-то упустил вфайлы справки (или мой Google-фу выключен сегодня), так что указатель на нужное место будет очень полезен.

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Вы хотите использовать :set opfunc и g@.Документация довольно хорошая, :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
3 голосов
/ 08 сентября 2011

Я думаю : h map-operator - это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...