vim 当文件名是脚本输出时拆分

vim split when filename is a script output

我有一个脚本 fn <regex>,它为我提供了一个文件的完整路径,该文件的名称符合我提供的正则表达式字符串(或者多个,如果有多个匹配项)。

问题是,如何在 vim 中拆分并在拆分 window 中打开 "output" 文件。

我尝试了 :sp !fn my_file.name,得到了

E172: Only one file name allowed

注意,我也试过 :sp !fn my_file.name | xargs echo -n 删除尾随的换行符,但得到了同样的错误

我不确定这是否正是您想要的,但我想出了这个代码:

com! -nargs=+ Sp call s:open_multiple_splits(<q-args>)

fu! s:open_multiple_splits(script) abort
    let files = systemlist(a:script)
    for file in files
        if !empty(glob(file, 0, 1))
            exe 'split '.file
        endif
    endfor
endfu

它假定您的脚本是 shell 脚本而不是 Vim 脚本。

我通过创建以下 shell 脚本对其进行了测试:

#!/bin/bash

echo /tmp/foo
echo /tmp/bar

我在 /tmp/sh.sh 中写的,并使其可执行 (chmod +x /tmp/sh.sh)。
我还创建了 2 个文件 /tmp/foo/tmp/bar:

echo 'hello' >/tmp/foo
echo 'world' >/tmp/bar

然后,在Vim中,我输入:Sp /tmp/sh.sh,它打开了2个水平视口,显示/tmp/foo/tmp/bar

请注意,如果您的脚本只输出一个文件路径,则不需要所有这些代码,您可以简单地使用反引号扩展(参见 :h backtick-expansion):

:sp `your_script`