从vim执行bash脚本


21

我使用vim进行bash脚本编写。有时候我不想创建一个新文件,使其可执行,执行然后删除。我的意思是仅将使用一次的脚本。

例如,我打开vim并输入以下内容:

#!/bin/bash

ll | while read line
do
    echo $line
done

我没有保存该文件,只是使用vim来简化bash脚本编写。我知道我可以通过!vim 执行bash命令。但是如何执行缓冲区中的所有内容呢?


4
您知道可以使用Vim编辑当前命令行<C-x><C-e>并在写入时执行它,对吗?
romainl

如果使用此选项运行bash set -o vi,则可以Esc-v在vi中单击以编辑命令行。然后Esc-:wq执行。
roblogic

Answers:


35

在stack-overflow上写了一个相当广泛的答案。基本思想是,由于write命令是关于而不是保存的,因此您可以将缓冲区中的文本写入外部程序,例如python或bash。对于您的情况,您可能想要执行以下操作:

:w !bash

要么

:w !sh

这些命令从字面上看只是将缓冲区中的文本直接写到您使用指定的程序中!,这很方便,因为这样就不需要保存文件。当然,您也可以执行以下操作:

:w | !bash %

它会保存您的文件,然后将其作为bash脚本运行。您可以选择对您更有意义的一种。


有没有办法以这种方式为选项提供参数?我尝试过:w !bash -a test但得到“无法执行二进制文件”
St.Antario

@ St.Antario嗯。我敢肯定一定有办法,但是我的bash非常生锈(我主要使用Windows)。当我用空test文件在cygwin中尝试时,它对我来说运行良好。该命令应该做什么,应该test包含什么?
DJMcMayhem

我的实际情况非常复杂,所以让它只打印传入的参数即可。顺便说一句,您要指的是什么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密钥的新
Macbook,

1
新的MacBook没有Esc钥匙!那么他们如何使用Vim?
Hubro

1
现在,我已经尝试过了,新的Macbook触摸栏whaty 在终端中运行Vim时确实显示了一个Esc按键。
roblogic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.