我想使用此文件中的当前文件名进行搜索。我已经知道使用:call expand("%:p:h")
获取当前文件名。所以我想使用像/call expand("%:p:h")
这样的命令进行搜索。我试过这个但是失败了,因为vim从字面上解析了这个函数调用。
答案 0 :(得分:1)
如果当前文件名不包含应该转义的符号
到Vim模式语法(参见:help pattern
),然后就可以输入
/
控制 + - [R%
否则,必须准备当前文件名,将其放入最后一个 搜索注册,
:let @/ = '\V' . escape(expand('%:p:h'), '\')
并使用n
/ N
,/
输入手动发出搜索命令或
?
输入。为了减少键入,可以使用组合这些步骤的映射
引入的。
nnoremap <expr> <leader>f/ ExpandSearch('/')
nnoremap <expr> <leader>f? ExpandSearch('?')
function! ExpandSearch(dir)
let @/ = '\V' . escape(expand('%:p:h'), '\')
return a:dir . "\r"
endfunction
还有类似于 Ctrl + R %但更多
一般命令行扩展功能,表达式寄存器。一个人可以打字
编辑搜索模式时, Ctrl + R = ,输入
表达式(见:help expression
),其评估结果如下
插入 Ctrl + = 击键的位置
被压了。不幸的是,除了上面解决的通常逃避问题
通过\V
原子和escape()
调用,这种扩展方式创建了一个新的
一。由于路径名是以交互方式插入的,因此也必须逃避
用于运行搜索命令的字符(/
或?
)。可悲的是,它
无论如何都不可能保护这两个符号的出现
搜索方向:转发搜索中?
的转义会转换问题
将\?
原子标记到模式中。
答案 1 :(得分:1)
vim中有一个名为search()
的函数会将光标移动到您的模式中:
:call search(expand("%:p:h"))
还有另一个名为matchadd()
的函数,它将突出显示您的模式:
:call matchadd('Search', expand("%:p:h"))
如果文件名包含特殊字符,例如.*[]
,则应拨打escape()
:
:call search(escape(expand("%:p:h"), '.*[]'))
search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
Search for regexp pattern {pattern}. The search starts at the
cursor position (you can use |cursor()| to set it).
matchadd({group}, {pattern}[, {priority}[, {id}]])
Defines a pattern to be highlighted in the current window (a
"match"). It will be highlighted with {group}. Returns an
identification number (ID), which can be used to delete the
match using |matchdelete()|.
escape({string}, {chars}) *escape()*
Escape the characters in {chars} that occur in {string} with a
backslash. Example:
:echo escape('c:\program files\vim', ' \')
results in:
c:\\program\ files\\vim
Also see |shellescape()|.
答案 2 :(得分:1)
通常,要在命令行中插入(或只是在插入模式下)某个函数返回的值,您应该使用以下内容:
控制+ R = 函数名()输入
顺便说一下,你说expand("%:p:h")
返回当前文件名,但这是错误的:实际上它返回当前文件的完整路径,没有文件名。要获得没有路径的文件名,您应该使用expand("%:t")
。请阅读:help expand
以获取更多信息。
已编辑:在您的情况下,您可以使用@ib建议的搜索注册 @/
的解决方案:这是一种更安全的方式。但是,如果我只需要在缓冲区中找到文件名,如果我的文件名不包含一些特殊字符,我会使用 Ctrl + R = 。
因此,搜索当前文件名的整个表达式是:
/\V
控制+ R = expand('%:t')
输入 输入
P.S。
搜索模式开头的 \V
表示“ very nomagic ”模式。您可以在此处阅读::help \V