Как перенаправить вывод vim на терминал? - PullRequest
0 голосов
/ 11 января 2019

В настоящее время я пишу небольшой скрипт bash для создания предварительно заполненного файла в определенном месте. Для этого мой bash-скрипт вызывает vim и выполняет vim-скрипт. В этом скрипте vim я хочу спросить пользователя, является ли место, где будет сохранен созданный файл, правильным. Затем пользователь вводит да или нет. Для этого я использую этот набор команд:

call inputsave()
let name = input('Is it the correct location ? y/n')
call inputrestore()

эта функция ввода работает нормально, когда я нахожусь в gvim или vim. Но из скрипта ничего не отображается, это терминал, в котором я запустил свой bash-скрипт.

Есть ли способ перенаправить выходы на мой терминал?

Я нашел :redir > {file}, но это, очевидно, перенаправляет все выходные данные vim в файл, который не является интерактивным.

Мне также удалось отобразить что-то в терминале, используя это:

let tmp = "!echo what I want to display"
execute tmp
unlet tmp

но опять же это только для отображения чего-то. Я не смогу ввести ввод

Мой bash-скрипт:

#!/bin/bash
touch tmp.txt #file used to pass argument to vim
echo "$1" >> tmp.txt #append argument to the end of the txt file
vim -e tmp.txt <create_new_file.vim #launch vim and execute the scrip inside create_new_file.vim
rm tmp.txt
echo "new file created"

create_new_file.vim в основном просто вызывает мою функцию CreateFile(_name), расположенную в моем .vimrc. Это та функция, которая вызывает inputsave(), input() и inputrestore().

1 Ответ

0 голосов
/ 11 января 2019

Вы вводите команды непосредственно в Vim через стандартный ввод; таким образом, Vim не имеет возможности взаимодействовать с вами (пользователем), и такое использование Vim является нетипичным и поэтому не рекомендуется.

Альтернативы

Если вам действительно не нужны специальные возможности Vim, вам, вероятно, лучше использовать неинтерактивные инструменты , такие как sed, awk или Perl / Python / Ruby / ваши любимые сценарии язык здесь .

Тем не менее, вы можете использовать Vim неинтерактивно:

Полная автоматизация

Для более сложной обработки, включающей несколько окон, и реальной автоматизации Vim (когда вы можете взаимодействовать с пользователем или оставить Vim включенным, чтобы позволить пользователю вступить во владение), используйте:

vim -N -u NONE -n -c "set nomore" -S "create_new_file.vim" tmp.txt

Это должно позволить вам взаимодействовать с Vim, следуя сценарию команд.

Вот сводка использованных (или полезных) аргументов:

-N -u NONE        Do not load vimrc and plugins, alternatively:
--noplugin        Do not load plugins.
-n                No swapfile.
-i NONE           Ignore the |viminfo| file (to avoid disturbing the
                  user's settings).
-es               Ex mode + silent batch mode -s-ex
                  Attention: Must be given in that order!
-S ...            Source script.
-c 'set nomore'   Suppress the more-prompt when the screen is filled
                  with messages or output to avoid blocking.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...