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

4
我是新手,正在学习tmux。我将一个窗口分为3个面板,左半部分(主面板)、右上方四分之一和右下方四分之一。我想知道是否可以使用命令在左侧主面板打开可编辑文件,例如vim myFile.py,并在另一个面板中(例如上右面板)打开myFile.py文件,以便我始终可以在上右面板中编辑文件,并在左侧主面板中输入命令?

所以你想在左上方的窗格中键入 vim myFile.py,但实际上将 vim 打开在右上方的窗格中,使 shell 在左上方的窗格中继续运行? - chepner
是的,但看起来似乎不可能... - Emerson Xu
3个回答

5
这可以使用vim的功能完成,但与tmux无关。如果您使用的vim版本编译时加入了+clientserver选项,则有一种方法可以实现此目的。要检查,请在vim中运行:version并查找+clientserver。vim的客户端服务器功能依赖于X11,因此如果您没有看到它,请尝试安装gvim。有关X11依赖性的更多信息,请参见https://unix.stackexchange.com/a/23601

现在我们来看如何使用它。首先,设置您想要的tmux窗格。在您希望成为专用编辑器的窗格中,以下命令将创建一个vim“服务器”。

vim --servername tmuxEditor

现在你可以从另一个窗格运行。
vim --servername tmuxEditor --remote files...

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

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

第一个命令会在单独的选项卡中打开指定的文件,第二个命令将指定的按键序列发送给服务器。
请参阅http://vimdoc.sourceforge.net/htmldoc/remote.html或在vim中运行:help remote了解有关vim客户端服务器功能的更多信息。

非常好。我只想补充一点,用于创建 vim 服务器运行的面板的任何命令也可以启动 vim 作为初始进程,而不是默认的 shell。 - chepner

3

以下是如何在已经运行在tmux会话中的Vim实例中打开文件:

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

vim:1.0 是面板选择器 (vim - 会话名称,1 - 窗口索引,0 - 面板索引)。


你如何切换到已打开文件的窗格? - mroavi
2
@mroavi 你需要这样做:tmux select-window -t vim:1.0 \; select-pane -t vim:1.0。如果你只有一个窗口,可以跳过 select-window - LazyCat01

1
TL;DR:您可以使用 tmux 在当前窗格之外打开命令,但 dpk2442 的解决方案使用 vim 的客户端/服务器功能可能更清晰一些。
一种选择是在右上方窗格设置"remain-on-exit"选项,然后使用"respawn-pane"命令在该窗格中启动"vim"。例如,假设右上角窗格的标识符为"0:0.1"(会话0,窗口0,窗格1;您需要根据自己的设置进行调整)。您可以使用以下命令来设置"remain-on-exit"选项:
tmux set-option -t 0:0 remain-on-exit on

这将为窗口中的任何一个面板设置选项,而不仅仅是一个特定的面板。

然后使用

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 "$1"
}

所以你只需要运行。
start_vim myFile.py 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接