скрипт python для отправки команд в vim (mvim) - PullRequest
0 голосов
/ 08 мая 2011

Я написал очень простой плагин vim и скрипт на python, пытаясь проверить связь между ними. Мой vim-скрипт выглядит так:

function! HelloWorld()
    silent :!python helloworld.py
endf

nmap <C-P> :call HelloWorld()<CR>

тогда мой скрипт на python выглядит так:

import os;

os.system( 'mvim --servername VIM -u NONE -U NONE --remote-send \"<C-\\\\><C-N>:echo \'Hello World!\'<CR>\"' )

Если я нахожусь в vim и жму, использую команду ": call HelloWorld ()" или просто набираю ":! Python helloworld.py" из того же или другого экземпляра mvim или vim, ничего не происходит. Однако, если я вызываю скрипт из командной строки отдельно, mvim отвечает соответственно: показывает «Hello World!» вдоль дна.

Кто-нибудь имеет представление, почему он не работает при вызове из vim?

1 Ответ

3 голосов
/ 08 мая 2011

Попробуйте заменить

silent :!python helloworld.py

на

silent :!(sleep 0.5s && python helloworld.py) &
redraw!

(дело в том, чтобы вернуться к vim до того, как поступит удаленная команда).Если это работает, то проблема заключается в обработке удаленных команд при получении вывода оболочки.Вы также можете попробовать другие обходные пути:

call system('python helloworld.py')

,

call system('python helloworld.py &')

и

pyfile helloworld.py

(Обратите внимание, что последний требует vim, скомпилированный с функцией + pythonтакже изменяет состояние интерпретатора python, используемого vim).

Кстати, используйте system() call вместо !, когда вы не хотите видеть вывод скрипта.Также используйте redraw! после silent !.

...