Загрузите буфер vim в переменную ruby - PullRequest
0 голосов
/ 22 февраля 2011

Я ищу способ получить то, что было введено в vim, и загрузить его в переменную ruby.

Тип пользователя:

myProgram -m

Затем появляется Vim. Всякий раз, когда пользователь выходит из Vim, «myProgram» получает входные данные пользователя.

Я пытался что-то сделать (наивно)

message = `vim`

Однако я получаю «Vim: Предупреждение: вывод не на терминал»

Большое спасибо

Ответы [ 4 ]

2 голосов
/ 22 февраля 2011

Когда вы находитесь внутри vim, вы можете запустить :%!your_program, и ваша_программа будет вызываться с текущим буфером в качестве стандартного.

1 голос
/ 23 февраля 2011

Если вы можете работать с gVim или MacVim, вы можете использовать флаг -f:

-f or --nofork    Foreground: Don't fork when starting GUI

, что заставит ваш код Ruby приостанавливаться во время работы приложения (gvim или MacVim).

Захват содержимого редактора немного сложнее, но легко обрабатывается вашим кодом, предварительно создающим временный файл в виде заглушки и передающим его в Vim при его запуске. Отредактируйте, сохраните буфер, затем выйдите из редактора. Когда управление вернется в Ruby, снова откройте файл и прочитайте его содержимое в переменную.

Вы заметите, что это происходит в Linux, если вы установите для переменной EDITOR вашей среды значение vim и отредактируете командную строку или скажете SVN использовать ее для своей команды svn diff.

1 голос
/ 23 февраля 2011

Вам просто нужно записать ваши данные во временное имя файла, затем выполнить что-то вроде system(ENV["EDITOR"], tmpfile), затем прочитать tmpfile обратно. Я предлагаю использовать переменные окружения EDITOR или VISUAL, люди устанавливают их на предпочтительные редакторы для используемых программ (то есть, если кто-то предпочитает Emacs и даже не может выйти из Vim, он не запутается).

0 голосов
/ 22 февраля 2011

Вы должны посмотреть, как команды "visudo", "vipw" ... управляют этим (в linux).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...