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

vim src/submodule/frontend/frobnicate2.c


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

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

#1 楼

除了插入自己发现的%寄存器外,还可以使用: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不会扩展%(但在完成路径时会替代%)。

#2 楼

哦。在:help :中搜索“文件名”!很简单:CTRL-R %插入特殊寄存器%,即当前文件名。

评论


因此,基于您的答案:要按照OP的要求获取完整路径,您可以执行Ctrl-r = expand('%:p')之类的操作。这使用=寄存器。

–lcd047
2015年6月3日5:25



#3 楼

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



set path=./**


可能就是:fin frob<tab>工作所需的全部。有关gory的详细信息,请参阅:help find:help file-searching

#4 楼

这是您可以尝试的映射:

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


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

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

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

expand('%:p')


强制执行完整路径。

评论


这将毫无意义地抹去寄存器a。尝试这样的方法:cnoremap = fnameescape(expand('%:p'))

–lcd047
2015年6月3日,9:05