I do not ]m
eşleme ailesinin özelleştirilebileceğini düşünün. Bu gibi durumlarda, alışılmış uygulama, özel mantıkla geçersiz kılmaktır. Ben açıkladığınız şeyi yapmalısınız bazı vimscript ile geldi. Temel olarak, kaşlı ayraçlarla atlar ve ne yapacağına karar vermek için ilgili çizgiye bakar. Bu durumda, sadece "sınıf" ve "ad alanı" bildirimlerini yok sayar.
nnoremap <buffer> ]m :<c-u>call <SID>JumpMethod('{', 'W', 'n')<cr>
nnoremap <buffer> [m :<c-u>call <SID>JumpMethod('{', 'Wb', 'n')<cr>
nnoremap <buffer> ]M :<c-u>call <SID>JumpMethod('}', 'W', 'n')<cr>
nnoremap <buffer> [M :<c-u>call <SID>JumpMethod('}', 'Wb', 'n')<cr>
xnoremap <buffer> ]m :<c-u>call <SID>JumpMethod('{', 'W', 'v')<cr>
xnoremap <buffer> [m :<c-u>call <SID>JumpMethod('{', 'Wb', 'v')<cr>
xnoremap <buffer> ]M :<c-u>call <SID>JumpMethod('}', 'W', 'v')<cr>
xnoremap <buffer> [M :<c-u>call <SID>JumpMethod('}', 'Wb', 'v')<cr>
onoremap <buffer> ]m :<c-u>call <SID>JumpMethod('{', 'W', 'o')<cr>
onoremap <buffer> [m :<c-u>call <SID>JumpMethod('{', 'Wb', 'o')<cr>
onoremap <buffer> ]M :<c-u>call <SID>JumpMethod('}', 'W', 'o')<cr>
onoremap <buffer> [M :<c-u>call <SID>JumpMethod('}', 'Wb', 'o')<cr>
function! s:JumpMethod(char, flags, mode)
let original_cursor = getpos('.')
if a:mode == 'v'
normal! gv
elseif a:mode == 'o'
normal! v
endif
while search(a:char, a:flags) > 0
if a:char == '}'
" jump to the opening one to analyze the definition
normal! %
endif
let current_line = line('.')
if getline(current_line) =~ '^\s*{'
" it's alone on the line, check the above one
let method_line = current_line - 1
else
let method_line = current_line
endif
let method_line_body = getline(method_line)
if method_line_body =~ '\k\+\s*(.*)' && method_line_body !~ '\<\(for\|foreach\|if\|while\|switch\|using\|catch\|get\|set\)\>'
" it's probably a function call
if a:char == '}'
" we need to go back to the closing bracket
normal! %
endif
echo
return
else
if a:char == '}'
" we still need to go back to the closing bracket
normal! %
endif
endif
endwhile
" if we're here, the search has failed, restore cursor position
echo
call setpos('.', original_cursor)
endfunction
Ayı bunun her durumda düzgün çalışmayabilir bu yüzden gerçekten, C# çok bilmiyorum, ama bana kırmak örnekler vermek eğer, bir şey anlamaya mümkün olabilir aklında.
siz "cs.vim" olarak, bir yere senin vimfiles dizinde "ftplugin" altına koymak gerekir, bunu deneyin. Eğer "cs" ile başlayan ve ".vim" ile biten başka bir dosya adı zaten var, eğer zaten bir "cs.vim" dosyasına sahipseniz.
içinde (bu soruya başka bir cevap alınmıştır) bu eşleştirmeleri kullanıyorum. Belki de bu komutu kullanabilecek ve beklendiği gibi çalışacak bir Visual Studio eklentisi vardır. Hangi IDE kullanıyorsunuz? Yoksa sadece Vim'i komut satırından mı kullanıyorsunuz? –
@Gweebz - Ben kodunu düzenlemek için GVIM kullanıyorum, bu yüzden daha çok bir Vim eklentisi :) – mMontu