8

我想以编程方式执行上述操作。

我查看了How to get cursor position in an eclipse TextEditorEclipse-plugin how to get current text editor corsor position所以我知道如何从当前打开的编辑器中获取光标偏移量。但是,我正在尝试在我以编程方式打开的新编辑器中设置光标偏移量。

我目前打开新编辑器的方式如下:

IWorkbenchWindow win = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    IWorkbenchPage page = win.getActivePage();
    if (page != null) {
        IEditorPart editor = page.getActiveEditor();
        if (editor != null) {
            IEditorInput input = editor.getEditorInput();
            if (input instanceof IFileEditorInput) {
                String fileLocation = ((IFileEditorInput) input).getFile().getLocation().toOSString();
                String newFileLocartion = generateNewFileLocation(fileLocation);
                File file = new File(newFileLocartion);
                IFileStore fileStore = EFS.getLocalFileSystem().getStore(file.toURI());
                try {
                    IDE.openEditorOnFileStore(page, fileStore);
                } catch (PartInitException e) {
                    // TODO error handling
                }
            }
        }
    }

有没有办法打开将新编辑器设置为以特定偏移量打开(假设我已经提前知道偏移量)?

谢谢!

4

2 回答 2

4

我使用了以下,这比以前的答案更简单。假设你有int offset, IWorkbenchPage pageand IFile file(而且它们似乎都存在于 OP 的问题中):

ITextEditor editor = (ITextEditor) IDE.openEditor(page, file);
editor.selectAndReveal(offset, 0);

我从这个答案中找到了如何做到这一点。(但通过将selectAndReveal的第二个参数设置为零,不会突出显示任何文本)

于 2015-02-22T20:38:31.733 回答
3

它使用此代码段导航到文件中的指定行。

public static void navigateToLine(IFile file, Integer line)
{
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put(IMarker.LINE_NUMBER, line);
    IMarker marker = null;
    try {
        marker = file.createMarker(IMarker.TEXT);
        marker.setAttributes(map);
        try {
            IDE.openEditor(getActivePage(), marker);
        } catch ( PartInitException e ) {
            //complain
        }
    } catch ( CoreException e1 ) {
        //complain
    } finally {
        try {
            if (marker != null)
                marker.delete();
        } catch ( CoreException e ) {
            //whatever
        }
    }
}

可能不完全是您需要的,但可能很有用。(//抱怨替换了特定于使用它的产品的错误处理代码)

于 2012-09-04T06:38:00.720 回答