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`
我有一个脚本 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`