在vim中选择/修改python文档字符串(代码片段)

author author     2022-10-20     311

关键词:

考虑以下函数定义:

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. nj无论最后一个"""的相对线数是什么

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

答案

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

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

function! s:docstring(...)
    call search('^s*def.*
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文本对象。

另一答案

又快又脏:

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

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

vim技巧(代码片段)

...文件名,这时再保存相当于另存为。gf--打开以光标所在字符串为文件名的文件。:saveasnewfilename--另存为:browsee--会打开一个文件浏览器让你选择要编辑的文件。如果是终端中,则会打开netrw的文件浏览窗口;如果是gvim,则会打开... 查看详情

在vim中突出显示python doc字符串中的ReST

】在vim中突出显示pythondoc字符串中的ReST【英文标题】:HighlightingReSTinpythondocstringswithinvim【发布时间】:2014-08-2000:33:02【问题描述】:由于我将Sphinx与autodoc一起使用,我想让我的vim使用ReST语法突出显示python文档字符串。这可能... 查看详情

vim编辑器基本操作(代码片段)

...找的内容在整个文档中从上往下查找(例如:/abc)再按n选择下一个单词N选择上一个单词?root在整个文档中从下往上查找(例如:?abc)再按n选择下一个单词N选择上一个单词dd删除光标所在行内容dd前面加数字n表示删除n行内容... 查看详情

python爬虫编程思想(64):在pyquery中使用css选择器(代码片段)

...y对象,PyQuery类的构造方法需要传入一个HTML文档(可以是字符串、URL或文件形式)。由于PyQuery类重载了函数调用运算符(实现了__call__函数), 查看详情

vim中与编码有关的选项(代码片段)

...;encoding 之后,Vim内部所有的buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字... 查看详情

vim中文帮助文档的安装

...法: 首先去网址http://vimcdoc.sourceforge.net/ 在其中选择“Latestplatformindependenttarball,includinganLinux/BSDinstallationscript”下载 下载完成之后选择相应的文件夹保存,在文件夹中解 查看详情

python爬虫编程思想(64):在pyquery中使用css选择器(代码片段)

...y对象,PyQuery类的构造方法需要传入一个HTML文档(可以是字符串、URL或文件形式)。由于PyQuery类重载了函数调用运算符(实现了__call__函数),所以可以按下面的代码使用PyQuery类的实例。frompyqueryimportPyQueryaspqdoc=pq(html)#由于PyQuer... 查看详情

vim优化

...下就ok了,打开~/.vimrc加上下面的几行(如果已经有了,修改一下数值就行了)。settabstop=4setsofttabstop=4setshiftwidth=4setexpandtab 在复制代码到vim中出现恶心的自动缩进:解决办法:在~/.vimrc中添加,下面这一行,这样在插入模 查看详情

vim使用:经常使用功能

1.vim经常使用功能vim的经常使用功能。包含块的选择。复制,多文件的编辑。多窗体等功能。2.vim块选择块选择是将文档中的一块能够选择复制,粘贴,不用整行的处理。按下v,V。Ctrl+v时进入块选择。在左下角出现 --VISUAL... 查看详情

vim选择并替换(代码片段)

...在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个 查看详情

Vim 用 Python 获取可视选择范围之间的字符串

】Vim用Python获取可视选择范围之间的字符串【英文标题】:VimobtainstringbetweenvisualselectionrangewithPython【发布时间】:2013-08-1020:17:37【问题描述】:Hereissometexthereislinetwooftext我在Vim中从is到is视觉选择:(括号表示视觉选择[])Here[iss... 查看详情

Vim - 直观地选择多个不连续的部分[重复]

】Vim-直观地选择多个不连续的部分[重复]【英文标题】:Vim-visuallyselectmultiplenon-consecutivesections[duplicate]【发布时间】:2020-08-2104:15:09【问题描述】:VIM中有没有一种方法可以直观地选择文档中不直接连接的多个部分/不连续的行... 查看详情

7种提高工作效率的vim操作(代码片段)

...复操作命令.(英文句点)介绍过,.命令可以用于重复上次修改。在《Vim实用技巧》一书中花了大量篇幅介绍".范式":一次按键移动,一次按键执行。假设想在以下的JavaScript代码里的+前后加上空格以使代码更加美观,可以... 查看详情

python用啥软件写代码

...行编辑器,因此可用于远程开发。替换100MB+文件中的所有字符串出现是快速而简。vim是基于键盘的,因此更容易理解。Vimscript 查看详情

vim搜索设置高亮

vim搜索设置高亮linuxvim打开文档搜索字符串时,设置被搜索到字符串高亮显示。有两种方法:1、暂时设置:vim打开文档-->命令行形式输入sethlsearch。缺点:关闭文档后,下次打开,又须要又一次设置一遍。2、永久设置(推荐)... 查看详情

如何在VIM中选择括号之间的所有行

】如何在VIM中选择括号之间的所有行【英文标题】:HowtoselectallLINESbetweenparenthesisesinVIM【发布时间】:2020-01-3013:05:07【问题描述】:假设我有以下代码aaa;bbb;cccvoid()xxx;yyy;ddd;eee;现在假设我的光标在yyy。我想突出显示括号和inclusive... 查看详情

怎么设置首行缩进2字符

...中,点击段落。3、进入段落设置,在特殊格式选项中,选择首行缩进,设置为2个字符并确定。4、设置完成之后,在文档中就可以看到,word首行缩进2字符设置成功。参考技术A设置首行缩进2字符需要以下四个步骤:打开“word”... 查看详情

解决报错:在python中使用property装饰器时,出现错误:typeerror:descriptor‘setter‘requiresa‘property‘objectbut(代码片(代码片段)

解决报错错误信息问题分析问题代码解决报错参考文档错误信息       •我们在使用property装饰器时,可能因为装饰器名称书写错误导致下述错误:TypeError:descriptor'setter'requiresa'property'objectbutreceiveda'funct... 查看详情