2010-06-16 13 views

उत्तर

6

आप) उपयोग 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#position#char_at_mark()here परिभाषित किया गया है।

पीएस: यह निश्चित रूप से एक SO सवाल है क्योंकि यह रूबी संदर्भ, और उन्नत विम स्क्रिप्टिंग को जोड़ता है।

+0

हाँ, जटिल समाधान के लिए कोई कारण नहीं है। बस matchit.vim का उपयोग करें। :) – graywh

+0

मैचिट ओपी के अनुरोध को हल नहीं करता है। (और यहां तक ​​कि विम के बिना भी, यह अभी भी विकास उद्देश्यों के लिए विकास उपकरण की ट्यूनिंग से संबंधित है) –

0

है कि (/ बंटवारे के लिए जी जे/जी एस मैपिंग में शामिल होने) इस अच्छी तरह से करता है एक splitjoin.vim प्लगइन है।

संबंधित मुद्दे

 संबंधित मुद्दे