6

所以最近苹果已经支持在终端的状态栏中显示工作目录和文件。必须发送(设置当前文件)的转义序列是这样的:

ESC ] 6 ; Pt BEL

哪里Ptfile://指向当前正在编辑的文件的 url。所以我想我可以让 Vim 将此命令作为转义序列发送,但我遇到了一些麻烦。到目前为止我有这个:

au BufNewFile,BufReadPost,BufFilePost,BufWritePost * echo <escape sequence>

但我有一种感觉,它不会像那样工作。另外,我不知道如何将当前文件作为file://url 获取,尽管我怀疑 netrw 可能能够帮助我。有任何想法吗?

编辑

到目前为止,我有这个:

au BufNewFile,BufReadPost,BufFilePost * echo printf('\e]6;file://%s%s\a', $HOSTNAME, expand('%:p'))

但它仍然不起作用 -$HOSTNAME没有得到扩展。任何人有任何关于如何使其扩展的提示?

编辑 2

好的,所以我对引号和导出的内容进行了一些更改$HOSTNAME,现在可以正常打印了。但是,vim 并没有像字面地呼应转义序列,而是将它们打印为^[,这使它们毫无用处!所以我真正的问题来了:你如何让 vim 向 shell 发送文字转义序列?

成功!

最终代码如下:

set title
set t_ts=^[]6;
set t_fs=^G
auto BufEnter * let &titlestring = "file://" . hostname() . expand("%:p")
4

1 回答 1

3

你可以!echo -ne <ESCAPE SEQUENCE>在 vim 中使用。为了将它与包含变量的标题字符串一起使用,可以加上execute前缀。

execute "silent !echo -ne " . EXPRESSION

但老实说,没有必要滚动你自己的命令。相反,您可以按照此处的说明操作这两个变量。

如果终端允许通过发送字符串设置标题,则使用“t_ts”和“t_fs”选项设置窗口标题。它们分别在标题字符串之前和之后发送。类似的 't_IS' 和 't_IE' 用于设置图标文本。这些是 Unix termcap 的 Vim 内部扩展,因此无法从外部 termcap 获得它们。但是,内置 termcap 包含适用于 xterm 和 iris-ansi 的条目,因此您无需在此处设置它们。

于 2015-11-16T12:41:06.100 回答