VS Code - 重命名符号对于 Python 来说太慢了
Posted
技术标签:
【中文标题】VS Code - 重命名符号对于 Python 来说太慢了【英文标题】:VS Code - Rename symbol too slow for Python 【发布时间】:2018-12-16 12:26:33 【问题描述】:我遇到了这个重构问题,我尝试通过“重命名符号”选项重命名函数,但这需要很长时间。文档选项卡下方有一个“进度条”无休止地移动。重命名大约需要 5 分钟(包括变量名)。
这是正常行为吗?我在大约 100 行的同一文件夹中有大约 10 个 python 文件。但是,我有一个数据文件夹(属于该项目),其中包含大约 100,000 个 txt 文件(被 git 忽略,顺便说一句)。这些文件是否也被考虑在内?有没有办法只在当前文件中重命名?
VS 代码版本:1.25.0 Python 扩展:2018.6.0
谢谢,拉法
【问题讨论】:
如何在 *.py 文件上使用 grepwin 进行搜索/替换?我对 VS Code / python 模式的体验很差。 @Jean-François 我看不出用 grep 或任何其他纯文本工具进行搜索/替换如何有效。您只需要解析代码以避免重命名时的误报。 取决于您要替换的内容。如果是search_minimum_by_least_square
,它将正常工作。如果是min
,则否;但是 python 是如此动态,以至于很难实现真正的智能重构(与 java 不同)。考虑到任务的难度,PyCharm 是一个很好的工具。
如果有帮助,我会在重命名时使用 ctrl+D 或 ctrl+H/ctrl+shift+H。
@bluesmonk 这些快捷方式非常适合我的目的!谢谢。
【参考方案1】:
同样的问题,这显然是由于 Rope 库(用于进行重构)不完全支持 Python 3。
这是一个描述类似问题的人的问题 - https://github.com/Microsoft/vscode-python/issues/52
更新:使用 Jedi 而不是 Microsoft Python 语言服务器 进行智能感知似乎已经为我解决了这个问题。只需将以下条目添加到您的 settings.json 文件中:
"python.jediEnabled": true
【讨论】:
对我没有帮助 表示 python.jediEnabled 的“未知配置设置”。 (通过其他搜索)这被替换为“python.languageServer”:“Jedi”,......但这也不起作用【参考方案2】:总结
我发现rope
没有忽略我的工作空间目录中的虚拟环境中的文件。这造成了可以理解的缓慢的重构性能。我将我的虚拟环境文件夹添加到rope
配置文件config.py
中的ignored_resources
。进行更改后,重构性能立即大大提高。
示例
采用下面的文件夹结构。
-.venv
-.vscode
--.ropeproject
---config.py
---objectdb
--pythonpackage
---__init__.py
---[other files I want to refactor]
-main.py
假设.venv
是您的虚拟环境的名称,为了让rope
忽略它,您需要在ignored_resources
文件的ignored_resources
列表中包含.venv
。示例如下。
def set_prefs(prefs):
"""This function is called before opening the project"""
# Specify which files and folders to ignore in the project.
# Changes to ignored resources are not added to the history and
# VCSs. Also they are not returned in `Project.get_files()`.
# Note that ``?`` and ``*`` match all characters but slashes.
# '*.pyc': matches 'test.pyc' and 'pkg/test.pyc'
# 'mod*.pyc': matches 'test/mod1.pyc' but not 'mod/1.pyc'
# '.svn': matches 'pkg/.svn' and all of its children
# 'build/*.o': matches 'build/lib.o' but not 'build/sub/lib.o'
# 'build//*.o': matches 'build/lib.o' and 'build/sub/lib.o'
prefs['ignored_resources'] = ['*.pyc', '*~', '.ropeproject',
'.hg', '.svn', '_svn', '.git', '.tox', '.venv']
【讨论】:
以上是关于VS Code - 重命名符号对于 Python 来说太慢了的主要内容,如果未能解决你的问题,请参考以下文章
WSL2:Python 使用 VS Code 调试器重命名文件
python 通过EXIF重命名文件名。来自http://code.activestate.com/recipes/576646/