因此,最近Apple已经支持在终端的状态栏中显示工作目录和文件.必须发送的转义序列(设置当前文件)是这样的:
ESC ] 6 ; Pt BEL
其中Pt是一个文件:// 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")
最佳答案 你可以使用!echo -ne< ESCAPE SEQUENCE>在vim内.为了将它与包含变量的标题字符串一起使用,可以为execute添加前缀.
execute "silent !echo -ne " . EXPRESSION
但老实说,没有必要推出自己的命令.相反,您可以按照here所述操纵这两个变量.
The ‘t_ts’ and ‘t_fs’ options are used to set the window title if the terminal
allows title setting via sending strings. They are sent before and after the
title string, respectively. Similar ‘t_IS’ and ‘t_IE’ are used to set the
icon text. These are Vim-internal extensions of the Unix termcap, so they
cannot be obtained from an external termcap. However, the builtin termcap
contains suitable entries for xterm and iris-ansi, so you don’t need to set
them here.