使用 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"
关于此命令如何工作的说明:
stuff
将其参数字符串直接进入当前窗口:命令:
stuff string
将字符串填充
string
到当前窗口的输入缓冲区中。screen -X chdir \$PWD
告诉 screen 执行命令chdir
,这会将其操作目录(新 screen 窗口将启动的位置)更改为环境变量$PWD
,其中包含当前工作目录。这不可能单独完成;因此,需要使用.screenrc
来操作输入缓冲区。stuff
screen
已经运行的命令会screen
创建一个新窗口,就像这样C-a C-c
。^M
生成一个回车符,告诉 shell 执行现在位于缓冲区中的命令。如果没有它,您必须按enter
(C-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"