在 PyCharm 中,有没有一种方法可以根据文件类型为外部工具定义键盘映射快捷方式?

Is there a way to define keymap shortcuts for external tools depending on the file type, in PyCharm?

一个用例是为 python 文件使用 black 代码格式化程序,为 SQL 文件使用 sqlfluff 代码格式化程序,并使用相同的两种工具的键盘快捷键。

目前,两者都在 Preferences -> Tools -> External Tools 中设置,紧随 black documentation

遗憾的是没有。您不能分配一个快捷方式并根据文件扩展名调用不同的外部工具。

但您可以很容易地解决它:

  • 您将需要一个外部工具条目,而不是当前的两个条目。
  • 创建一个 shell/batch 脚本来执行实际的格式化(将调用实际的格式化工具)。
  • 将该脚本用作外部工具命令。
  • 在该自定义脚本中检测文件的扩展名并在那里执行最合适的格式化程序(black 用于 Python 文件,sqlfluff 用于 SQL 文件)。

感谢 LazyOne 的建议,我将这个小 shell 脚本写到 运行 blacksqlfluff,具体取决于文件扩展名:

#!/bin/sh

file_path=""
file_name=$(basename -- "$file_path")
extension="${file_name##*.}"

echo "Formatting file $file_path"
echo "With extension $extension"

if [ "$extension" = "py" ]; then
  /Users/alexandre/.local/bin/black "$file_path"
elif [ "$extension" = "sql" ]; then
  /Users/alexandre/.local/bin/sqlfluff fix -f --dialect postgres "$file_path"
else
  exit 2
fi

确保将路径更改为您的实际安装路径(which blackwhich sqlfluff 的输出)。

您可以将脚本保存在文件中(例如 code_formatter.sh),并使其可执行:

chmod +x code_formatter.sh

然后在Pycharm设置中将其配置为外部工具,别忘了"$FilePath$"参数:

您现在可以为“我的代码格式化程序”外部工具定义一个键盘快捷方式,它应该适用于 sql 和 python 文件。