Como ter o modo Vim do Sublime Text e o AutoHotKey funcionando sem conflito?

1

O Sublime Text é de longe o melhor editor de texto que já vi, e o AutoHotKey é o programa de scripts que eu não consigo viver, especialmente o hotstrings, que me permite criar pares de abreviação-expansão, acelerando a digitação significativamente. Essas duas invenções humanas aumentam minha produtividade no dia-a-dia de uma maneira inimaginável. Recentemente eu tenho aprendido como usar o Vim, e estou ficando confortável permitindo o "modo Vintage" no Sublime Text.

No entanto, há um grande problema: os comandos do Vim podem interferir nas hotstrings do AutoHotKey. Digamos que eu tenha esta hotstring:

::xeno::xenófobo

... o que significa que, se digitar "xeno", expandirá para "xenófobo". No entanto, no Vim, "xeno" excluiria, seqüencialmente, a linha atual, depois passaria para o final da palavra, depois procuraria pela próxima ocorrência da string de entrada e depois abriria uma nova linha. Isso é indesejado.

Ainda pior é quando a própria parte de expansão contém uma sequência significativa do Vim:

::eve::Eddie Vedder

... que pula para o final da palavra, apaga a linha atual, muda para o modo de inserção, insere "e Vedder". Absolutamente catastrófico.

Mas o AutoHotKey é poderoso e podemos configurá-lo para ignorar algumas janelas. Exemplo: se a janela ativa tiver uma string como " - Sublime Text" em seu título, podemos ignorar a entrada de hotstrings. Quanto ao Sublime Text com o modo Vim ativado, ele exibirá "COMMAND MODE" ou "INSERT MODE" na barra de status , não na barra de título ! Portanto, o AutoHotKey não pode dizer se o Vim do Sublime Text está atualmente no modo COMMAND ou INSERT.

É possível escrever um plugin / pacote muito simples para o Sublime Text apenas para exibir as palavras "COMMAND mode" ou "INSERT mode" na barra de título quando o Vim está habilitado? Isso pode tornar o AutoHotKey ciente do modo atual e do turno dos hostrings.

    
por Da Rossa 23.02.2017 / 03:50

1 resposta

1

Eu não sei como implementar isso no Sublime, mas alguns pensamentos / observações

  1. A barra de status não é um controle separado, ela parece fazer parte do geral PX_WINDOW_CLASS de toda a janela, o que não é bom para ler o valor do texto diretamente (direto do AutoHotkey).
  2. Você pode usar a pesquisa no AutoHotkey combinada com o OCR para ler a barra de status (usando o GDIP ou algo semelhante). Isso provavelmente funcionaria com uma quantidade mínima de processamento, mas sempre exigiria um atraso entre o momento em que ele muda de modo e o momento em que a mudança de modo é detectada. Não é realmente ideal. Fazer o OCR funcionar também pode ser um pouco complicado (mas é factível).
  3. Você pode escrever seu próprio pacote sublime para ler o texto da barra de status e processar o que fazer com base nesse tipo de pesquisa. Por exemplo, veja aqui: link
  4. Pode valer a pena considerar outros tipos de interação (além de usar AutoHotkey #IfWinActive e definir o título da janela. Em outras palavras, definir o título da janela pode ser difícil, mas pode não ser tão difícil executar um exe ou Ahk script diretamente do sublime.Dizer que você foi capaz de pesquisar a chave de pesquisa correta para o texto de status para determinar se é INSERT ou COMMAND e, em seguida, executar um comando shell (exe ou ahk script) - isso poderia alimentar seu script hotstring ativar / desativar vários combos de teclas.Existe um pacote sublime que faz algo parecido com isto para definir a transparência da janela (executa um utilitário externo para modificar a janela), então talvez isso seja algo que você poderia olhar.
  5. Este link mostra como você pode detectar alterações de modo. Talvez você possa usar isso em combinação com o último item. link
  6. Você não menciona em seu post como a transição ocorre entre o modo Insert e o modo Command - eu instalei o Sublime e procurei por todo o lugar e não consigo descobrir sozinho, mas uma possibilidade a considerar é se deve ou não é uma combinação de teclas. Nesse caso, você pode detectar as teclas usadas para alternar entre os modos e controlar qual modo está em uso separadamente no AutoHotkey. Esse tipo de configuração pode ser menor que o desejável, pois é um estado inferido que está sendo rastreado (e também precisa ser inicializado uma vez para funcionar corretamente). Como uma implementação inicial, no entanto, pode ser bastante fácil obter algo que funciona na maioria das vezes, até obter algo mais robusto em execução no Sublime.
por 24.02.2017 / 06:17