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 调试器重命名文件

VS Code 1.42 发布!2020 年首个大更新

python 通过EXIF重命名文件名。来自http://code.activestate.com/recipes/576646/

VS Code非英语版本连接TFS错误解决方案

处理重命名:svn vs. git vs. mercurial

VS2010中重命名项目