Vim:使用表达式作为文件名

时间:2009-03-09 17:51:04

标签: vim scripting editing

我正在做一些调试,其中包括检查日志文件名称“blah N.log”,其中N是一个整数。定期添加一个新的日志文件,我只想跳到下一个日志文件,而不是明确地执行:e blah\ N.log。我不能只做% vim *.log然后:n,b / c并不存在所有日志文件。

我有一个表达式,它产生下一个日志文件名:

:echo substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', '')

但我无法弄清楚如何将该表达式的结果传递给:e命令。有什么提示吗?

3 个答案:

答案 0 :(得分:2)

这是一种的方式 - 虽然我希望有一种更优雅的方式。

:execute ':e ' . substitute(substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', ''), ' ', '\\ ', '')

我必须添加第二个substitute()命令来转义文件名中的空格。

答案 1 :(得分:2)

或者你可以将它包装在一个函数中。我会做以下事情:

function! GetNextLogfile()
    "" store expression in a
    "" let a=...
    return a
endfunction

然后

:执行“编辑”GetNextLogfile()

您可能需要映射或缩写。

答案 2 :(得分:1)

另一种方式::e <CTRL-R>=调出表达提示。输入适当的表达式(包括用于表达式历史记录),然后单击<Enter>替换原始提示中的值。

这使得击键:

:e <CTRL-R>=<Up><Enter><Enter>

这不仅仅是:<Up><Enter>重做我的:exec命令,而是一个有用的技巧。