使用screenrc,我怎样才能使Ca c在当前窗口的工作目录中打开一个新窗口?


2

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

Answers:


0

基于这个答案,我认为这应该工作:

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

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

编辑:是的,它的工作原理。实际上不需要第一个“ bind”命令。


1
我读了这个答案,但认为东西是其他东西的占位符。上面的代码示例中的^ M是什么?
马特·乔纳

这样就可以了,但是如果没有多余的^ M,也许这是复制粘贴的?
马特·乔纳

7

默认情况下,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告诉屏幕执行命令chdir,该命令将其操作目录(将在其中打开新的屏幕窗口)更改为环境变量$PWD,其中包含当前工作目录。这不可能在.screenrc一个人内完成。因此,stuff必须使用来操纵输入缓冲区。

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

  4. ^M生成一个回车,该回车告诉外壳程序执行缓冲区中现在的命令。没有它,您将必须按enter(或C-m,当然)。

因此,此绑定将在您在其中执行窗口的窗口中留下这样的内容:

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

知道为什么不需要^ M吗?
Matt Joiner

1
必要的,以使得在结束时产生一个回车stuff字符串。
Matt Eckert

关于如何在命名屏幕会话中执行此操作的任何想法?superuser.com/questions/1038576/... @MattEckert
保罗Caheny

0

下面是一份我自己的答案,以在stackoverflow.com一个类似的问题

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

bind c stuff "screen bash^M"

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

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

例如,这是错误的(即它将启动登录外壳程序):

shell -$SHELL

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

shell $SHELL

注意2:不幸的是,此方法的行为并不完全类似于中的默认new window / tab命令screen。相反,它将命令写入当前窗口并执行以创建新的窗口/选项卡,因此在长时间运行的Shell进程中将无法使用该命令。换句话说,仅在可以执行常规外壳命令时才可以执行此键盘快捷键。

注意3:如果要screen在当前目录中打开新的windows / tabs 打开登录外壳,可以将以下代码添加到.screenrc文件中:

bind c stuff "screen bash -l^M"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.