如何发送键来打破 tmux 中的滚动模式?

如何发送键来打破 tmux 中的滚动模式?

我在 VIM 中有一个键映射,如下所示:

map <F5> :silent !tmux send-keys -t 0:0 C-m "python %" C-m<cr>

当我按 F5 时,vim 在 tmux 会话 0、窗口 0 中运行我当前的 Python 脚本。但是,如果窗口 0 当前处于滚动状态(即 Shift-PgUp 或鼠标滚动),tmux 将运行命令但不会滚动新输出。

如何向 tmux 窗口发送一个键以使其脱离滚动模式? (我希望它在输出时滚动)

笔记:我通常通过按 Esc 退出滚动模式,但我不知道如何使用 发送 Escape 键tmux send-keys。我尝试发送C-[,但没有成功。

答案1

您可以使用 ANSI-C 引用发送文字转义(和换行符)(还有更多相关内容)这里),例如将转义发送至0:0

tmux send-keys -t 0:0 $'\e'

对于您的映射,假设我理解正确,您可以执行以下操作:

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'"python"$'\n'<CR>

请注意,转义符始终会被发送,因此为了解决 shell 接收转义符的问题,您可以发送额外的换行符:

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'$'\n'"python"$'\n'<CR>

相关内容