我已经设定zsh
了每当我更改目录时更新 XTerm 标题。太棒了!不幸的是我有一个常见问题,即:
% cd foo; # title changes to "host1:~/foo"
% ssh host2; # title changes to "host2:~"
% pwd
/home/user/foo # title is still "host2:~"
我需要在 ssh 连接终止时运行一些命令,可以是chpwd
、 或cd .
或类似命令。我认为我不能使用别名,因为我需要类似
alias ssh=ssh $*; cd .
但据我所知你无法选择争论的方向使用别名。
答案1
首先,需要说明的是:在zsh
(顺便说一下,在bash
& 朋友中也是如此)中,您不能在别名中使用参数。请改用函数:
# function hello() { echo $1 $3 }
# hello one two three
one three
您可以在函数中更改标题chpwd()
,每当您更改目录时都会调用该函数。因此,您需要使用cd .
它来更新标题。或者——按照您的方法——在 ssh 会话结束后ssh
,使用此函数“重载”命令以执行chpwd()
:
function ssh() { command ssh "$@"; chpwd }
我更喜欢的解决方案是将更改标题的命令放在precmd()
提示显示之前执行的位置。例如,我在我的~/.zshrc
precmd () {
[[ -t 1 ]] && print -Pn "\e]0;%n@%m:%~\a"
}
获得类似 的标题user@host:/current/dir
,当连接到远程机器(假设 中有类似的代码~/.zshrc
)并返回本地会话时,该标题会立即更新。
([[ -t 1 ]]
检查会话是否连接到终端——这并不那么重要。)