Как определить режим вставки Vim в редакторе Ace - PullRequest
1 голос
/ 27 марта 2019

В моей реализации редактора мне нужно определять, когда люди перемещаются вверх и вниз в редакторе с помощью клавиатуры. Я легко могу сделать это в режиме редактирования ACE по умолчанию, фиксируя клавиши вверх и вниз.

Однако с VIM это сложнее, так как навигационные клавиши vim должны захватываться только в режиме навигации. Я могу проверить, использует ли редактор режим Vim, но не могу понять, как определить, в каком режиме находится VIM.

Вот что у меня есть на данный момент для захвата клавиш:

$("pre[lang]").on("keyup", function(event) {
  updateDocument();

  // up and down handling - force a preview refresh
  if (event.keyCode === 38 || event.keyCode === 40)
    te.previewRefresh();
  else if (te.lastStyle.keyboardHandler === "vim") {
       var vim = require("ace/keyboard/vim").Vim;  
      // How to get active Vim mode in document?
      //
      // if (vim is in navigation mode)
      //    te.previewRefresh();
  }
});

Любая помощь будет оценена.

Возможно, есть лучший способ перехватить навигацию с помощью клавиатуры при изменении row. Я играл с редактором change event и deltas, но это выглядело еще более сложным и ненадежным, чем перехват ключа. Любые предложения о том, что я мог пропустить, будут полезны.

1 Ответ

2 голосов
/ 27 марта 2019

Похоже, я нашел свой ответ сразу после публикации (конечно).Публикация здесь, чтобы другие могли ее увидеть.

ACE фактически отслеживает vim и его настроенное состояние, и к editor.state прикреплен объект состояния с insertMode (и другими), который можно проверить.

Следующее позволяет мне определять навигационные клавиши и предпринимать действия с ними.

// up and down handling - force a preview refresh
if (event.keyCode === 38 || event.keyCode === 40)      
  previewRefresh();

else if (te.editor.$keybindingId === "ace/keyboard/vim"
  && (event.keyCode === 74 || event.keyCode == 75)) {
  if (!te.editor.state.cm.state.vim.insertMode)
    previewRefresh();
}                
...