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

#1 楼

您可以按{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


评论


Ctrl + G更像是“相对于vim的cwd的路径”吗?

–碧玉
15年2月3日在18:58

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

– thameera
15年2月3日,19:06

似乎C-g是0C-g的默认值,另外2C-g还显示了缓冲区索引号(从1开始)。

–user10767
17年4月24日在16:27

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

–金库
18年11月6日15:08



如果希望状态行始终显示,还可以将set laststatus = 2添加到〜/ .vimrc

– Alex H
20年3月4日在4:00

#2 楼

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

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

: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上获取当前文件的名称

相关:




如何显示文件名您正在vim中处理的文件?在stackoverflow SE

如何找出当前在vim中打开的文件?在Unix SE上


评论


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

–dash-tom-bang
18年1月3日,下午2:01

#3 楼

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

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

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




:~:获取相对于主目录的文件路径(由于某种原因,该路径对我不起作用)

:.:获取相对于当前目录的文件路径(默认为%

:r:文件名root。没有扩展名的文件名。

:e:文件的扩展名。

:h:在/上分割并返回左半部分(即,如果我正在/tmp/test.txt的路径并运行%:p:h将返回/tmp


:t:在/上分割并返回右半部分(即,如果我在/tmp/test.txt的路径中编辑文件并运行%:p:t将返回text.txt



评论


我认为您的意思是%:p:t将返回text.txt

– John O'M。
2015年2月5日在4:20



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

–CharlesL
2015年2月5日,12:43

#4 楼

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

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

但是我记得这一点,因为如果您使用vim的帮助:h expand,那么它会提到%%:p及其亲戚。

#5 楼

您需要将状态行设置为可见,并将其设置为path。如果要只运行一次,我将下面的两行添加到我的〜/ .vimrc

set laststatus=2
set statusline+=%F


中来永久执行此操作。然后在查看文档时,键入

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


评论


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

–statox♦
18年1月10日在8:03



#6 楼

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

:!realpath %


或:

:'<,'>!realpath %


插入路径通过当前选择进入文档。

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

:w ! sudo tee %


以保存文件(那里有点题外,但这是%寄存器还可以做些什么的一个很好的例子)。

评论


realpath不是POSIX,因此它可能更简单:!echo“ $ PWD /%”

–muru
2015年2月18日,0:57

#7 楼

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

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


#8 楼

下面将显示相对于当前目录的路径:

:f[ile]


:f:file

评论


简单实用

– Morteza Ziyae
19年6月22日在8:49

不显示完整路径

– sjas
19年11月3日,1:50

确实@sjas,已更新

–Cédric Van Rompay
19年11月6日在17:26

在其他地方找到OP:s问题后,添加了正确答案

– sjas
19年11月7日在16:17

#9 楼

我为此使用vim Airlines和一些不错的功能:



#10 楼

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

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

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


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



#11 楼

Linux可以尝试使用realpath命令。
:!realpath %

如果使用MacOS,请先尝试brew install coreutils

评论


这仅适用于Linux。

– jdhao
20 Dec 7'在8:42

欢迎来到Vi和Vim!正如jdhao指出的,我已经学到了很辛苦的方法,realpath并非在所有系统上都可用(甚至不是所有* nixes!)。考虑通过编辑答案来添加警告

– D. Ben Knoble♦
20 Dec 7'在13:21

这实际上是重复的答案。已在vi.stackexchange.com/a/1886/15292中提及

– jdhao
20/12/08在7:10