如何在tmux中重命名一个窗格?

225

如何在tmux中重命名窗格?

9个回答

363

重命名窗口

Ctrl-b ,

其中Ctrl-b是默认的前缀键。

或者,运行:

tmux rename-window <new name>

或者使用 Ctrl-b : rename-window <新窗口名称> 命令来重命名一个窗格。


重命名一个窗格

在较新的版本中,您可以使用以下命令重命名一个窗格:

tmux select-pane -T <title>

你可以键入 Ctrl-b : select-pane -T <pane_name> 来选择特定的面板。

另外,在~/.tmux.conf中添加以下两行代码,可以在相关面板的顶部查看面板标题并重新格式化标题。

set -g pane-border-status top

set -g pane-border-format " [ ###P #T ] "


当我重命名当前窗口时,我无法看到自己输入的内容,这是默认设置吗?还是因为我的配置有问题?尽管我认为我的配置并没有阻止 tmux 显示该内容。 - zyy
1
澄清一下,您可以重新命名一个窗格,当意外的二进制输出损坏它时就需要这样做。@Mapad的回答解决了这个问题。 - fuzzyTew
每当你输入ls时就会被还原的内容 - anilbey
4
@anilbey 我也是。解决方法是 set-option -g allow-rename off - joeytwiddle
这很有用,但它重命名的是窗口而不是面板。 - AtomHeartFather
它在bash上可以运行,但是在zsh上却不行,有什么想法吗? - A1m

60

是的,您可以重命名窗格名称,而不仅仅是在tmux版本>=2.3中重命名窗口名称。只需在shell中键入以下内容:

printf '\033]2;%s\033\\' 'title goes here'

如果你想显示面板名称,可能需要在你的 .tmux.conf 文件中添加以下内容:

# Enable names for panes
set -g pane-border-status top

您还可以自动分配一个名称:

set -g pane-border-format "#P: #{pane_current_command}"

1
有没有一种方法可以将命令的参数放入窗格边框格式中?哦,GitHub 上有一个相应的 问题 - konstunn
title length is 21 - Smart Manoj
我尝试了你的答案,它可以运行一小段时间但随后会自动重命名为我的主目录。我尝试了添加 setw -g automatic-rename off 但没有成功。 - Elijah Lynn

26

对于编写tmux脚本的人,有一个名为rename-window的命令可供使用,例如:

tmux rename-window -t <window> <newname>

1
在我的情况下,类似于这样:tmux rename-window -t 9 my-project - borracciaBlu
1
这是针对Windows的,不是窗格,对吧? - Elijah Lynn
1
不,它是为Linux设计的。 - DenLilleMand

14

如果您想在bash shell中轻松重命名窗格,这是我在.tmux.conf中的设置:

set -g default-command '                      \
function renamePane () {                      \
  read -p "Enter Pane Name: " pane_name;      \
  printf "\033]2;%s\033\\r:r" "${pane_name}"; \
};                                            \
export -f renamePane;                         \
bash -i'
set -g pane-border-status top
set -g pane-border-format "#{pane_index} #T #{pane_current_command}"
bind-key -T prefix R send-keys "renamePane" C-m

窗格会自动以它们的索引、机器名称和当前命令命名。

要更改机器名称,您可以运行<C-b>R,然后提示您输入新名称。

*仅在shell中才能重命名窗格。


1
一定要非常小心。如果我做错了,这会损坏我的tmux。即使我在任何dotfiles中都找不到renamePane函数,但在启动tmux时仍然会出现错误:“zsh:export:1:invalid option(s)”。重新启动解决了这个问题。 - ProfessorKaos64
抱歉,我还没有在zsh上测试过这个,只在bash shell上测试过。 - raman

5

您可以通过在tmux.conf中设置面板边框来调整面板标题,例如像这样:

###############
# pane border #
###############
set -g pane-border-status bottom
#colors for pane borders
setw -g pane-border-style fg=green,bg=black
setw -g pane-active-border-style fg=colour118,bg=black
setw -g automatic-rename off
setw -g pane-border-format ' #{pane_index} #{pane_title} : #{pane_current_path} '
# active pane normal, other shaded out​
setw -g window-style fg=colour28,bg=colour16
setw -g window-active-style fg=colour46,bg=colour16

pane_index、pane_title和pane_current_path是由tmux自身提供的变量。

在重新加载配置或启动新的tmux会话后,您可以像这样设置当前窗格的标题:

tmux select-pane -T "fancy pane title";
#or
tmux select-pane -t paneIndexInteger -T "fancy pane title";

如果所有窗格都有一些进程在运行,那么您无法使用命令行。此时,您也可以在按下前缀绑定键(默认为C-b)和冒号(:)之后输入命令,而无需在命令前加上“tmux”:

select-pane -T "fancy pane title"
#or:
select-pane -t paneIndexInteger -T "fancy pane title"

这对我大部分都有效,重命名也起作用,位置也不错。但是当我运行另一个命令时,它仍然会自动将窗格重命名为其他内容。我正在内部运行fish,可能与此有关。 - Elijah Lynn
我确实杀掉了整个 tmux 进程,以确保配置文件重新加载。仅仅重新加载它是不够的,因为即使我将其注释并重新加载后仍然可以看到窗格标题。 - Elijah Lynn
我在我的tmux.conf中定义了这个自定义键绑定,用于在按下Alt+P时重命名窗格标题,无论shell中运行的进程如何,它都可以正常工作: bind-key -n M-p command-prompt "set -p @custom_pane_title '%%'". 希望这有所帮助。 - FullStack Alex
谢谢,我添加了你的绑定,当我按下 alt + p 时,在底部栏中会出现一个 (set),可以接受文本输入,当我按下回车键后它就会消失,但什么也没有发生。我会继续尝试调整它。我想这一定是我的配置问题。 - Elijah Lynn

5

在编写脚本时,您可以使用 -n <窗口名称> 指定创建窗口的名称。例如:

# variable to store the session name
SESSION="my_session"

# set up session
tmux -2 new-session -d -s $SESSION

# create window; split into panes
tmux new-window -t $SESSION:0 -n 'My Window with a Name'

5

对我来说最简单的选择是重命名终端的标题。

请参见:https://superuser.com/questions/362227/how-to-change-the-title-of-the-mintty-window

在这个答案中,他们提到了修改PS1变量。注意:我的情况特殊,适用于cygwin。

TL;DR 将以下内容放入您的.bashrc文件:

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}

将以下代码添加到您的.tmux.conf文件中,或类似格式的配置文件中:

set -g pane-border-status bottom
set -g pane-border-format "#P #T #{pane_current_command}"

然后你可以在控制台中输入以下内容来更改面板的标题:
settitle titlename

2
我使用tmux作为后端,结合byobu使用。我想提供另一种方法:如果你开启了鼠标模式(对于我来说是Alt+F12),你可以右键点击面板并选择重命名。似乎只能重命名当前选定的面板。

enter image description here


1

要重命名窗格,请在tmux命令提示符中输入以下内容:

select-pane -T 'NEW PANE NAME'

如果要将其绑定到一个键(例如:u),请在您的~/.tmux.conf文件中编写以下内容:

bind u command-prompt "select-pane -T '%%'"

然后你可以通过<prefix>u来重命名面板。

顺便说一下:

  • 要打开命令提示符,您需要使用<prefix>:
  • <prefix>默认为C-b(可以使用set -g prefix NEW_KEY更改)

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