iTerm 2配置文件

48

我最近转用iTerm2,并且很喜欢它。不过,我想知道是否有一种方法可以使用配置文件来对应您所在的环境/特定机器。

比如说,如果我在我的Mac上的一个窗口上执行任务,则配置文件显示为默认配置文件,但如果我ssh到另一台机器(比方说dev0),iTerm上的配置文件将更新为dev0配置文件。当我完成dev0并调用exit时,配置文件将再次切换到默认配置文件。

我知道一种解决方法是每次想要ssh到另一台机器时打开特定的配置文件并有一种区分的方式,但是如果连接关闭,则需要基于文本注意到而不是窗口背景颜色等明显特征。

这可行吗?如果不行,如何添加此功能,我能做出贡献吗?


这是一个好问题,但我不确定它是否适合在Stackoverflow上发布。 - sosborn
你说得对,我刚加入社区,有没有办法将这个问题转移到SuperUser? - Miles McCrocklin
3
SuperUser上至少有一个问题在评论中提及了这个问题 :) http://superuser.com/questions/1052305/mac-osx-terminal-change-background-color-on-login-to-different-server?noredirect=1#comment1475057_1052305 - Oliver Williams
7个回答

59
支持自定义转义码,可以实时更改配置文件。将其放在你的 .bashrc 或 .bash_profile 中即可。
<esc>]50;SetProfile=X^G

这里的X指代用户配置文件。比如说,如果要将配置文件更改为名为 "Foo" 的配置文件,则可以使用以下 shell 脚本:

#!/bin/bash
echo -e "\033]50;SetProfile=Foo\a"

要在注销时将其更改回来,请在~/.bash_logout中放置代码以将配置文件更改回默认设置。


可以像这样设置默认配置文件吗?我尝试了 SetDefaultProfile,但没有起作用。 - sent-hil
1
刚刚发现了这个转义码列表,有趣的是 - SetProfile 没有列出来.. 我想知道还有什么隐藏在里面.. http://www.iterm2.com/#/section/documentation/escape_codes - Tim Kane
2
仅做补充,我发现以下代码片段对于基于我是否通过ssh连接到主机而更改配置文件很有用:sshToMyFavouriteHost() { echo -e "\033]50;SetProfile=Profile2\a"; ssh my.favourite.host.com && echo -e "\033]50;SetProfile=Profile1\a" } - scubbo
显然,SetProfile=\a 会将默认配置文件还原。 - Nobu
以下这篇由@Yohaï Berreby发布的帖子对我很有用,如果您希望通过用户界面严格执行此操作,则是一个很好的资源。 - Oliver Williams
显示剩余4条评论

16

对于 zsh 用户

假设您有两个配置文件,一个名为 mac(用于您的主机)和一个名为 linux(用于您的远程机器)

进入会话时,我们需要告诉 zsh 加载我们的配置文件

  1. 连接到远程 linux
  2. ~/.zshrc 中添加 echo -e "\033]50;SetProfile=linux\a"
  3. 立即生效,读取您的文件:source ~/.zshrc
  4. 您将在 iterm 会话中看到新的主题。

退出会话时,我们需要告诉 zsh 切换回我们的原始配置文件

  1. 连接到远程 linux
  2. 在 linux 的 ~/.zlogout 中添加以下内容
if [ "$SHLVL" = 1 ]; then
  echo -e "\033]50;SetProfile=mac\a"
  clear
fi

现在你可以轻松地交换个人资料 <3。

如果你使用的是 bash,我相信步骤是相似的,但是你需要修改 ~/.bashrc~/.bash_logout

演示

session based profiles in iterm2 的演示


1
我特别为~/.bash_logout信息点了个赞。 - Chris Giddings
你好,这个在 iTerm 的 3.4.12 版本中还能用吗?虽然我知道以前它是可以用的,但现在我无法让它工作。我也不知道它什么时候停止工作了。 - eexit
你使用哪些本地和远程的shell?echo $0 - lfender6445

14
最新的iTerm2夜间版(Build 2.9.20150329-nightly,在撰写本文时)可以轻松地实现这一功能。您可以在这里下载它:这里
安装并打开后:
  1. 通过ssh登录远程机器,单击iTerm2(应用程序菜单)> 安装Shell集成。它将使用curl下载一个脚本并安装它。在本地机器上执行相同操作
  2. 转到首选项 > 配置文件
  3. 为您的本地机器创建一个新配置文件。自定义它以适合您的需求(更改背景颜色、名称等)
  4. 转到高级选项卡并向下滚动。
  5. 自动配置文件切换中,单击“+”,并添加您的本地机器主机名。主机名是在目标机器上运行echo $HOST时获取的不总是您在提示符中看到的
  6. 创建另一个配置文件,这次用于您的远程机器,并进行自定义。
  7. 自动配置文件切换中添加远程机器的主机名。
  8. 现在,如果您ssh登录远程机器,则会更改您的配置文件。如果您从ssh会话中exit出来,则会返回到本地配置文件。
您可以将此解决方案与@esod的答案无缝结合使用。
注意:在我创建了一个特定于桌面的配置文件之前,它并没有为我工作。
更多信息请参见文档

1
非常好的回答,非常简洁明了。由于我的电脑是一台工作电脑,在“自动配置文件切换”选项下,我选择使用@myusername而不是主机名,因为echo $HOST为空,这是一台工作电脑,我不想编辑我的主机名。 - Oliver Williams

5

步骤1:

自定义您的iterm配置文件,例如 dark, light

步骤2:

将以下代码添加到您的shell配置文件中,例如 .bashrc 或 .zshrc

# Change iterm2 profile. Usage it2prof ProfileName (case sensitive)
it2prof() { echo -e "\033]50;SetProfile=$1\a" }

第三步: 完善您的个人资料。
exec $SHELL -l

步骤4:

切换您的iTerm主题配置文件

it2prof dark
it2prof light

1

我曾有同样的愿望,发现在iTerm 2(版本1.0.0.20130319)的应用程序首选项中可以实现此目标。

您可以通过以下步骤将一个配置文件(例如远程配置文件)与不同于默认预设的预设分配:

配置文件 -> 打开配置文件 选择配置文件并单击“编辑配置文件”... 转到“颜色”选项卡,并从“加载预设...”列表中为此配置文件选择一个预设。

此外,我设置了不同配置文件的键盘快捷方式,以便我可以使一个iTerm窗口看起来与另一个窗口不同。我是这样做的:

  1. 在首选项中创建新的配置文件
  2. 在首选项 -> 键 中创建新的配置文件快捷键,其操作是使用配置文件打开新窗口

我的默认配置文件具有黑色背景,但有时白色背景对我有帮助。我复制了默认配置文件并将新配置文件命名为DefaultLight。在默认配置文件中,我转到“键”选项卡,在其中创建一个新的配置文件快捷键,其键盘快捷键为^+cmd+n,其操作是使用配置文件打开新窗口,其配置文件为DefaultLight。

保存首选项后,cmd+n将打开具有黑色背景的新窗口,而^+cmd+n将打开具有白色背景的新窗口。

如果您对此更感兴趣,键盘快捷键首选项中还有一个带有“个人资料”操作的新标签页。

0

在我的情况下,我需要将Yohaï Berreby的答案与我的主机设置相结合,以实现此功能。

  1. 在自动配置切换中,单击“+”并添加本地计算机的主机名。主机名是在目标计算机上运行echo $HOST时获得的。它并不总是您在提示符中看到的那个。

我的暂存服务器没有设置$HOST,主机名为:

[devel@alveo-staging ~]$ hostname
alveo-staging

但是我无法使用主机名alveo-staging设置规则。因为实际上alveo-staging只是真实主机名(alveo-staging.xxx)的别名,可以在/etc/hosts中设置。

因此,这个问题的快速解决方案是使用*通配符,将规则设置为*staging*

然后它就可以工作了。


0
针对 Fishell 用户: 1. 创建一个 fish 函数:

functions it2prof > ~/.config/fish/functions/it2prof.fish

  1. 将以下内容添加到 ~/.config/fish/functions/it2prof.fish 文件中并保存:
function it2prof
  echo -e "\033]50;SetProfile=$argv\a"
end
  1. 享受你的命令:

it2prof whatever_profile_you_define


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