我可以向已经打开的 tmux 会话发送命令吗?

Can I send commands to an already open tmux session?

几个月前我开始使用 vim,我非常喜欢它。我主要在 vim 窗格上编写代码(在 OS X 上使用 iTerm2),并在另一个窗格的屏幕会话中保留一个 ipython 控制台 运行。我已经设法找到一种方法来从 vim 发送代码行甚至整个脚本以在 ipython 控制台上执行,但我不知道 tmux 是否可行。其他人都告诉我从屏幕更改为 tmux(根据 tmux 的功能,这实际上似乎是个好建议)但在迈出这一步之前,我想确保这是可能的。

是的,可以向已经打开的 tmux 会话发送命令。 我建议您使用此插件 vim-tmux-runner . you can see this Vim & Tmux 杰克富兰克林

的插件演示视频

基于 byaruhaf 的 answer/tip,我已经设法将命令发送到已经打开的 tmux 会话。我想我会在这里添加一个小的操作方法,以便其他人都可以利用它。

我安装了 vim-tmux-runner 并按以下方式编辑了我的 .vimrc 文件:

let g:vtr_filteype_runner_overrides = {
    \ 'python': '%run {file}' }
augroup Pythonic
    autocmd!
    autocmd FileType python nmap <leader>l :VtrSendFile<CR>
    autocmd Filetype python xmap <leader>l :VtrSendLinesToRunner<CR>
augroup END

让我解释一下。第一个 autocmd 行允许一个人在正常模式下点击 <leader>l 并让 vim-tmux-运行ner 发送 '%run {filename}' 到一个 tmux 会话,其中一个 ipython 会话是 运行ning(这是我的工作流程)。请注意,顶部的 'let' 行是通过 VtrSendFile 将命令 运行 设置为 '%run' 的行。 (在同一行,请注意 "filteype" 不是拼写错误,它是这样工作的,而不是 "filetype")。

第二个 autocmd 行允许 select 中的几行 vim 并且在视觉模式下点击 <leader>l 并将这些行发送到 tmux ipython 会话。 由于在 ipython 中粘贴代码可能很棘手,在这种情况下还有其他可能有用的选项,只需查看 vim-tmux-运行ner 上的文档以获取更多信息。

感谢 byaruhaf 提供的重要提示。