如何从 Vim 中发送转义序列?
How to send escape sequences from within Vim?
最近 Apple 支持在终端的状态栏中显示工作目录和文件。必须发送的转义序列(设置当前文件)是这样的:
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")
您可以在 vim 中使用 !echo -ne <ESCAPE SEQUENCE>
。为了将它与包含变量的标题字符串一起使用,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.
最近 Apple 支持在终端的状态栏中显示工作目录和文件。必须发送的转义序列(设置当前文件)是这样的:
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")
您可以在 vim 中使用 !echo -ne <ESCAPE SEQUENCE>
。为了将它与包含变量的标题字符串一起使用,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.