在Vim中选择/修改Python文档字符串

时间:2018-02-28 00:14:10

标签: python vim

考虑以下函数定义:

def function(self, arg1, arg2):
    """Function for doing something.

    Args:
         arg1: Argument 1.
         arg2: Argument 2.
    Returns:
         Returns something.
    """
    ...
    ...

选择整个文档字符串的最简单方法是什么?例如,我可以使用内置的方括号映射(即[m]m)轻松选择函数的内部和外部周长,但文档字符串本身又如何呢?我现在能做的最好的事情是使用方括号映射跳转到函数定义的开头,沿着一条线,然后使用可视模式选择手动突出显示。假设我的光标在功能块内,这就是我接近文档字符串选择的方法:

  1. [m转到功能定义的开头
  2. j下线
  3. V转到逐行视觉模式
  4. {n}j无论上一个"""的相对行号是
  5. ,都会向下移动

    有没有办法让这更容易?我认为至少步骤4必须有一些解决方法,这可能非常繁琐。也许有些模式匹配? g*用于选择是我的想法,但只有当三重引号在他们自己的行中被隔离时它才有效。

2 个答案:

答案 0 :(得分:2)

我建议制作一个docstring文本对象。与id / ad一样。

将以下内容放入~/.vim/after/ftplugin/python.vim

function! s:docstring(...)
    call search('^\s*def.*\n\s*\zs"""\_s*.', 'bc' . (a:0 ? 'e' : ''))
    normal! m<
    if a:0
        call search('.\ze\_s*"""', 'e')
    else
        call search('"""', 'e')
        call search('"""', 'e')
    endif
    normal! m>
    normal! `<v`>
endfunction

xnoremap <buffer> id :<c-u>call <SID>docstring(1)<cr>gv
xnoremap <buffer> ad :<c-u>call <SID>docstring()<cr>gv
onoremap <buffer> id :normal vid<cr>
onoremap <buffer> ad :normal vad<cr>

现在,您可以像使用任何Vim文本对象一样使用id / ad文本对象。

答案 1 :(得分:1)

快速而肮脏:

nmap <f10> [m/"""<cr>vn

在函数/方法体中,按<f10>将选择docstring。