如何将当前文件名插入 Vim 的内容中?

mtk*_*mtk 45 vim

经过一番搜索,我知道:echo @%在 vim-screen 的底行显示当前文件名。

我想将文件名(带和不带完整路径)转储到文件的内容中而不离开vim.

有没有办法做到这一点?

Kev*_*vin 46

当前文件名在"%寄存器中,因此您可以插入它(在插入模式下)<c-r>%;可以插入完整路径<c-r>=expand("%:p")。如果你经常使用它,你可以制作一个宏。有关更多类似技巧,请参阅:h expand:h "=

  • 在插入模式下,`&lt;cr&gt;` 指定下一个字符是一个寄存器。 (13认同)
  • 您还可以在正常或可视模式下执行“%p”。 (4认同)
  • 也许我误读了,但是 `&lt;cr&gt;` 不是映射为重做命令吗? (3认同)

J.C*_*ski 33

我确定还有其他方法可以做到这一点……但是您想要的主要命令是:r[ead]将命令的输出插入缓冲区。

因此,仅插入文件名:

:r! echo %
Run Code Online (Sandbox Code Playgroud)

并且,要包含完整路径:

:r! echo %:p
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:

:help read
:help filename-modifiers 
Run Code Online (Sandbox Code Playgroud)


小智 17

从 中可以看出:h registers"%寄存器包含当前文件名。该:pu[t]命令将寄存器的内容插入到文本中。

因此,要插入实际文件名,您可以在命令模式下键入以下任一命令:

:put %
Run Code Online (Sandbox Code Playgroud)

或者

"%p
Run Code Online (Sandbox Code Playgroud)

要插入带有完整路径的文件名,请键入

:put=expand('%:p')
Run Code Online (Sandbox Code Playgroud)

在命令模式下。


更多信息:

:h pu[t]
Run Code Online (Sandbox Code Playgroud)

通过键入"rp您可以粘贴 register 的内容"r

  • `:put "%:p"` 似乎对我不起作用。它似乎只适用于 *expand()*,例如:`:put =expand('%:p')`,这使得它并不比 `&lt;cr&gt;=expand('%:p') 麻烦多少`不幸的是。 (3认同)

jll*_*gre 7

一个简单的方法是运行:

!!echo %
Run Code Online (Sandbox Code Playgroud)
  • !! 正在用它后面的命令的结果替换当前行。

  • % 被命令中的已编辑文件的名称替换,因此这将有效地将该名称插入到已编辑的文件中。

文件名是您传递给 vi(m) 命令的文件名,可能包含相对或绝对路径。如果您想删除它并只保留文件名,请运行

!!basename %
Run Code Online (Sandbox Code Playgroud)