My Neovim configuration
" Jump to ':' starting the current block.  Works ok with a numeric prefix
function! BlockBeg(mode)                " go begin/back/up/out
  let lNo = line('.')
  let ref = indent(lNo)
  while lNo > 0
    let lNo -= 1
    if indent(lNo) < ref
      if len(getline(lNo)) > 0
        execute lNo
        if getline(lNo) =~ "[:=]$"
          execute "normal! $"
        else
          execute "normal! $?[:=]\<CR>"
        endif
        return
      endif
    endif
  endwhile
endfunction

" Jump to last char in last non-comment line of next indented block.
function! BlockEnd(mode)
  let lNo = line('.')
  let eof = line('$')
  let ref = -1
  let last = lNo
  while lNo > 0 && lNo <= eof
    if getline(lNo) =~ "^[ \t]*$" || getline(lNo) =~ "^[ \t]*#"
      " echomsg "comment|blank line" lNo  "XXX test comments/blanks @BOF/EOF
      let lNo += 1
      continue
    endif
    if ref == -1
      let ref = indent(lNo)
      " echomsg "refDent" ref
    endif
    let last = lNo
    let lNo += 1
    if indent(lNo) <= ref       " outdent; Warp to last non-blank|cmt
      execute last
      execute "normal $"
      return
    endif
  endwhile
endfunction
nnoremap <silent> =b :call BlockBeg("n")<CR>
nnoremap <silent> =e :call BlockEnd("n")<CR>