Gibt es eine einfache Möglichkeit, "do/end" und "{}" in Ruby in Vim umzuschalten?Gibt es eine einfache Möglichkeit, "do/end" und "{}" in Ruby in Vim umzuschalten?
(Textmate tut dies mit ^{
.)
Gibt es eine einfache Möglichkeit, "do/end" und "{}" in Ruby in Vim umzuschalten?Gibt es eine einfache Möglichkeit, "do/end" und "{}" in Ruby in Vim umzuschalten?
(Textmate tut dies mit ^{
.)
Sie entweder verwenden searchpair() haben würde, oder mit% zu spielen (solange matchit installiert ist, und wie Sie beginnen, werden/Ende), Markieren Sie dann die zwei Positionen, testen Sie, ob es sich um Text oder Klammern handelt, und aktualisieren Sie schließlich die beiden Zeilen.
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
Wo lh#position#char_at_mark()
here definiert ist.
PS: Dies ist definitiv eine SO Frage, da es Ruby Kontext und erweiterte Vim Scripting kombiniert.
Überprüfen Sie dieses neue Plugin: https://github.com/jgdavey/vim-blockle.
30 Zeichen Pad
Es ist ein splitjoin.vim Plugin, das diese gut tut (GJ/GS-Mappings für das Aufspalten/Verbinden).
Ja, es gibt keinen Grund für die komplizierte Lösung. Verwenden Sie einfach matchit.vim. :) – graywh
Matchit löst nicht die Anfrage von OP. (Und auch ohne vim involviert, handelt es sich immer noch um das Tuning eines Entwicklungswerkzeugs, für Entwicklungszwecke) –