You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vim 8如何向运行中的终端窗口发送缓冲区内容?

当然可以!Vim 8自带终端完全支持缓冲区内容发送

你完全不需要依赖外部插件,用Vim 8原生的终端功能就能把缓冲区内容发送到运行中的终端窗口(比如Python REPL)。下面是具体的操作步骤和实用技巧:

一、先启动目标终端会话

首先在Vim里打开运行Python REPL的终端窗口:

:terminal python

执行后会弹出一个新的终端缓冲区,里面就是熟悉的Python交互环境了。

二、几种发送内容的方法

1. 发送当前行到终端

把光标移到要发送的代码行,在普通模式下执行:

:call term_sendkeys(bufnr(''), getline('.') . "\n")
  • bufnr(''):获取当前终端缓冲区的编号(如果终端窗口是当前活动窗口的话)
  • getline('.'):读取光标所在行的内容
  • 加上"\n"是模拟按下回车,让终端执行这条命令

2. 发送选中的文本块(视觉模式)

进入视觉模式选中你要运行的代码块,然后执行:

:'<,'>call term_sendkeys(bufnr('@'), getline("'<", "'>")->join("\n") . "\n")
  • bufnr('@'):获取最近访问过的终端缓冲区编号,不用手动输入buf号更方便
  • getline("'<", "'>"):读取选中范围内的所有行
  • ->join("\n"):把多行内容拼接成带换行的字符串,保证格式正确

3. 发送整个缓冲区内容

如果想把当前编辑的整个文件都发送到终端执行,运行:

:call term_sendkeys(bufnr(''), join(getline(1, '$'), "\n") . "\n")

4. 配置快捷键简化操作

为了不用每次都敲长命令,你可以在~/.vimrc里添加快捷键映射:

" 发送当前行到终端
nnoremap <leader>ts :call term_sendkeys(bufnr(''), getline('.') . "\n")<CR>
" 发送选中的文本块到终端
vnoremap <leader>ts :'<,'>call term_sendkeys(bufnr('@'), getline("'<", "'>")->join("\n") . "\n")<CR>
" 发送整个缓冲区到终端
nnoremap <leader>tS :call term_sendkeys(bufnr(''), join(getline(1, '$'), "\n") . "\n")<CR>

默认<leader>是反斜杠\,以后按\ts就能快速发送当前行或选中内容,\tS发送整个缓冲区,效率高很多。

小提示

  • 用:ls命令可以查看所有缓冲区,终端缓冲区的名称一般是term://*开头,如果你有多个终端会话,可以用bufnr('term://*python*')这样的方式精准匹配Python REPL的终端,比如:
    :call term_sendkeys(bufnr('term://*python*'), getline('.') . "\n")
    
  • 确保终端处于可输入状态(没有被暂停),否则发送的内容可能不会立即执行。

内容的提问来源于stack exchange,提问作者Stagrovin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:10:47