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

IDEA插件开发:如何在实时模板替换框执行自定义操作并获取内容?

实现IDEA实时模板替换框的文本获取与变量名识别

核心思路

借助IDEA插件开发API中的TemplateState、TemplateVariable类,结合TemplateEditingListener监听模板编辑事件,即可获取替换框的输入文本和对应模板变量名。

具体实现步骤

1. 获取当前模板的编辑状态(TemplateState)

先获取当前激活的编辑器实例,再通过TemplateManager拿到模板编辑状态对象,从该对象中提取所有模板变量信息:

import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.codeInsight.template.TemplateManager;
import com.intellij.codeInsight.template.TemplateState;
import com.intellij.codeInsight.template.TemplateVariable;
import com.intellij.openapi.actionSystem.CommonDataKeys;

// 在插件逻辑中(比如Action类的actionPerformed方法内)
Project project = ...; // 获取当前项目实例
Editor editor = CommonDataKeys.EDITOR.getData(e.getDataContext()); // e为AnActionEvent
if (editor == null) return;

TemplateState templateState = TemplateManager.getInstance(project).getTemplateState(editor);
if (templateState == null) return; // 当前无模板编辑状态

2. 获取替换框对应的模板变量名与输入文本

通过TemplateState可遍历所有模板变量,或直接获取当前焦点的变量:

// 遍历所有模板变量
for (TemplateVariable variable : templateState.getVariables()) {
    String varName = variable.getName(); // 对应模板中$value$的"value"部分
    String inputText = variable.getValue(); // 替换框当前输入的文本
    // 执行自定义处理逻辑
}

// 获取当前焦点所在的替换框变量
TemplateVariable currentVar = templateState.getCurrentVariable();
if (currentVar != null) {
    String currentVarName = currentVar.getName();
    String currentInput = currentVar.getValue();
}

3. 监听输入完成/变量变化事件

若需在用户输入完成或变量内容变化时触发处理,注册TemplateEditingListener:

TemplateManager.getInstance(project).addTemplateEditingListener(new TemplateEditingListener() {
    @Override
    public void variableChanged(@NotNull TemplateState state, @NotNull TemplateVariable variable) {
        // 变量内容修改时触发
        String varName = variable.getName();
        String updatedText = variable.getValue();
        // 处理更新后的文本
    }

    @Override
    public void templateFinished(@NotNull TemplateState state, boolean broken) {
        // 模板编辑完成(用户按回车/退出替换框)时触发
        for (TemplateVariable variable : state.getVariables()) {
            String finalVarName = variable.getName();
            String finalText = variable.getValue();
            // 处理最终输入文本
        }
    }
}, editor);

注意事项

  • 仅在模板激活状态下调用上述代码有效,否则TemplateState会返回null。
  • 注册的监听器建议在模板编辑结束后移除,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:10:25