You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否设置Delphi's Code Formatter在文件保存时自动运行?

Delphi保存文件时自动运行代码格式化工具的实现方法

有几种可行的方案解决这个问题,帮你实现保存文件时自动触发代码格式化:

1. 利用Delphi IDE宏实现

打开IDE的宏编辑器(路径:View -> Tool Windows -> Macro Editor),按以下步骤操作:

  • 点击录制按钮,依次执行:Edit -> Format Source(格式化代码)→ File -> Save(保存文件)
  • 停止录制,给这个宏命名(比如FormatAndSave)
  • 可以给宏绑定一个快捷键(比如替换默认的Ctrl+S),或者要求团队成员统一用这个宏完成保存操作

注意:这种方式需要团队成员都遵循使用宏保存的习惯,否则还是可能出现遗漏格式化的情况。

2. 基于Open Tools API开发自定义IDE插件

如果要更彻底地强制保存时格式化,可以写一个轻量的IDE插件,监听文件保存事件并自动触发格式化。核心实现代码示例如下:

unit AutoFormatNotifier;

interface

uses
  ToolsAPI, SysUtils;

type
  TAutoFormatIDENotifier = class(TNotifierObject, IIDENotifier)
  public
    procedure AfterCompile(Succeeded: Boolean); override;
    procedure BeforeCompile(const Project: IOTAProject; var Cancel: Boolean); override;
    procedure BeforeSave(const FileName: string; var Cancel: Boolean); override;
    procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: string;
      var Cancel: Boolean); override;
  end;

procedure Register;

implementation

procedure Register;
var
  Services: IOTAServices;
begin
  if Supports(BorlandIDEServices, IOTAServices, Services) then
    Services.AddNotifier(TAutoFormatIDENotifier.Create);
end;

procedure TAutoFormatIDENotifier.BeforeSave(const FileName: string; var Cancel: Boolean);
var
  EditorServices: IOTAEditorServices;
  TopEditor: IOTAEditor;
begin
  inherited;
  // 仅处理PAS/DPR等源码文件
  if SameText(ExtractFileExt(FileName), '.pas') or SameText(ExtractFileExt(FileName), '.dpr') then
  begin
    if Supports(BorlandIDEServices, IOTAEditorServices, EditorServices) then
    begin
      TopEditor := EditorServices.TopEditor;
      if Assigned(TopEditor) then
      begin
        // 执行内置代码格式化
        EditorServices.FormatSource(TopEditor);
      end;
    end;
  end;
end;

// 其他接口方法空实现
procedure TAutoFormatIDENotifier.AfterCompile(Succeeded: Boolean);
begin
  inherited;
end;

procedure TAutoFormatIDENotifier.BeforeCompile(const Project: IOTAProject; var Cancel: Boolean);
begin
  inherited;
end;

procedure TAutoFormatIDENotifier.FileNotification(NotifyCode: TOTAFileNotification;
  const FileName: string; var Cancel: Boolean);
begin
  inherited;
end;

end.

编译这个插件并安装到IDE后,每次保存源码文件时都会自动先执行格式化操作。

3. 使用第三方IDE增强工具

很多成熟的Delphi IDE增强工具自带“保存时自动格式化”功能,比如GExperts:

  • 安装GExperts后,打开其配置窗口
  • 找到Formatter相关设置项,勾选“Format on save”(不同版本选项名可能略有差异)
  • 确认后,IDE会在每次保存文件时自动触发代码格式化

内容的提问来源于stack exchange,提问作者Marc Guillot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:52:34