如何在Vim中输出特殊字符,如%,<cfile>?

3

如果我想查看当前所在目录,我可以输入以下命令:

:echo .

并且收到了错误信息:

E15:Invalid expression .

我该如何输出特殊字符,例如%.<cfile>

2个回答

6
你需要使用expand()函数。
举个例子:
:echo expand("%:h")

打印实际目录(当前缓冲区的目录)。

另请参见:help expand

如果您想查询当前目录(与缓冲区无关),只需执行:pwd即可。 (请参阅:help current-directory

(编辑:根据ib的评论,从:cd更改为:pwd)。


1
:cd 命令只在非 Unix 系统上打印当前目录名称。在 Unix 系统上,它会将当前目录更改为主目录!要打印当前目录路径,请使用 :pwd 命令。 - ib.
谢谢@ib。我已经相应地更改了答案。 - René Nyffenegger

6

有一个专门的命令可以打印当前目录路径:

:pwd

(请参阅帮助文档中的“:help :pwd”和“当前目录”部分::help current-directory)。

要快速了解Vim命令行特殊字符被扩展为哪些路径,请使用:

:echo expand('%:p:h')

或者,更简洁地说,
:!echo %:p:h

前一个命令基于expand()函数,该函数可以扩展给定参数中的通配符和特殊关键字(请参阅:help expand)。 后一个命令利用了通配符在运行外部命令之前被扩展的事实(请参阅:help cmdline-special)。


谢谢!当我输入 echo expand("%") 时它可以工作,但是当我输入 :echo expand('%:h:p') 时会得到一个 .。请问 :h 和 :p 是什么意思? - TomCaps
@TomCaps:我打错了修饰符,导致它们的顺序颠倒了。(感谢您注意到这一点!):p 这个修饰符应该首先应用,将前面的特殊变量的值扩展为其完整路径。然后再应用 :h 修饰符,删除最后一个路径组件,对于 % 特殊变量来说,它是文件名。这样,%:p:h 表示当前文件所在目录的完整路径。有关特殊变量及其修饰符的完整列表,请参见 :help expand():help cmdline-special - ib.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接