Как настроить matchit.vim для использования <tab>вместо%? - PullRequest
2 голосов
/ 08 февраля 2012

Я большой поклонник плагина matchit.vim , но я предпочитаю переходить между соответствующими разделителями с помощью клавиши <tab>.Однако, кажется, что matchit жестко запрограммирован для активации при нажатии клавиши%.

Моей первой мыслью было бы, что я просто добавлю эту строку в мой .vimrc и поменяю '%' на '<tab> ', таким образом связывая вызов Match_wrapper с клавишей табуляции:

nnoremap <silent> %  :<C-U>call <SID>Match_wrapper('',1,'n') <CR>

Однако, похоже, это не работает;Я предполагаю, что это как-то связано с <SID> (который, насколько я понимаю, является идентификатором, уникальным для скрипта?) Или с тем, что Match_wrapper является локальным для скрипта.(Я довольно новичок в Vimscript)

До сих пор мне удавалось добиться путем сопоставления <tab> с % с помощью 'nmap', но это довольно хрупкий взлом.

В любом случае, любая помощь будет принята с благодарностью!:)

Ответы [ 3 ]

6 голосов
/ 08 февраля 2012

Хорошо, если вы знаете, что % будет всегда переназначаться, тогда использование

map <Tab> %

безопасно (отсутствие n впереди является преднамеренным: %определяется во всех режимах, охватываемых :map).Но то, что вы всегда можете сделать, это заменить <SID> на <SNR>{N}_, где {N} - это номер сценария matchit в выходных данных :scriptnames.В более новом vim вы также можете использовать maparg('%', 'n', 0, 1), он выведет словарь, который среди других значений содержит lhs и sid.В этом случае код может выглядеть следующим образом:

for s:mode in ['n', 'v', 'o']
    let s:map=maparg('%', s:mode, 0, 1)
    execute s:mode.'noremap <Tab> '.substitute(s:map.lhs, '<SID>', '<SNR>'.s:map.sid.'_', 'g')
endfor

В этом случае

for s:mode in ['n', 'v', 'o']
    execute s:mode.'noremap <Tab> '.maparg('%', s:mode)
endfor

также допустимо, поскольку «старое» (без четвертого аргумента) поведение maparg заключается в расширении <SID>.

0 голосов
/ 04 марта 2017

Или, на всякий случай, вы также можете использовать эти сопоставления (протестировано с Vim 8.0):

nnoremap <silent> <Tab> :normal %<CR>
xnoremap <silent> <Tab> :normal %<CR>m`gv``
0 голосов
/ 17 января 2017

Вот что я сделал:

" <C-I> and <TAB> are the same thing.
" So, I changed <C-I> to <C-O><C-I> and <C-O> to <C-O><C-O> to match.
" I didn't want to lose the <C-I> jump functionality.
noremap <C-O><C-O> <C-O>
noremap <C-O><C-I> <C-I>

" This is what the plugin sets on %. I just set it on <TAB>
onoremap <TAB> :<C-U>call <SNR>41_Match_wrapper('',1,'o')<CR>
nnoremap <TAB> :<C-U>call <SNR>41_Match_wrapper('',1,'n')<CR>
vnoremap <TAB> :<C-U>call <SNR>41_Match_wrapper('',1,'v')<CR>m'gv``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...