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