小编典典

在 Vim 中 Yank 文件名/当前缓冲区的路径

all

假设当前缓冲区是打开编辑的文件,所以:e不显示E32: No file name.

我想拉出以下一项或全部:

  • 文件名与状态行显示的完全相同,例如~\myfile.txt
  • 文件的完整路径,例如c:\foo\bar\myfile.txt
  • 只是文件名,例如myfile.txt

阅读 182

收藏
2022-06-23

共1个答案

小编典典

TL;博士

:let @" = expand("%")>

这会将文件名复制到 unamed register ,然后您可以使用 good oldp粘贴它。当然,您可以将其映射到一个键以便更快地使用。

:nmap cp :let @" = expand("%")<cr>

您也可以将其用于完整路径

:let @" = expand("%:p")

解释

Vim 使用 未命名的寄存器 来存储已删除或复制(拉出)的文本,同样,当您粘贴它时,它会从该寄存器中读取文本。

使用let我们可以手动将文本存储在寄存器中,:let @" = "text"但我们也可以存储表达式的结果。

在上面的例子中,我们使用了expand扩展通配符和关键字的函数。在我们的示例中,我们使用expand('%')扩展当前文件名。我们可以将其修改expand('%:p')为完整的文件名。

详情见:help let :help expand :help registers_

2022-06-23