这个问题与Vim: execute current file?类似,但我没有执行当前文件,而只想执行当前行。
这可能吗?
更新:理想情况下,我正在寻找可在外壳中产生副作用的解决方案。 例如,假设我有以下行:
alias foo=bar
在vim中运行命令后,如果我使用:sh
启动shell,则别名foo
可用,但如果我使用vim
退出:q
,则别名不再可用。
答案 0 :(得分:88)
当然,您可以将当前文件的任何内容“写”到另一个程序的标准输入中:
:.w !bash
此处.
(w之前的部分)指的是您正在编写的行的范围,.
仅是当前行。然后使用!bash
将这些行写入bash。
答案 1 :(得分:28)
我一直这样做:
:exec '!'.getline('.')
您甚至可以在.vimrc中创建映射:
nmap <F6> :exec '!'.getline('.')
Daan的回答也有效,我给了他一个upvote。
答案 2 :(得分:13)
将光标移动到该行,在正常模式下按:
!!bash<cr>
答案 3 :(得分:5)
如果我可以评论,这可能是评论。
关于vim到外部命令的当前缓冲区的重定向/管道线, 在Daan Bakker的鼓舞人心的答案中,我写道,我在这里回答 (https://stackoverflow.com/a/40002312/3625404),关于一个问题 运行python脚本(当前缓冲区)。
除了运行整个缓冲区外,还演示了如何通过外部命令运行一系列行。 为了节省时间,我只需将其复制到下面。
#####################
在vim中,您可以简单地将当前缓冲区的任何范围重定向到外部命令(无论是bash,python还是您自己的python脚本)。
# redirect whole buffer to python
:%w !python
假设您当前的缓冲区包含两行,如下所示
import numpy as np
print np.arange(12).reshape(3,4)
然后:%w !python
将运行它,是否保存。并打印下面的东西
终端,
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
当然,你可以做一些持久的事情,例如一些键盘图。
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
第一个运行当前行,第二个运行视觉选择,通过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
不低于一,关于正常命令,而不是cmdline一。
:h command-range
的启发
答案 4 :(得分:1)
将此映射添加到您的.vimrc文件中,
nmap <leader>E yyp:.!csh<CR>
说明:
yy
取消当前行p
在下面粘贴带圆圈的行(光标移至下一行):.!csh<CR>
执行此新粘贴的行(使用csh
)。该行的输出将替换当前行,因此在执行该行之前先将其拉下并粘贴到下面。答案 5 :(得分:0)
如果我在vi / vim中的一行文本上有这样的命令,则
ls -la
将光标置于行上的任何位置并执行 “:。!!”然后按回车键。
那是:冒号点bang bang返回
这将从vi / vim中在当前外壳的该行中执行文本,并将输出插入文本文件中。
我在想你在问什么?就像魔术。
答案 6 :(得分:0)
考虑以下命令在终端上运行,
seq 0 10 | xargs printf "%02x "
预期输出为
00 01 02 03 04 05 06 07 08 09 0a
请考虑将以上命令写入文件中。要执行此命令,将各自的输出返回到该文件中,您可以将此映射添加到您的.vimrc中,
nmap <leader>E :exec 'r!'.getline('.')<CR>
请注意,要执行上述代码行,您需要为'%
'添加转义字符,如下所示,
seq 0 10 | xargs printf "\%02x "
在文件中转到此行,然后按<leader>E
。就我而言,<leader>
被映射到,
,因此我将按,E