【发布时间】:2015-12-02 11:11:50
【问题描述】:
所以最近苹果已经支持在终端的状态栏中显示工作目录和文件。必须发送(设置当前文件)的转义序列是这样的:
ESC ] 6 ; Pt BEL
其中Pt 是一个file:// 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")
【问题讨论】:
-
文件名见
:help fnamemodify() -
底层shell环境是否设置了
$HOSTNAME? -
@DanLowe 是的,但它没有导出(这就是我的问题!)
-
您不需要为此使用自动命令。将表达式包装在
%{…}中也可以,即:set titlestring=%{\"file://\".hostname().expand(\"%:p\")}
标签: vim ansi-escape viml