Сохранение возвращаемого значения функции execute в переменную vimscript - PullRequest
0 голосов
/ 25 октября 2018

В vimscript я не могу найти способ сохранить возвращаемое значение функции execute в переменную.

Я хотел бы сделать следующее:

let s = execute(":!echo dani")
echo s

Этодолжен вернуть: dani

Vim не принимает это.В моей настройке (с использованием vim-aviation и других плагинов пользовательского интерфейса) экран блокирует весь контент, и после нажатия клавиши он возвращается в нормальное состояние.

Возможно ли в vimscript сохранить в переменную возврат либоВызов функции или, наоборот, возврат функции execute?

Спасибо, SO

1 Ответ

0 голосов
/ 25 октября 2018

execute() - современная альтернатива :redir;он захватывает весь вывод выполненной команды.Давайте посмотрим поближе:

:let s = execute(":! echo dani") | echo strtrans(s)
^@:! echo dani^M^@dani^M^@

Как вы можете видеть, она захватывает всю команду и ее результат.Если вы используете обычный :echo, символы новой строки и ^@ затеняют полный вывод (вы увидите это лучше с :echomsg, который меньше интерпретирует специальные символы).

Я думаю, что вы на самом делеwant это просто вывод выполненной внешней команды (здесь: echo).Вы можете использовать system() вместо :! для этого:

:let s = system('echo dani') | echo strtrans(s)
dani^@

Этот завершающий символ новой строки обычно удаляется следующим образом:

:let s = substitute(system('echo dani'), '\n\+$', '', '') | echo strtrans(s)
dani
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...