在命令行中显示当前版本的文件名


10

如何在命令行中显示当前文件的路径,以键入类似的文件名?我不想用当前文件名代替缩写,我想编辑文件名以及其目录路径。例如,我想要:edit一个具有相似名称或相似目录的文件,例如

vim src/submodule/frontend/frobnicate2.c

现在我要编辑../trunk/src/submodule/frontend/frobnicate.c,而我只想插入../trunk和删除2,而不是重新输入完​​整路径。

我当然可以回到shell并使用其命令历史记录,或者可以通过GUI复制粘贴路径,但是我正在寻找一种不需要离开Vim的更有效的方法。

Answers:


11

除了%您自己发现插入寄存器外,您还可以使用:edit %<Tab>

来自:help cmdline-special

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

因此,您可以使用例如:

:edit %.orig

编辑file.txt.orig。对于您的示例,您将键入:e ../trunk/%,按<Tab>以获得具有相对路径的文件名,并2在按之前将其删除<Enter>

您可以在路径中添加一些修改器以对其进行修改。我发现:h它特别有用,它获取当前路径的“目录名”(或在Vim中为“ head”):

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

您甚至可以使用:h多次。例如:

:edit %:h:h:h/file.txt

将打开 file/in/a/deeply/file.txt

它还:p提供了完整的路径,并且在您的情况下可能会有用:输入:e %:p,按<Tab>并根据需要编辑路径。您甚至可以使用多个修饰符,例如::e %:p:h

请参阅:help filename-modifiers完整列表。

注意:如果您愿意<Tab>,Vim会展开%。如果使用<C-d>,Vim不会展开%(但%在完成路径时会替代)。



3

如果设置了vim path变量,则该:find命令具有完整功能,即文件名的制表符完成(无需指定目录部分!)

就您而言,类似

set path=./**

可能就是您:fin frob<tab>工作所需的全部。有关血腥细节:help find,,:help file-searching


0

您可以尝试以下映射:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

这将保存当前命令,然后将寄存器“​​ a”设置为当前文件的名称。然后,调用最后一个命令,并附加“ a”寄存器内容。当然,如果您在“ a”寄存器中有一些有用的内容,它将被覆盖。

您可能需要将映射的字符更改为其他字符。我喜欢使用Alt键,但在某些终端中不起作用。

正如Carpetsmoker在他的答案中指出的那样,您可以将函数调用更改为

expand('%:p')

强行全程。


1
这将毫无意义地抹去登记册a。改用类似的方法:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
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.