3

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

4

3 回答 3

4

使用 vim 的功能可以做到这一点,但它与 tmux 没有任何关系。如果您使用的 vim 版本是使用该+clientserver选项编译的,那么有一种方法可以做到这一点。要检查,:version在 vim 中运行,然后查找+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

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

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

于 2015-06-16T17:10:52.560 回答
2

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

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

vim:1.0窗格选择器在哪里( vim- 会话名称,1- 窗口0索引, - 窗格索引)。

于 2020-07-31T14:35:45.783 回答
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

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

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

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

所以你可以跑

start_vim myFile.py 
于 2015-06-16T22:58:09.907 回答