هل هناك أي طريقة سهلة للتبديل "do/end" و "{}" في روبي في VIM؟

StackOverflow https://stackoverflow.com/questions/3090701

  •  29-09-2019
  •  | 
  •  

سؤال

هل هناك أي طريقة سهلة للتبديل "do/end" و "{}" في روبي في VIM؟

(Textmate يفعل هذا مع ^{.)

هل كانت مفيدة؟

المحلول

يجب عليك إما استخدام 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() ويعرف هنا.

ملاحظة: هذا هو السؤال بشكل نهائي لأنه يجمع بين سياق الياقوت والبرمجة النصية المتقدمة.

نصائح أخرى

تحقق من هذا البرنامج المساعد الجديد: https://github.com/jgdavey/vim blockle.

30 شارز وسادة

هناك Splitjoin.vim البرنامج المساعد الذي يقوم بذلك بشكل جيد (تعيينات GJ/GS لتقسيم/الانضمام).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top