For languages with {}
to denote blocks, vim has the almighty %
key. What is the equivalent movement thing for python code? Or at least to move to
The vim wiki suggest bindings such as:
nnoremap k:call search('^'. matchstr(getline(line('.')+1), '\(\s*\)') .'\S', 'b')^
nnoremap :call search('^'. matchstr(getline(line('.')), '\(\s*\)') .'\S')^
As well as offering a more comprehensive solution:
" Jump to the next or previous line that has the same level or a lower
" level of indentation than the current line.
"
" exclusive (bool): true: Motion is exclusive
" false: Motion is inclusive
" fwd (bool): true: Go to next line
" false: Go to previous line
" lowerlevel (bool): true: Go to line with lower indentation level
" false: Go to line with the same indentation level
" skipblanks (bool): true: Skip blank lines
" false: Don't skip blank lines
function! NextIndent(exclusive, fwd, lowerlevel, skipblanks)
let line = line('.')
let column = col('.')
let lastline = line('$')
let indent = indent(line)
let stepvalue = a:fwd ? 1 : -1
while (line > 0 && line <= lastline)
let line = line + stepvalue
if ( ! a:lowerlevel && indent(line) == indent ||
\ a:lowerlevel && indent(line) < indent)
if (! a:skipblanks || strlen(getline(line)) > 0)
if (a:exclusive)
let line = line - stepvalue
endif
exe line
exe "normal " column . "|"
return
endif
endif
endwhile
endfunction
" Moving back and forth between lines of same or lower indentation.
nnoremap [l :call NextIndent(0, 0, 0, 1)
nnoremap ]l :call NextIndent(0, 1, 0, 1)
nnoremap [L :call NextIndent(0, 0, 1, 1)
nnoremap ]L :call NextIndent(0, 1, 1, 1)
vnoremap [l :call NextIndent(0, 0, 0, 1)m'gv''
vnoremap ]l :call NextIndent(0, 1, 0, 1)m'gv''
vnoremap [L :call NextIndent(0, 0, 1, 1)m'gv''
vnoremap ]L :call NextIndent(0, 1, 1, 1)m'gv''
onoremap [l :call NextIndent(0, 0, 0, 1)
onoremap ]l :call NextIndent(0, 1, 0, 1)
onoremap [L :call NextIndent(1, 0, 1, 1)
onoremap ]L :call NextIndent(1, 1, 1, 1)
Which uses:
[l
and ]l
jump to the previous or the next line with the same indentation level as the current line.[L
and ]L
jump to the previous or the next line with an indentation level lower than the current line.