我是tmux的新手,将窗口分成3个窗格,左半部分(主窗格),右上角和右下四分之一。是否有可能我使用 command 在左侧主窗格中打开一个可编辑的文件,比如vim myFile.py
,myFile.py 将在另一个窗格中打开,比如右上角窗格,这样我就可以始终在右上角窗格中编辑文件并将输入命令保留在左主窗格中?
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
第一个在单独的选项卡中打开指定的文件,第二个将指定的键序列发送到服务器。
有关 vim 客户端服务器功能的更多信息,请参阅 http://vimdoc.sourceforge.net/htmldoc/remote.html 或在 vim 中运行:help remote
。
以下是在现有 Vim 实例上打开文件的方法(如果它在 tmux 会话中运行):
tmux send-keys -t vim:1.0 Escape ":tabnew path/to/your_file.txt" C-m
其中vim:1.0
是窗格选择器(vim
- 会话名称,1
- 窗口索引,0
- 窗格索引)。
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