首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Python文件的%移动

相当于Python文件的%移动
EN

Stack Overflow用户
提问于 2013-06-02 21:48:22
回答 3查看 700关注 0票数 9

对于使用{}表示块的语言,vim拥有万能的%键。python代码的等效移动是什么?或者至少移动到具有相同缩进量的下一行/上一行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-02 22:43:13

vim wiki建议使用以下绑定:

代码语言:javascript
复制
nnoremap <M-,> k:call search('^'. matchstr(getline(line('.')+1), '\(\s*\)') .'\S', 'b')<CR>^
nnoremap <M-.> :call search('^'. matchstr(getline(line('.')), '\(\s*\)') .'\S')<CR>^

以及提供更全面的解决方案:

代码语言:javascript
复制
" 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 <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跳到与当前line.
  • [L缩进级别相同的上一行或下一行,]L跳到缩进级别低于当前行的上一行或下一行。
票数 4
EN

Stack Overflow用户

发布于 2013-06-02 23:39:32

Vim具有在“段落”和相应的p文本对象(vipdap)之间移动的{}运动。

默认的Python The插件还(重新)定义了[[]]移动到下一个和上一个类,以及]m[m移动到下一个和上一个方法。

indent-object对于Python也非常有用。

票数 3
EN

Stack Overflow用户

发布于 2013-06-02 23:24:52

您可以始终使用注释插入{} (如果其他人共享,则不会执行此操作):

代码语言:javascript
复制
class Game(object): # {
    def __init__(self, num, end): # {
        pass
    # }
# }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16883360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档