我想让 vim 屏幕标签名称更有用。我已经打开了屏幕插件,并尝试了几种方法。我最喜欢的一个是使用另一个加载屏幕文件来固定屏幕名称,即:
screen -S sectionName -c .screenTest
screenTest 文件会有类似内容:
source $HOME/.screenrc
chdir $HOME/place
# Screen 0
screen
stuff "something^M"
# Screen 1
screen
stuff "something^M"
stuff "cd place^M"
stuff "vim -p `find -type f -not -path \"*/\.*\" -not -path \"*x86*\" \( -name \"*.py\" -o -name \"*.cxx\" -o -name \"*.h\" \)`^M"
title "Screen1"
问题是在 stuff 命令运行之前会读取 title 命令。如果有人知道如何让 title 命令在 stuff 命令完成后运行,那就太完美了。我试过了:
内容“^A:title TitleValue ^M”
但它不会在屏幕上写入命令插入,而是写入终端(在 vim 中使用 写入 ^A 和 ^M ^V^A
)。
然后我尝试编辑 screen.plugin.zsh 文件。
我尝试在输入命令必须显示位置时更改 prexec 和 precmd zsh 方法vim
。但我做不到。
我很抱歉在这里发布它,但如果有人可以帮助我做到这一点,这听起来很简单,但我坚持即使我改变$cmd,它也不会改变TAB语法,也就是说,如果我这样做:
if [[ "$cmd" == "vim*" ]]; then
# How do I check if variable $cmd has string "vim" in it using zsh?
echo "changing for vim!"
cmd=''
fi
它会更改终端标题,但不会更改屏幕窗口标题。有什么想法吗?这个问题也是这里,但我认为这个问题在这里更合适,因为它不完全是一个 oh-my-zsh 问题。
另一件有帮助的事情是,如果我可以设置一些窗口不自动改变其标题,而其他窗口则会改变。
答案1
这屏幕使用手册状态:
要在创建窗口后更改名称,可以使用标题字符串转义序列 (
<ESC> k name <ESC> \
) (...)
因此(无需深入研究 oh-my-zsh 的模块、插件等)你可以使用
print -n "\033kTITLE\033\134"
在嘚命令行将当前屏幕窗口的名称更改为标题。
\033
代表逃脱八进制字符(ESC = 27(十进制)= 0x1b(十六进制)= 033(八进制))\134
和反斜杠特点。
根据您的命令,以下命令在屏幕配置文件中起作用:
stuff "print -n "\\033kTITLE\\033\\134\" "
答案2
根据console_codes(4)
,设置标题的可移植方法是使用 VT100 序列OSC 0 ; title ST
。OSC
(操作系统命令)在 ECMA-48 中定义为\x9d
或ESC ]
。ST
(字符串终止符)在 ECMA-48 中定义为\x9c
或ESC \
; VT100 & xterm 也允许BEL
使用。 综上所述:
printf '\x1b]0;%s\x07' "$your_title"
或者如果你因为某种原因喜欢劣等八进制:
printf '\033]0;%s\007' "$your_title"