Действительно ли возможно выполнить сценарий VIM в неинтерактивном режиме?

Один (по общему признанию не прекрасный) путь состоит в том, чтобы добавить результат ps --no-headers -o comm $PPID к Вашему приглашению оболочки. Это скажет Вам название процесса, который породил Вашу оболочку. Если Вы будете во вложенном zsh, то скажет он "zsh". Если Вы будете в верхнем уровне zsh, то он считает "xterm" или "экран" или независимо от того, что Ваша оболочка работает в.

Чтобы сказать, являетесь ли Вы в ssh или su сессии, можно просто посмотреть на часть имени хоста и имени пользователя подсказки.

То, когда Вы выполняете вложенные экраны (который я не воображаю, является общей ситуацией), нет никакого способа, которым я могу думать, чтобы сказать, являетесь ли Вы в оболочке верхнего уровня вложенного экрана или оболочке верхнего уровня экрана верхнего уровня. Вы могли настроить экран, чтобы всегда отобразить строку состояния, которая заставит несколько строк состояния быть отображенными, если Вы будете на вложенных экранах.

8
31.05.2011, 20:18
4 ответа

Я никогда не использовал комаров, таким образом, трудно сказать что точно edit-pr ожидание должно быть сделано. Но от того, что Вы дали нам, Вы могли попытаться заменить ENV РЕДАКТОРА к пользовательскому сценарию оболочки, или возможно даже сценарию Python или чему-то.

EDITOR=/path/to/script.(sh|py) edit-pr <args>

Но как я сказал, я не знаю, какие редактирования это хочет, или что потребности быть сделанным в редакторе. Возможно, если бы Вы дали нам пример того, что Вы хотели бы автоматизировать?

3
27.01.2020, 20:08
  • 1
    Команда комаров была просто примером. Я искал общее решение, и я думаю, что Ваш ответ является способом пойти.Спасибо! –  Matt Pfefferle 01.06.2011, 20:40

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

Команды Vim могут также быть указаны в файле, который выполняется с помощью -s опция:

    vim -s commands.txt file

Пример:

    echo 'gg=G' > indent.txt
    echo ':wq' >> indent.txt
    vim -s indent.txt file

Это будет использовать Vim, чтобы расположить содержание с отступом файла, сохранить и выход.

20
27.01.2020, 20:08

Команды Vim могут быть указаны на командной строке, когда Вы запускаете программу как это:

vim file.txt "+:s/foo/bar/g"

Можно продолжать добавлять команды путем добавления "+[cmd]" аргументы. Можно или закончить там, и редактор будет открывать, выполнять те команды и ожидать или Вы, или можно добавить a "+:wq" сохранить и закрыть файл.

Вы могли также записать сценарий с помощью vimscript синтаксис и или перенести его в функцию для вызова, когда файл открывается или в отдельный сценарий, чтобы импортировать и относиться к буферу с помощью синтаксиса выше.

13
27.01.2020, 20:08

Для выполнения VIM в не интерактивном режиме вы можете использовать либо + {Command} / -C {command} или -S -S -S -S -S, который позволит вам выполнить команды VIM после прочтения первого файла.

Проверьте несколько примеров ниже.

Простой стандартный вход и вывод с помощью труб может быть достигнут с помощью команды:

$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat

для редактирования одного файла и сохранить изменения в другой:

$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'

для редактирования файла на месте, вы можете использовать -S { Scriptin} Итак, файл сценария прочитан, в примере:

$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file

, чтобы разбирать файл и отправить его на вывод трубопровода, вы можете попробовать следующее:

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+%print' '+:q!' /dev/stdin | cat

или:

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+:wq! /dev/stdout' /dev/stdin | cat

см. Подробнее: Редактировать файлы не интерактивно (например, в трубопроводе)? в Vim Se

5
27.01.2020, 20:08

Теги

Похожие вопросы