使用 screenrc,如何让“Ca c”在当前窗口的工作目录中打开一个新窗口?

使用 screenrc,如何让“Ca c”在当前窗口的工作目录中打开一个新窗口?

使用 screenrc,如何C-a c在当前窗口的工作目录中打开一个新窗口?默认情况下,它似乎在调用原始屏幕会话时在工作目录中打开新窗口。

答案1

基于这个答案,我认为这应该可行:

bind c stuff "screen -X chdir \$PWD; screen^M"

我将在我的远程 shell 上尝试它并报告它是否对我有用。

编辑:是的,它起作用了。第一个“bind”命令实际上并不需要。

答案2

默认情况下,screen还绑定C-a C-c创建一个新窗口,因此您可能需要添加另一行来.screenrc处理这种情况:

bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"

关于此命令如何工作的说明:

  1. stuff将其参数字符串直接进入当前窗口

    命令:stuff string

    将字符串填充string到当前窗口的输入缓冲区中。

  2. screen -X chdir \$PWD告诉 screen 执行命令chdir,这会将其操作目录(新 screen 窗口将启动的位置)更改为环境变量$PWD,其中包含当前工作目录。这不可能单独完成;因此,需要使用.screenrc来操作输入缓冲区。stuff

  3. screen已经运行的命令会screen创建一个新窗口,就像这样C-a C-c

  4. ^M生成一个回车符,告诉 shell 执行现在位于缓冲区中的命令。如果没有它,您必须按enterC-m当然,或 )。

因此,这个绑定将会在执行它的窗口中留下类似这样的垃圾:

user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$

答案3

以下是我自己的答案stackoverflow.com 上的类似问题

要使屏幕在当前目录中打开新选项卡/窗口,您可以将以下代码添加到.screenrc文件:

bind c stuff "screen bash^M"

这将导致Ctrl+a c 命令在当前窗口/选项卡的目录中打开新选项卡/窗口。

笔记:screen你必须确保不是开始一个登录外壳默认情况下,因为这将导致 shell 在登录 shell 的默认目录中启动,而不是在当前目录中启动。这意味着在你的.screenrc文件,您的shell命令不能包含破折号('-')字符。

例如,这是错误的(即它将启动登录 shell):

shell -$SHELL

但这是正确的(即它将不是启动登录 shell):

shell $SHELL

笔记2:不幸的是,此方法的行为与 中的默认新窗口/选项卡命令并不完全相同screen。相反,它将命令写入当前窗口并执行它以创建新的窗口/选项卡,因此在某些长时间运行的 shell 进程中它将不起作用。换句话说,此键盘快捷键只能在可以执行正常 shell 命令时执行。

注3:如果要screen在当前目录中打开新窗口/选项卡打开登录 shell,您可以将以下代码添加到您的.screenrc文件:

bind c stuff "screen bash -l^M"

相关内容