我在这里写了一个 IntelliJ IDEA 插件,比如AceJump,它用于 IDE 中的快速移动插入符号。
如下所示,通过将 TextAttributes 应用于所有 'i' 出现,并给每个 'i' 一个索引字符。
用户按“H”后,插入符号将移至“私人”中的“i”。然后将所有标记字符更改为原始 'i'
问题
此操作将在跳转期间更改文档内容。所以会有如下的历史变化。有没有办法忽略本地历史管理的变化?
按 Cmd-z 后,有一个对话框显示“无法撤消”。如何避免这种情况?
您应该使用例如 HintManager 类在文档上绘制导航标记,而不是更改文档内容。
如果你改变了实际的文档内容,除了破坏撤消和本地历史之外,这将产生更多的后果——例如,文档将被重新解析,导致显示错误的语法错误;监视文档更改的任何其他插件或 IntelliJ IDEA 组件都会对此做出反应;如果用户正在使用需要显式签出操作的诸如 Perforce 之类的 VCS,则该文档将从 VCS 中签出;等等 TL/DR:不要那样做。
万一有人谷歌并在这里找到。以下是我的最终解决方案。
我使用 Swing 图形绘图来显示标记,效果很好。
详情请参考:https ://github.com/whunmr/emacsIDEAs/blob/master/src/org/hunmr/acejump/marker/MarkersPanel.java