gvim:将视觉选择的文本传递给命令行

Scr*_*ack 5 vim command-line

我使用gvim来存储我将执行的命令的配方,具体取决于输出.目前,我在gvim中选择文本并将命令粘贴到终端控制台中,但我敢打赌,我可以通过视觉选择的范围将其传递到命令行中以便执行.

DrA*_*rAl 18

假设您的意思是Vim命令行:

(如果您的意思是OS命令行,请参阅下文).

对于部分行(即没有行尾字符),您可以执行以下操作:

" Visually select lines, then:
y:<C-R>"<ENTER>
Run Code Online (Sandbox Code Playgroud)

哪里<C-R>意味着按Ctrl+ R.该y"猛拉"所选择的文本,则:进入命令模式,<C-R>"拉动的内容"(最后抽出的文本)登记到命令行和<ENTER>(显然)运行命令.


如果你想做直线的东西,它会有点复杂(因为命令行不喜欢^M命令中的s).我会在你的vimrc中推荐这样的东西:

function! RunCommands()
    exe getline('.')
endfunction
command -range RunCommands <line1>,<line2>call RunCommands()
vmap ,r :RunCommands<CR>
Run Code Online (Sandbox Code Playgroud)

选择行(重启vim后),然后按,r.


您可能会发现有用的另一种方法是复制所需的行,点击q:打开命令行窗口并将所需的行粘贴到那里,然后将光标移动到所需的行上并按下ENTER.这样做的好处是可以在按下之前编辑命令ENTER.它一次只能运行一个命令.

如果您的意思是(例如)Windows或Linux命令行:

使用我上面列出的功能,而不是:

exe getline('.')
Run Code Online (Sandbox Code Playgroud)

使用

call system(getline('.'))
Run Code Online (Sandbox Code Playgroud)

或者,如果你想看到结果:

echo system(getline('.'))
Run Code Online (Sandbox Code Playgroud)

要么

echomsg system(getline('.'))
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息:

:help :echo
:help :echomsg
:help :messages

:help :vmap
:help :command-range
:help :command
:help :function

:help c_CTRL-R
:help :exe
:help getline()
:help system()
Run Code Online (Sandbox Code Playgroud)