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