Разрешить настраиваемое движение на карте vim? - PullRequest
12 голосов
/ 18 марта 2011

У меня есть следующее отображение, которое позволяет вставить слово из буфера янки. (cpw = изменить слово вставки)

nmap <silent> cpw "_cw<C-R>"<Esc>

Я хотел бы разрешить такие команды, как следующие

cpiw (изменить пасту в слове -> как движение 'iw')

cpaw (изменить вставить слово -> как движение 'aw')

для любого движения {м.р.} ф {т}

Можно ли разрешить отображение, поэтому мне не нужно писать nmap для каждого движения, с которым я хочу работать?

Заранее спасибо.

РЕДАКТИРОВАТЬ: опечатки исправления. Мое решение ниже

После тщательного изучения оператора карты мне удалось создать функцию, которая выполнялась именно так, как я хотел. Для всех, кто заинтересован, это выглядит следующим образом:

"This allows for change paste motion cp{motion}
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
    silent exe "normal! `[v`]\"_c"
    silent exe "normal! p"
endfunction

EDIT - новая версия, которая может быть лучше.

"This allows for change paste motion cp{motion}
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
if a:0  " Invoked from Visual mode, use '< and '> marks.
    silent exe "normal! `<" . a:type . "`>\"_c" . @"
elseif a:type == 'line'
    silent exe "normal! '[V']\"_c" . @"
elseif a:type == 'block'
    silent exe "normal! `[\<C-V>`]\"_c" . @"
else
    silent exe "normal! `[v`]\"_c" . @"
endif
endfunction

1 Ответ

11 голосов
/ 19 марта 2011

Существует способ определения пользовательского оператора, подробности см. :help :map-operator.

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