因此,最近Apple已经支持在终端的状态栏中显示工作目录和文件。必须发送的转义序列(设置当前文件)是:
ESC ] 6 ; Pt BEL
其中Pt
是指向当前正在编辑的文件的file://
网址。所以我想我可以让Vim将此命令作为转义序列发送,但我有点麻烦。到目前为止我有这个:
au BufNewFile,BufReadPost,BufFilePost,BufWritePost * echo <escape sequence>
但我觉得它不会像那样工作。此外,我不知道如何将当前文件作为file://
网址获取,尽管我怀疑netrw可能能够帮助我。有什么想法吗?
到目前为止,我有这个:
au BufNewFile,BufReadPost,BufFilePost * echo printf('\e]6;file://%s%s\a', $HOSTNAME, expand('%:p'))
但它仍然无法正常工作 - $HOSTNAME
无法扩展。任何人都有关于如何进行扩展的任何提示吗?
好的,所以我对引号进行了一些更改并导出了$HOSTNAME
,现在这打印得很好。但是vim不是简单地回显转义序列,而是像^[
一样打印它们,这使得它们无用!所以这就是我真正的问题:你如何让vim向shell发送文字转义序列?
最终代码如下:
set title
set t_ts=^[]6;
set t_fs=^G
auto BufEnter * let &titlestring = "file://" . hostname() . expand("%:p")
答案 0 :(得分:2)
您可以在vim中使用!echo -ne <ESCAPE SEQUENCE>
。为了将它与包含变量的标题字符串一起使用,execute
可以作为前缀。
execute "silent !echo -ne " . EXPRESSION
但老实说,没有必要推出自己的命令。相反,您可以按照here所述操作这两个变量。
't_ts'和't_fs'选项用于设置终端的窗口标题 允许通过发送字符串设置标题。它们在之前和之后发送 标题字符串。类似的't_IS'和't_IE'用于设置 图标文本。这些是Unix termcap的Vim内部扩展,所以它们 不能从外部的术语中获得。但是,内置的termcap 包含xterm和iris-ansi的合适条目,因此您无需设置 他们在这里。