Y at-il un moyen facile de basculer "do/end" et "{}" dans ruby dans Vim?Y at-il un moyen facile de basculer "do/end" et "{}" dans ruby dans Vim?
(TextMate fait avec ^{
.)
Y at-il un moyen facile de basculer "do/end" et "{}" dans ruby dans Vim?Y at-il un moyen facile de basculer "do/end" et "{}" dans ruby dans Vim?
(TextMate fait avec ^{
.)
Il faudrait soit utiliser searchpair(), ou jouer avec% (aussi longtemps que matchit est installé et que vous le début/fin), marquez ensuite les deux positions, testez s'il s'agit de texte ou de crochets, et enfin mettez à jour les deux lignes.
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
Où lh#position#char_at_mark()
est défini here. PS: c'est définitivement une question SO car elle combine le contexte ruby et le script vim avancé.
Découvrez ce nouveau plugin: https://github.com/jgdavey/vim-blockle.
30 caractères pad
Il y a un plugin splitjoin.vim qui fait cela joliment (Gj/gs correspondances pour le fractionnement/adhésion).
Oui, il n'y a aucune raison pour la solution compliquée. Utilisez simplement matchit.vim. :) – graywh
Matchit ne résout pas la demande de l'OP. (Et même sans vim involded, il s'agit toujours de l'optimisation d'un outil de développement, à des fins de développement) –