diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 0d6ef01b83be..32a37175780a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -25,6 +25,8 @@ import com.intellij.diagnostic.Dumpable; import com.intellij.diagnostic.LogMessageEx; import com.intellij.ide.*; import com.intellij.ide.dnd.DnDManager; +import com.intellij.ide.plugins.IdeaPluginDescriptor; +import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.customization.CustomActionsSchema; import com.intellij.openapi.Disposable; @@ -55,6 +57,7 @@ import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; import com.intellij.openapi.editor.impl.softwrap.SoftWrapDrawingType; import com.intellij.openapi.editor.impl.view.EditorView; import com.intellij.openapi.editor.markup.*; +import com.intellij.openapi.extensions.PluginId; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; import com.intellij.openapi.fileEditor.impl.EditorsSplitters; @@ -347,6 +350,9 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private Rectangle myOldTailArea = new Rectangle(0, 0, 0, 0); private boolean myImmediateEditingInProgress; + // TODO Should be removed when IDEA adopts typing without starting write actions. + private static final boolean VIM_PLUGIN_LOADED = isPluginLoaded("IdeaVIM"); + static { ourCaretBlinkingCommand.start(); } @@ -2179,7 +2185,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } private static boolean isZeroLatencyTypingEnabled() { - return Registry.is("editor.zero.latency.typing"); + // Zero-latency typing is suppressed when Idea VIM plugin is loaded, because of VIM-1007. + // That issue will be resolved automatically when IDEA adopts typing without starting write actions. + return !VIM_PLUGIN_LOADED && Registry.is("editor.zero.latency.typing"); + } + + private static boolean isPluginLoaded(@NotNull String id) { + PluginId pluginId = PluginId.findId(id); + if (pluginId == null) return false; + IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId); + if (plugin == null) return false; + return plugin.isEnabled(); } private boolean canPaintImmediately(char c) {