【问题标题】:Can I undo the formatting style changes that Black makes to my Python code?我可以撤消 Black 对我的 Python 代码所做的格式样式更改吗?
【发布时间】:2019-12-10 00:57:50
【问题描述】:

Python 格式化工具 Black 是否可以在运行后撤消其所做的格式更改?还是假设我正在使用源代码控制并制作自己的备份?这是截至 2019 年 12 月的黑色版本 19.3b0。

【问题讨论】:

  • 它假定您正在使用源代码控制(我们所有人都应该这样做)。好吧,严格来说,它不假设任何东西。它只是格式化代码。使用版本控制,或在编辑器中重新保存打开的未修改缓冲区,或从备份中恢复,或手动重新格式化,或接受您要求工具重新格式化代码并使用它。
  • 但是,有--diff 选项(不要写回文件,只写在标准输出上)。

标签: python python-black


【解决方案1】:

不,它没有。它什么也不做,只是重新格式化它已经传递的文件。它只是一个表现良好的 Unix 工具,它希望您处理自己的版本控制。

它的--diff 选项是你能得到的最好的:

--diff

不要写回文件,只需在标准输出上为每个文件输出一个差异。

来源:https://github.com/psf/black#command-line-options

【讨论】:

    【解决方案2】:

    一些文本编辑器和像 Pycharm 这样的 IDE 允许您简单地按 cmd+Z(或编辑器中的任何撤消命令)来恢复到自动格式化之前的状态。此外,在自动格式化之前,您可以使用Black Playground 测试结果。

    【讨论】:

      【解决方案3】:

      使用--diff 标志,可以将输出通过管道传输到patch,然后再发送到标准输出。可以使用单行 shellscript 作为包装器,其中$1 是正在格式化的文件:

      black --quiet --diff "$1" | patch --quiet -o - "$1"

      【讨论】:

        【解决方案4】:

        如果您不小心使用黑色预提交(意思是https://pre-commit.com/)挂钩格式化了大量遗留代码,而您不想这样做。

        警告:在您执行这些命令之前,请先考虑一下在您的情况下这样做是否正确

        1. 将重新格式化的文件列表从黑色预提交挂钩输出复制到单独的文件中,例如命名为 filelist
        2. export SKIP=black 暂时禁用黑色预提交挂钩
        3. 您的原始(未格式化)更改已在索引中,现在使用git commit 提交它们。
        4. 现在,unset SKIP 再次启用黑色预提交挂钩

        现在您可以在原始更改已提交时自行使用 filelist 撤消格式更改。

        【讨论】:

          猜你喜欢
          • 2018-11-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-24
          • 1970-01-01
          • 1970-01-01
          • 2013-03-06
          • 2018-02-23
          • 1970-01-01
          相关资源
          最近更新 更多