考虑以下函数定义:
def function(self, arg1, arg2):
"""Function for doing something.
Args:
arg1: Argument 1.
arg2: Argument 2.
Returns:
Returns something.
"""
...
...
选择整个文档字符串的最简单方法是什么?例如,我可以使用内置的方括号映射(即[m
或]m
)轻松选择函数的内部和外部周长,但文档字符串本身又如何呢?我现在能做的最好的事情是使用方括号映射跳转到函数定义的开头,沿着一条线,然后使用可视模式选择手动突出显示。假设我的光标在功能块内,这就是我接近文档字符串选择的方法:
[m
转到功能定义的开头j
下线V
转到逐行视觉模式{n}j
无论上一个"""
的相对行号是有没有办法让这更容易?我认为至少步骤4必须有一些解决方法,这可能非常繁琐。也许有些模式匹配? g*
用于选择是我的想法,但只有当三重引号在他们自己的行中被隔离时它才有效。
答案 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。