Vifm:分别对每个选定的文件运行命令

Vifm:分别对每个选定的文件运行命令

我想要一个for循环模拟维夫姆

当我不选择任何文件时,我可以键入:!echo %f并看到echo以当前文件名作为参数的输出。

当我选择多个文件时,:!echo %f会生成 的输出,echo其中所有选定的文件名都以空格作为参数连接。

如果我想echo对每个选定的文件应用任何程序(例如)怎么办?所以

echo file1
echo file2
echo file3
...

代替

echo file1 file2 file3

我有什么选择?

PS:我想要以下 Bash 代码的 Vifm 模拟:

for f in file1 file2 file3; do
  echo $f
done

答案1

选项1:用户定义命令

:com loop for f in %f; do %a "$f"; done

将其放入~/.config/vifm/vifmrc始终进行命令设置。

要应用于ls -l每个选定的文件,请发出

:loop ls -l

使用了两个宏:

  • %f正确引用所选文件名。
  • %a论据。在我们的示例中,ls并且-l.

选项 2:地图

:noremap b :!for f in %f; do  "$f"; done<A-B><A-B><Left>

再次将其放入~/.config/vifm/vifmrc以始终进行地图设置。

当您b在正常或可视模式下按 时,for 循环将显示在命令行中,并且光标将方便地位于 和 之间do"$f"因此您只需键入所需的命令并按 即可Enter

光标定位由以下部分完成<A-B><A-B><Left>:在命令行模式下,Alt+B将光标移动到上一个单词的开头,并且Left(显然)向左移动一个空格。

笔记&:如果运行时间较长并且您不希望 Vifm 在运行时阻塞,请记住将该命令添加到后台。

答案2

这将产生所需的输出:

:!echo %f | xargs -n 1 echo

当然你可以定义一个命令(例如for)以方便使用:

:com for echo %f | xargs -n 1

然后你只需输入:

:for echo

相关内容