如何查看当前文件的完整路径?


123

在Vim中编辑文件时,是否有命令查看当前文件的路径?有时,如果项目中有多个具有相同名称的文件,这将非常方便。

Answers:


142

您可以按{count}Ctrl-G

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

1其次Ctrl+ G显示当前文件的完整路径。如果{count}大于1,则还将显示缓冲区名称。

(仅按Ctrl+即可G显示相对于Vim当前工作目录的路径,正如Jasper在评论中指出的那样。)

您可以在其中使用以下命令.vimrc将完整路径添加到状态行,因此它始终可见:

set statusline+=%F

4
是不是Ctrl+G更像“路径相对于Vim的CWD”?
Jasper 2015年

@Jasper好抓住!更新了答案。
thameera

4
似乎C-g是的默认设置0C-g,并且还2C-g显示了缓冲区索引号(从1开始)。

我很高兴成为第100个支持您的答案的人!谢谢这个1C-g
金库

52

寄存器%包含当前文件的名称。

可以输入以下命令来显示显示的信息:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

如果我们只是想是显示当前文件类型的名称:f/ :ls或按Ctrl- g(全路径按1,然后Ctrl- g)。

在插入模式下,键入Ctrl- r然后%插入当前文件的名称。

以下命令将由当前文件和备用文件的完整路径组成的行插入缓冲区:

:put =expand('%:p')
:put =expand('#:p')

来源:在vim Wikia上获取当前文件的名称

有关:


2
可能值得注意的是,在插入模式下,您也可以=expand...在之后使用这些表达式Ctrl-R
dash-tom-bang

22

您可以:!ls %:p用来获取当前文件的完整路径。

根据ex上下文,%将表示文件的内容或文件名。脱壳时,它表示相对于当前目录的文件路径。命令' %:p将添加完整路径文件名修饰符到%

还有一些其他有趣的文件名修饰符,例如:

  • :~:获取相对于主目录的文件路径(由于某种原因,该路径对我而言不起作用)
  • :.:获取相对于当前目录的文件路径(%默认)
  • :r:文件名根。不带扩展名的文件名。
  • :e:文件扩展名。
  • :h:拆分/并返回左半部分(即,如果我在的路径中编辑文件/tmp/test.txt,则run %:p:h将返回/tmp
  • :t:拆分/并返回右半部分(即,如果我在的路径中编辑文件/tmp/test.txt,则run %:p:t将返回text.txt

我认为您的意思是%:p:t将返回text.txt
John O'M。

@ JohnO'M。是的,没错,谢谢:D。固定。
CharlesL 2015年

7

使用可以看到当前的工作目录:pwd。当然,这只是目录,而不是文件名。要获取工作目录和文件名,我们可以使用特殊寄存器%,其中包含有关当前文件的信息。

如果使用:echo @%,则将获取当前文件的目录和文件名。
如果使用:echo expand('%:p'),则将获得当前文件的完整路径和文件名。这与CharlesL的答案非常相似。

我记得这一个,不过,因为如果你使用vim的帮助:h expand,那么就提到,%%:p和他们的亲属。



3

要显示所有文件的完整路径,包括解析的符号链接,请使用以下内容。

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

3

有更好的答案,但是,如果(出于某种原因)您想要使用外壳程序来获取文件的完整路径(如果您打算使用外壳程序对文件执行其他操作,则更有用),在类似Unix的系统上,您可以运行:

:!realpath %

要么:

:'<,'>!realpath %

将路径插入到当前选择中的文档中。

注册%始终包含文件名。一个现实的例子可能是,如果您正在编辑配置文件,但是没有写许可权(并且不想以root用户身份运行Vim),则可以编辑该文件,然后运行:

:w ! sudo tee %

保存文件(那里有点题外话,但这是用%寄存器可以完成的一个很好的例子)。


realpath不是POSIX,因此操作起来可能更简单:!echo "$PWD/%"
muru

同意 好决定。
山姆·怀特2015年

2

您需要将状态行设置为可见,并将其设置为path。我通过将以下两行添加到我的〜/ .vimrc中来永久地这样做

set laststatus=2
set statusline+=%F

如果您只想运行一次。然后在查看文档类型时

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
这与thameera在同一问题上提出的答案相同。
statox


1

您可以在标题栏中显示正在编辑的文件的完整路径,这是显示文件路径的便捷方法。

为此,您需要设置title选项和titlestring。当前我正在使用以下设置:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

它将显示Vim的主机名,然后是文件的完整路径,然后是文件的最后修改时间。参见下图的演示

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.