例如,我打开vim并输入以下内容:
#!/bin/bash
ll | while read line
do
echo $line
done
我没有保存该文件,我只是使用vim来简化bash脚本编写。我知道我可以通过vim中的
!
执行bash命令。但是如何执行缓冲区中的所有内容呢?#1 楼
我在堆栈溢出方面写了一个相当广泛的答案。基本思想是,由于write命令是关于不保存而写的,因此您可以将缓冲区中的文本写入外部程序,例如python或bash。对于您的情况,您可能想执行以下操作::w !bash
或
:w !sh
这些命令从字面上看只需将缓冲区中的文本直接写到使用
!
指定的程序中,这很方便,因为这样就不需要保存文件。当然,您也可以执行以下操作::w | !bash %
,它可以保存文件,然后将其作为bash脚本运行。您可以选择对您更有意义的一种。
评论
有没有办法以这种方式为选项提供参数?我尝试了:w!bash -a测试,但得到“无法执行二进制文件”
–圣安东尼奥
16年11月8日在17:23
@ St.Antario嗯。我敢肯定一定有办法,但是我的bash非常生锈(我主要使用Windows)。当我在cygwin中尝试使用空的测试文件进行测试时,它对我来说运行良好。该命令应该执行什么操作,并且测试应包含哪些内容?
–詹姆斯
16年11月8日在17:27
我的实际情况很复杂,所以让它只打印传入的参数。顺便说一句,您要测试的内容是什么意思?测试只是-a的一个参数。
–圣安东尼奥
16年8月8日在17:48
@ St.Antario哦,知道了。我认为测试应该是一个文件。我不太确定该怎么办。如果您要尝试复杂的操作,最好将其保存在文件中。作为一个单独的问题可能值得提出,因此您可以提供更多详细信息。对于Unix和Linux,这可能也是一个好问题
–詹姆斯
16年11月8日在18:16
#2 楼
场景:您正在使用bash shell。首先,确保本地编辑模式为vi:$ set -o vi
现在,当您发现自己正在执行如下所示的长命令时,请按Esc + v。 />
$ fjhwfq this is my long command
这会将您的命令加载到临时
vi
会话中。现在,您可以根据需要进行编辑,甚至可以添加其他命令... fjhwfq some long command
ls -l
完成编辑后,键入Esc
:wq
和命令(s)将被执行,例如:$ 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
评论
如果您有一台没有Esc键的新Macbook,则可能无法工作;)
–roblogic
16-11-10 3:00
新的MacBook没有Esc键!那么他们如何使用Vim?
–Hubro
17年5月19日在9:02
现在我已经尝试过了,新的Macbook触摸栏在终端中运行Vim时确实显示了Esc键。
–roblogic
17年5月23日在3:25
同样,Esc不是返回正常模式的唯一方法。您也可以使用Ctrl-c或Ctrl- [。 vimhelp.org/insert.txt.html#i_CTRL-%5B
–托尼·切萨罗(Tony Cesaro)
20年8月9日在2:33
评论
您知道您可以使用如果使用此选项集-o vi运行bash,则可以按Esc-v在vi中编辑命令行。然后执行Esc-:wq。