如何在 Tmux 的另一个窗格中打开文件

how to open file in another pane in Tmux

我是 tmux 的新手,将 window 分成 3 个窗格,左半部分(主窗格)、右上四分之一和右下四分之一。是否有可能我使用命令在左侧主窗格中打开一个可编辑文件,比如 vim myFile.py,并且 myFile.py 将在另一个窗格中打开,比如右上窗格,这样我就可以随时编辑文件在右上窗格中,并将输入命令保留在左主窗格中?

这可以使用 vim 的功能来完成,但它与 tmux 具体无关。如果您使用的 vim 版本是使用 +clientserver 选项编译的,那么有一种方法可以做到这一点。要检查,运行 :version in vim,然后查找 +clientserver。 vim 的客户端服务器功能取决于 X11,因此如果您没有看到它,安装 gvim 可能会有所帮助。有关 X11 依赖项的更多信息,请参阅 https://unix.stackexchange.com/a/23601

现在介绍如何使用它。首先,根据需要设置你的 tmux 面板。在您希望成为专用编辑器的窗格中,以下命令将创建一个 vim "server."

vim --servername tmuxEditor

现在,您可以从另一个窗格运行

vim --servername tmuxEditor --remote files...

编辑器将打开指定的文件。其他有用的命令是

vim --servername tmuxEditor --remote-tab files...
vim --servername tmuxEditor --remote-send keys

第一个在单独的选项卡中打开指定的文件,第二个将指定的键序列发送到服务器。

有关 vim 的客户端服务器功能的更多信息,请参阅 vim 中的 http://vimdoc.sourceforge.net/htmldoc/remote.html 或 运行 :help remote

TL;DR:您可以使用 tmux 在当前窗格以外的窗格中打开命令,但 dpk2442 的解决方案使用 vim 的 client/server 功能可能更干净。


一个选项是在右上角的窗格中设置 remain-on-exit 选项,然后使用 respawn-pane 命令在窗格中启动 vim

假设右上窗格的窗格标识符是 0:0.1(会话 0,window 0,窗格 1;您需要根据您的设置调整它)。您可以使用

设置 remain-on-exit 选项
tmux set-option -t 0:0 remain-on-exit on

(这为 window 中的任何窗格设置选项,而不仅仅是一个特定的窗格。)

然后,使用

tmux respawn-command -k -t 0:0.1 vim myFile.py

-t 选项的参数指定的窗格中打开 vim-k` 确保窗格中已经 运行 的任何命令都被终止;如果您知道当前 运行 该窗格中没有任何内容,则可以省略它。

给出命令的长度,您可能需要定义一个 shell 函数来在所需的窗格中启动 vim

start_vim () {
    tmux respawn-command -k -t 0:0.1 vim ""
}

所以你可以 运行

start_vim myFile.py 

以下是如何在现有 Vim 实例中打开文件(如果它是 运行 在 tmux 会话中):

tmux send-keys -t vim:1.0 Escape ":tabnew path/to/your_file.txt" C-m

其中 vim:1.0 是窗格选择器(vim - 会话名称,1 - window 的索引,0 - 窗格的索引)。