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

问题描述 投票:0回答:2

考虑以下函数定义:

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

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

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

  1. [m去功能定义的开头
  2. j下线
  3. V去直线视觉模式
  4. {n}j无论最后一个"""的相对线数是什么

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

python vim
2个回答
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
投票

又快又脏:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.