Розмова з vim ззовні


12

Чи можу я змінити змінну в екземплярі vim з іншої оболонки (без надсилання ключів через tmux)?

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

Можливо, я міг би vim шукати існування чи відсутність певних файлів (використовуючи файли як булеві змінні)? Але це здається трохи брудним; сподіваємось, є кращий шлях.

Відповіді:


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 не працює у звичайному режимі, попередня команда не працюватиме, як очікувалося. Можуть бути і простіші, але ось два можливих рішення:

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")'

Дякую! Я бачу, що ця функція не зібрана, тому я перекомпілюю. Сподіваємось, те саме в неовимі.
Зубник

3
@Lawrence Я можу помилитися, але я думаю, що neovim не реалізує цю +clientserverфункцію ( github.com/tpope/vim-dispatch/isissue/163#issuecomment-175383047 ). Якщо це так, можливо, цей плагін вам допоможе: github.com/mhinz/neovim-remote
user9433424

Здається, що це має такий же ефект, як і надсилання ключів з tmux, і залежить від того, чи знаєте, в якому режимі знаходиться сервер vim (приклад передбачає звичайний режим). В ідеалі я хотів би мати можливість встановити змінну безпосередньо.
Зубник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.