该VIM维基建议绑定,例如:
nnoremap <M-,> k:call search('^'. matchstr(getline(line('.')+1), '(s*)') .'S', 'b')<CR>^nnoremap <M-.> :call search('^'. matchstr(getline(line('.')), '(s*)') .'S')<CR>^以及提供更全面的解决方案:
" 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 linesfunction! 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 endwhileendfunction" Moving back and forth between lines of same or lower indentation.nnoremap <silent> [l :call NextIndent(0, 0, 0, 1)<CR>nnoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>nnoremap <silent> [L :call NextIndent(0, 0, 1, 1)<CR>nnoremap <silent> ]L :call NextIndent(0, 1, 1, 1)<CR>vnoremap <silent> [l <Esc>:call NextIndent(0, 0, 0, 1)<CR>m'gv''vnoremap <silent> ]l <Esc>:call NextIndent(0, 1, 0, 1)<CR>m'gv''vnoremap <silent> [L <Esc>:call NextIndent(0, 0, 1, 1)<CR>m'gv''vnoremap <silent> ]L <Esc>:call NextIndent(0, 1, 1, 1)<CR>m'gv''onoremap <silent> [l :call NextIndent(0, 0, 0, 1)<CR>onoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>onoremap <silent> [L :call NextIndent(1, 0, 1, 1)<CR>onoremap <silent> ]L :call NextIndent(1, 1, 1, 1)<CR>用途:
[l
并]l
跳到与当前行具有相同缩进级别的上一行或下一行。[L
并]L
跳到缩进级别低于当前行的上一行或下一行。



