Виконати bash-скрипт від vim


21

Я використовую vim для сценаріїв. річ у тому, що іноді я не хочу створювати новий файл, робити його виконуваним, виконувати його і потім видаляти. Я маю на увазі сценарії, які будуть використані лише один раз.

Наприклад, я відкриваю vim і набираю цей текст:

#!/bin/bash

ll | while read line
do
    echo $line
done

Я не зберігав цей файл, я просто використовую vim для спрощення баш-скриптів. Я знаю, що можу виконати команду bash через !in vim. Але як бути з виконанням всього, що є в буфері?


4
Ви знаєте, що можете редагувати поточний командний рядок у Vim за допомогою <C-x><C-e>та виконувати його під час запису, правда?
romainl

Якщо ви запускаєте bash з цією опцією set -o vi, ви можете натиснути Esc-vдля редагування командного рядка in vi. Потім Esc-:wqвиконати.
roblogic

Відповіді:


35

Я написав доволі обширну відповідь про це на стек-переповнення . Основна ідея полягає в тому , що , так як команда записи про час написання НЕ економити , ви можете написати текст в буфер у зовнішню програму, наприклад, пітона або Баш. У вашому випадку ви хочете зробити щось на кшталт:

:w !bash

або

:w !sh

Ці команди буквально просто записують текст у свій буфер безпосередньо в програму, яку ви вказали !, що зручно, оскільки тоді вам не потрібно зберігати файл. Звичайно, ви також можете зробити щось на кшталт:

:w | !bash %

який зберігає ваш файл, а потім запускає його як скрипт bash. Ви можете вибрати той, хто має більше сенсу для вас.


Чи є спосіб надати параметри аргументом таким чином? Я спробував, :w !bash -a testале отримав "не вдається виконати двійковий файл"
St.Antario

@ St.Antario Хм. Я впевнений, що має бути якийсь спосіб, але мій баш досить іржавий (я в основному використовую вікна). Коли я спробую це у cygwin з порожнім testфайлом, у мене це працює добре. Що команда повинна виконувати і що повинна testмістити?
DJMcMayhem

Мій фактичний випадок досить складний, тому нехай він просто надрукує переданий аргумент. BTW, що ви маєте на увазі, що має test містити? testце лише аргумент -a.
Санкт-Антаріо

1
@ St.Antario О, добре, бачу. Я думав, testце повинен бути файл. Я не дуже впевнений, що робити. Якщо ви намагаєтеся щось складне, можливо, краще просто зберегти його у файлі. Можливо, варто поцікавитись окремим питанням, щоб ви могли надати більше деталей. Можливо, це також буде гарним питанням для Unix та Linux
DJMcMayhem

4

Сценарій: ви працюєте в bash shell. По-перше, переконайтесь, що локальний режим редагування є vi:

$ set -o vi

Тепер, коли ви виявите, що працюєте над довгою командою на зразок наступної, натисніть Esc+ v.

$ fjhwfq this is my long command

Це завантажить вашу команду у тимчасовий viсеанс. Тепер ви можете редагувати його за своїм бажанням і навіть додати ще одну команду ...

fjhwfq some long command
ls -l

Після завершення редагування введіть Esc :wqкоманду (и), наприклад:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
може не спрацювати, якщо у вас нова книга без Escключа;)
roblogic

1
У нових MacBooks немає Escключів !? Як вони можуть використовувати Vim тоді?
Хубро

1
Тепер я спробував це, новий сенсорний панель macbook, який дійсно показує Escключ при запуску Vim в терміналі.
roblogic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.