从vim执行bash中的当前行

这个问题类似于Vim:执行当前文件? 而不是执行当前文件,我只想执行当前行。

这可能吗?

更新:理想情况下,我正在寻找解决scheme,可以在shell有副作用。 例如,假设我有以下行:

alias foo=bar 

在vim中运行命令之后,如果我使用:sh启动一个shell,别名foo可用,但是如果我使用:q退出vim ,那么别名不再可用。

当然,您可以将当前文件的任何内容“写入”另一个程序的标准input:

 :.w !bash 

这里 (w之前的部分)是指你正在写的行的范围. 只是当前的路线。 然后你使用!bash把这些行写成bash。

我一直在做这样的事情:

 :exec '!'.getline('.') 

你甚至可以在.vimrc中创build一个映射:

 nmap <F6> :exec '!'.getline('.') 

大安的答案也有效,我给了他一个赞成票。

将光标移动到该行,并在正常模式下按下:

 !!bash<cr> 

如果我能评论,这可能是一个评论。

关于vim中当前缓冲区的redirect/pipe道线到外部命令,大哥巴克尔的很好的回答启发,我写了我在这里回答( https://stackoverflow.com/a/40002312/3625404 ),关于运行python脚本的问题当前缓冲区)。

除了运行整个缓冲区之外,还演示了如何通过外部命令运行一系列的行。 为了节省时间,我只是复制下面。

 ##################### 

在vim中,您可以简单地将当前缓冲区的任何范围redirect到外部命令(无论是bash,python还是自己的python脚本)。

 # redirect whole buffer to python :%w !python 

假设你的当前缓冲区包含如下两行,

 import numpy as np print np.arange(12).reshape(3,4) 

那么:%w !python会运行它,不pipe它是否保存。 并在terminal上打印下面的内容

 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 

当然,你可以做一些持久的东西,例如一些键盘映射。

 nnoremap <F8> :.w !python<CR> vnoremap <F8> :w !python<CR> 

第一个运行当前行,第二个运行视觉select,通过python解释器。

 #!! be careful, in vim ':w!python' and ':.w !python' are very different, the first write (create or overwrite) a file named 'python' with contents of current buffer, the second redirect the selected cmdline range (here dot ., which mean current line) to external command (here 'python'). 

对于cmdline范围,请参阅

 :h cmdline-ranges 

不低于一个,其中涉及正常的命令,而不是一个命令。

 :h command-range 

启发https://stackoverflow.com/a/19883963/3625404