Skip to main content
 首页 » 编程设计

python之在 Emacs 中复制和粘贴 Python 函数

2025年05月04日34落叶

我有一个程序看起来像(这是一个愚蠢的例子来说明我的观点,它做什么不是很重要)

count = 0 
 
def average(search_term): 
    average = 0 
    page = 0 
    current = download(search_term, page) 
    while current: 
        def add_up(downloaded): 
            results = downloaded.body.get_results() 
            count += len(results) 
            return sum(result.score for result in results) 
        total = average*count 
        total += add_up(current) 
        average = total/count 
        print('Average so far: {:2f}'.format(average)) 
        page += 1 
        current = download(search_term, page) 

如果我将光标放在第 8-11 行的任何一行上并按下组合键,我希望 Emacs 复制或终止 add_up 函数,然后我想将光标移动到第 2 行然后按一个组合键并将函数粘贴到那里,并根据粘贴的上下文使用正确的缩进级别。

这可能吗?如果可能,我该怎么做?

请您参考如下方法:

使用 python-mode.el py-kill-def 和 yank 就可以完成这项工作。 但是,有一些限制。 py-kill-def 必须从有问题的 def 内部调用。所以需要先从11号线往上走。 插入后缩进也会带来一些问题:由于缩进是语法,有时 Emacs 不知道需要哪个缩进。在下面的示例中,add_up 中的第一个缩进为 4 和 8 个缩进可能是不想要的 - 但这是合法的代码。在 add_up 的正文中缩进第一行后,py-indent-and-forward 应该方便剩下的。

def average(search_term): 
    average = 0 
    def add_up(downloaded): 
            results = downloaded.body.get_results() 
            count += len(results) 
            return sum(result.score for result in results) 
    page = 0 
    current = download(search_term, page) 
    while current: 
 
        total = average*count 
        total += add_up(current) 
        average = total/count 
        print('Average so far: {:2f}'.format(average)) 
        page += 1 
        current = download(search_term, page)