Поменяйте курсор на другое окно на BufWritePost в Vim - PullRequest
1 голос
/ 03 июня 2011

У меня есть функция, которая при каждом вызове разделяет окно и отображает некоторую информацию, помещая курсор в это новое окно.

Пока все хорошо.

Но я реализуюautocommand, который будет запускать ту же функцию, и все прекрасно работает, за исключением того, что курсор никогда не меняется на открытое окно, как если бы он не работал с автокомандой.

Строка, которая вызывает это, выглядит следующим образом:

 autocmd! BufWritePost *.py call MyFunction()

Как я уже сказал, это прекрасно работает, когда вы звоните вручную :call MyFunction(), но не с автокомандой.

Я думаю, что Брэм упомянул, что автокоманды действительно не предназначены для разделения окон или даже перемещениякурсор

Есть ли способ обойти это или я что-то не так делаю?

1 Ответ

3 голосов
/ 03 июня 2011

Исходя из того, что ZyX сказал в комментариях к исходному вопросу, звучит так, что это сработает:

function MyFunction()
    [ have all commands you currently have]
    [ . . . ]

    " then as last line include call to feedkeys()
    " this will stuff keystrokes into key buffer
    " and get executed after MyFunction() ends
    " remember that location will always be in 
    " original window, i.e, window that vim
    " was in when autocommand was triggered
    " so if new window is below original
    " window you could use this:

    " feedkeys call below edited to reflect ZyX's
    " improvement of \<C-\>\<C-n> to guarantee
    " we're in Normal mode before using window
    " movement key combo

    call feedkeys("\<C-\>\<C-n>\<c-w>j", 'n')

endfunction
...