如何发送键以在 tmux 中退出滚动模式?

Gil*_*ead 7 tmux

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

map <F5> :silent !tmux send-keys -t 0:0 C-m "python %" C-m<cr>
Run Code Online (Sandbox Code Playgroud)

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

如何将密钥发送到 tmux 窗口,使其脱离滚动模式?(我希望它在输出时滚动)

注意:我通常按 Esc 退出滚动模式,但我不知道如何使用tmux send-keys. 我尝试发送,C-[但没有奏效。

Tho*_*hor 4

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

tmux send-keys -t 0:0 $'\e'
Run Code Online (Sandbox Code Playgroud)

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

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'"python"$'\n'<CR>
Run Code Online (Sandbox Code Playgroud)

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

map  <F5> :silent !tmux send-keys -t 0:0 $'\e'$'\n'"python"$'\n'<CR>
Run Code Online (Sandbox Code Playgroud)