这个问题类似于Vim:执行当前文件? 但我没有执行当前文件,而只想执行当前行.
这可能吗?
更新:理想情况下,我正在寻找可在外壳中产生副作用的解决方案.例如,假设我有以下行:
alias foo=bar
Run Code Online (Sandbox Code Playgroud)
在vim中运行命令后,如果我启动了一个shell :sh,别名foo可用,但如果我退出vim使用:q,则别名不再可用.
Daa*_*ker 99
当然,您可以将当前文件的任何内容"写入"另一个程序的标准输入:
:.w !bash
Run Code Online (Sandbox Code Playgroud)
这里.(w之前的部分)指的是你正在写的行的范围,并且.只是当前行.然后你用!bash这些行写入bash.
cfo*_*ish 31
我一直这样做:
:exec '!'.getline('.')
Run Code Online (Sandbox Code Playgroud)
您甚至可以在.vimrc中创建映射:
nmap <F6> :exec '!'.getline('.')
Run Code Online (Sandbox Code Playgroud)
Daan的回答也有效,我给了他一个upvote.
Ken*_*ent 15
将光标移动到该行,并在正常模式下按:
!!bash<cr>
Run Code Online (Sandbox Code Playgroud)
如果可以发表评论,这可能是评论。
关于vim到外部命令的当前缓冲区的重定向/管道线,灵感来自Daan Bakker的出色答案,我在这里写了我的答案(/sf/answers/2800161871/),关于运行python脚本的问题(当前缓冲区)。
除了运行整个缓冲区之外,还演示了如何通过外部命令运行一定范围的行。为了节省时间,我只在下面复制它。
#####################
Run Code Online (Sandbox Code Playgroud)
在vim中,您可以简单地将当前缓冲区的任何范围重定向到外部命令(无论是bash,python还是您自己的python脚本)。
# redirect whole buffer to python
:%w !python
Run Code Online (Sandbox Code Playgroud)
假设您当前的缓冲区包含两行,如下所示,
import numpy as np
print np.arange(12).reshape(3,4)
Run Code Online (Sandbox Code Playgroud)
然后:%w !python将其运行(无论是否已保存)。并在您的终端上打印以下内容,
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Run Code Online (Sandbox Code Playgroud)
当然,您可以使某些内容持久化,例如,一些键盘映射。
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
Run Code Online (Sandbox Code Playgroud)
第一个运行当前行,第二个运行可视化选择,通过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').
Run Code Online (Sandbox Code Playgroud)
有关cmdline范围,请参见
:h cmdline-ranges
Run Code Online (Sandbox Code Playgroud)
不低于1,这与正常命令有关,而不是命令1。
:h command-range
Run Code Online (Sandbox Code Playgroud)
将此映射添加到您的 .vimrc 文件中,
nmap <leader>E yyp:.!csh<CR>
Run Code Online (Sandbox Code Playgroud)
解释:
yy
撤回当前行p
粘贴下面拉出的行(光标转到下一行):.!csh<CR>csh就地
执行(使用)这个新粘贴的行。该行的输出替换了当前行,因此在执行之前该行被拉出并粘贴到下面。