: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 %
插入特殊寄存器%
,即当前文件名。#3 楼
如果已设置vimpath
变量,则具有: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
–lcd047
2015年6月3日,9:05
评论
因此,基于您的答案:要按照OP的要求获取完整路径,您可以执行Ctrl-r = expand('%:p')之类的操作。这使用=寄存器。
–lcd047
2015年6月3日5:25