Equivalente de% de movimiento para archivos Python

Para los idiomas con {} para denotar bloques, vim tiene la tecla % todopoderoso. ¿Cuál es el movimiento equivalente para el código de Python? O al menos pasar a la línea siguiente / anterior con la misma sangría.

La wiki de vim sugiere enlaces tales como:

 nnoremap  k:call search('^'. matchstr(getline(line('.')+1), '\(\s*\)') .'\S', 'b')^ nnoremap  :call search('^'. matchstr(getline(line('.')), '\(\s*\)') .'\S')^ 

Además de ofrecer una solución más completa:

 " 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) 

Que utiliza:

  • [l ]l saltan a la línea anterior o siguiente con el mismo nivel de sangría que la línea actual.
  • [L y ]L saltan a la línea anterior o siguiente con un nivel de sangría más bajo que la línea actual.

Vim tiene los movimientos { y } para moverse entre “párrafos” y el objeto de texto p correspondiente ( vip , dap ).

El ftplugin predeterminado de Python también (re) define [[ y ]] para pasar a la clase siguiente y anterior y ]m y [m para pasar al método siguiente y anterior.

El objeto de sangría es muy útil también para Python.

Siempre puedes usar comentarios para insertar {} (no haría esto si otros lo compartieran):

 class Game(object): # { def __init__(self, num, end): # { pass # } # }