如何在Eclipse搜索视图中用其他编辑器打开结果?含插件扩展方案
刚好对Eclipse Search视图的这个操作和插件开发都有了解,给你分两种场景详细说明:
一、普通用户:直接修改搜索结果的打开方式
其实Search视图里的搜索结果和Project Explorer里的文件一样,支持右键选择编辑器打开,步骤很简单:
- 在Search视图的目标搜索结果条目上右键,找到Open With菜单,直接从下拉列表里选你想用的编辑器就能打开。
- 如果想让同类型文件默认用这个编辑器打开,在
Open With里选Other...,弹出对话框后选中目标编辑器,勾选Use it for all files of this type,之后再打开这类文件就会默认用你选的编辑器了。
二、插件开发者:扩展Search视图上下文菜单
如果要开发自定义插件来扩展这个菜单,核心是利用Eclipse的菜单扩展点,给Search视图的右键菜单添加自定义选项,具体步骤如下:
1. 配置插件扩展点
在你的插件plugin.xml里添加以下三个扩展点:菜单贡献、命令定义、处理器绑定。示例代码如下:
<!-- 给Search视图右键菜单添加自定义菜单项 --> <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="popup:org.eclipse.search.ui.contextMenu?after=additions"> <command commandId="com.your.plugin.openWithCustomEditor" label="Open with My Custom Editor" style="push"> <!-- 只在选中搜索结果条目时显示菜单 --> <visibleWhen> <with variable="activeMenuSelection"> <iterate> <instanceof value="org.eclipse.search.ui.text.ISearchResultViewEntry"/> </iterate> </with> </visibleWhen> </command> </menuContribution> </extension> <!-- 定义自定义命令 --> <extension point="org.eclipse.ui.commands"> <command id="com.your.plugin.openWithCustomEditor" name="Open with Custom Editor"> </command> </extension> <!-- 绑定命令处理器 --> <extension point="org.eclipse.ui.handlers"> <handler class="com.your.plugin.handlers.OpenWithCustomEditorHandler" commandId="com.your.plugin.openWithCustomEditor"> </handler> </extension>
2. 实现命令处理器
创建一个处理器类,继承AbstractHandler,在execute方法中处理选中的搜索结果,调用指定编辑器打开文件:
package com.your.plugin.handlers; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.ExecutionException; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.search.ui.text.ISearchResultViewEntry; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.AbstractHandler; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.part.FileEditorInput; public class OpenWithCustomEditorHandler extends AbstractHandler { @Override public Object execute(org.eclipse.core.commands.ExecutionEvent event) throws ExecutionException { // 获取当前选中的搜索结果 IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); for (Object item : selection.toList()) { if (item instanceof ISearchResultViewEntry) { ISearchResultViewEntry entry = (ISearchResultViewEntry) item; IFile targetFile = (IFile) entry.getResource(); if (targetFile != null && targetFile.exists()) { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); IWorkbenchPage page = window.getActivePage(); try { // 替换成你的自定义编辑器ID,打开目标文件 page.openEditor(new FileEditorInput(targetFile), "com.your.plugin.customEditorId"); } catch (PartInitException e) { // 这里可以添加异常处理逻辑,比如弹出提示框 e.printStackTrace(); } } } } return null; } }
3. 注意事项
- 确保你的自定义编辑器已经通过
org.eclipse.ui.editors扩展点注册,这样才能通过编辑器ID调用它。 - 菜单的
locationURI里的org.eclipse.search.ui.contextMenu是Search视图右键菜单的固定ID,不要写错。
内容的提问来源于stack exchange,提问作者Michael K
相关产品推荐
相关产品推荐

