2010-06-16 25 views

Respuesta

6

Habría que sea para uso searchpair(), o para jugar con% (siempre y cuando se instala MatchIt, y como usted está en comenzar/final), a continuación, marque las dos posiciones, pruebe si se trata de texto o corchetes, y finalmente actualice las dos líneas.

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 

Dónde lh#position#char_at_mark() se define here.

PD: esta es definitivamente una ASUNTA cuestión, ya que combina el contexto de rubí, y el scripting vim avanzado.

+0

Sí, no hay ninguna razón para la solución complicada. Solo usa matchit.vim. :) – graywh

+0

Matchit no resuelve la solicitud de OP. (E incluso sin vim involucrado, todavía se refiere a la puesta a punto de una herramienta de desarrollo, para fines de desarrollo) –

0

Hay un plugin splitjoin.vim que hace esto agradable (GJ/GS asignaciones para la división/unión).

Cuestiones relacionadas