如何在 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
- 窗格的索引)。
我是 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
- 窗格的索引)。