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

Vim:使用表达式作为文件名,vim,scripting,editing,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命令。有什么建议吗?这

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

我得到了一个表达式,它生成下一个日志文件名:

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

但我不知道如何将该表达式的结果传递给
:e
命令。有什么建议吗?

这里有一个方法,尽管我希望有一个更优雅的方法

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

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

这里有一个方法,尽管我希望有一个更优雅的方法

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

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

或者您可以将其包装到函数中。我会这样做:

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

:执行“编辑”GetNextLogfile()


您可能需要映射或缩写。

或者您可以将其包装在函数中。我会这样做:

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

:执行“编辑”GetNextLogfile()

您可能需要映射或缩写。

另一种方式:
:e=
显示表达式提示。输入适当的表达式(包括使用up作为表达式历史记录),然后点击
替换原始提示中的值

这使得按键:

:e <CTRL-R>=<Up><Enter><Enter>
:e=
这不仅仅是执行我的
:exec
命令的
,而是一个有用的技巧。

还有另一种方法:
:e=
显示表达式提示。输入适当的表达式(包括使用up作为表达式历史记录),然后点击
替换原始提示中的值

这使得按键:

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

这不仅仅是重复执行我的
:exec
命令的
,而是一个有用的技巧。

+1:我希望使用一行程序,但这是一个值得注意的好方法如果您计划重复多次,可能值得在vimrc中包含一些功能…:)+1:我希望使用单行程序,但这是一个值得注意的好方法。如果您计划重复多次,可能值得在vimrc中包含一些功能……:)