Skip to content

Commit 5b74d40

Browse files
committed
Fix [m and [M family of maps
This is me blindly applying to vim-ruby the lessons of <tpope/vim-endwise#93>.
1 parent 96510b0 commit 5b74d40

1 file changed

Lines changed: 22 additions & 21 deletions

File tree

ftplugin/ruby.vim

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -162,23 +162,23 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
162162
nmap <buffer><script> <SID>: :<C-U>
163163
nmap <buffer><script> <SID>c: :<C-U><C-R>=v:count ? v:count : ''<CR>
164164
165-
nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
166-
nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
167-
nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
168-
nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','n')<CR>
169-
xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','v')<CR>
170-
xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','v')<CR>
171-
xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','v')<CR>
172-
xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','v')<CR>
173-
174-
nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','n')<CR>
175-
nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','n')<CR>
176-
nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','n')<CR>
177-
nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','n')<CR>
178-
xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','v')<CR>
179-
xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','v')<CR>
180-
xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','v')<CR>
181-
xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','v')<CR>
165+
nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','n')<CR>
166+
nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','n')<CR>
167+
nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','n')<CR>
168+
nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','n')<CR>
169+
xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'b','v')<CR>
170+
xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>',['rubyDefine'],'','v')<CR>
171+
xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'b','v')<CR>
172+
xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>',['rubyDefine'],'','v')<CR>
173+
174+
nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','n')<CR>
175+
nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','n')<CR>
176+
nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','n')<CR>
177+
nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','n')<CR>
178+
xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'b','v')<CR>
179+
xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>',['rubyModule','rubyClass'],'','v')<CR>
180+
xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'b','v')<CR>
181+
xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>',['rubyModule','rubyClass'],'','v')<CR>
182182
183183
let b:undo_ftplugin = b:undo_ftplugin
184184
\."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
@@ -288,12 +288,13 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
288288
norm! gv
289289
endif
290290
let i = 0
291+
call map(a:syn, 'hlID(v:val)')
291292
while i < cnt
292293
let i = i + 1
293294
let line = line('.')
294295
let col = col('.')
295296
let pos = search(a:pattern,'W'.a:flags)
296-
while pos != 0 && s:synname() !~# a:syn
297+
while pos != 0 && index(a:syn, s:synid()) < 0
297298
let pos = search(a:pattern,'W'.a:flags)
298299
endwhile
299300
if pos == 0
@@ -303,8 +304,8 @@ function! s:searchsyn(pattern, syn, flags, mode) abort
303304
endwhile
304305
endfunction
305306

306-
function! s:synname() abort
307-
return synIDattr(synID(line('.'),col('.'),0),'name')
307+
function! s:synid() abort
308+
return synID(line('.'),col('.'),0)
308309
endfunction
309310

310311
function! s:wrap_i(back,forward) abort
@@ -360,7 +361,7 @@ function! RubyCursorFile() abort
360361
let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!')
361362
let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*')
362363
let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : ''
363-
if s:synname() ==# 'rubyConstant'
364+
if s:synid() ==# hlID('rubyConstant')
364365
let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','')
365366
let cfile = substitute(cfile,'::','/','g')
366367
let cfile = substitute(cfile,'\(\u\+\)\(\u\l\)','\1_\2', 'g')

0 commit comments

Comments
 (0)