Разговор с Вим снаружи

12

Могу ли я изменить переменную в экземпляре vim из другой оболочки (без отправки ключей через tmux)?

Я спрашиваю, потому что я бы хотел использовать опции latexmk compiling_cmd, success_cmd и fail_cmd для отображения статуса компиляции в строке состояния.

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

Toothrot
источник

Ответы:

19

Если вы запускаете свой первый сеанс Vim с аргументом --servername VIM:

$ vim --servername VIM

Затем вы можете отправить любую команду из любой другой оболочки с аргументом --remote-send.

Например, если вы используете свою строку состояния для отображения значения некоторой переменной g:myvar, и в вашем vimrc есть следующие строки:

let g:myvar = "foo"
set stl+=%{g:myvar}

Затем вы можете изменить его значение ( :let g:myvar = "bar") из другой оболочки:

$ vim --remote-send ':let g:myvar = "bar"<cr>'

Статусная строка должна отражать изменение значения.


Как говорится в вашем последнем комментарии , если ваш экземпляр Vim не находится в обычном режиме, предыдущая команда не будет работать должным образом. Там может быть проще, но вот 2 возможных решения:

1) добавить ключ, <esc>чтобы он находился в обычном режиме
2) использовать аргумент --remote-exprвместо --remote-sendвычисления выражения и написать небольшую вспомогательную функцию, код которой назначит новое значение вашей переменной

Первое решение:

$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'

Второе решение:

Определите следующую функцию в вашем vimrc:

function! Myfunc(value)
    let g:myvar = a:value
endfunction

Затем в вашей оболочке:

$ vim --remote-expr 'Myfunc("bar")'
user9433424
источник
Спасибо! Я вижу, что эта функция не скомпилирована, поэтому я перекомпилирую. Надеюсь, то же самое в неовим.
Toothrot
3
@ Лавренс Я могу ошибаться, но я думаю, что neovim не реализует эту +clientserverфункцию ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Если это так, возможно, этот плагин поможет вам: github.com/mhinz/neovim-remote
user9433424
Кажется, что это имеет тот же эффект, что и отправка ключей с помощью tmux, и зависит от знания того, в каком режиме находится сервер vim (пример предполагает нормальный режим). В идеале я бы хотел иметь возможность установить переменную напрямую.
Toothrot