Там какой-либо простой способ состоит в том, чтобы переключиться, “/заканчивают” и “{}” в рубине в Vim?

7
задан TK. 16 June 2010 в 19:53
поделиться

1 ответ

Вам нужно будет либо использовать searchpair (), либо поиграть с% (пока matchit установлен и вы находитесь в начале / конце), затем отметьте две позиции, проверьте, текст это или скобки, и, наконец, обновите две строки.

nnoremap <buffer> <c-x>{ :call <sid>ToggleBeginOrBracket()<cr>

let s:k_be = [ 'begin', 'end' ]
function! s:ToggleBeginOrBracket()
  let c = lh#position#char_at_mark('.')
  if c =~ '[{}]'
    " don't use matchit for {,}
    exe 'normal! %s'.s:k_be[1-(c=='}')]."\<esc>``s".s:k_be[(c=='}')]."\<esc>"
  else
    let w = expand('<cword>')
    if w == 'begin'
      " use mathit
      normal %
      exe "normal! ciw}\<esc>``ciw{\<esc>"
    elseif w == 'end'
      " use mathit
      normal %
      exe "normal! ciw{\<esc>``ciw}\<esc>"
    else
      throw 'Cannot toggle block: cursor is not on {, }, begin, nor end'
    endif
  endif
endfunction

Где lh # позиция # char_at_mark () определяется здесь .

PS: это определенно вопрос SO, поскольку он сочетает в себе рубиновый контекст и расширенные сценарии vim.

6
ответ дан 7 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: