Command

vifm:分別在每個選定的文件上執行命令

  • September 7, 2021

我想for為 vifm 循環模擬。

當我沒有選擇任何我可以輸入的文件時:!echo %f,我會看到echo以目前文件名作為參數的輸出。

當我選擇幾個文件時,:!echo %f會產生echo所有選定文件名的輸出,並以空格作為參數。

如果我想對echo每個選定的文件應用任何程序(例如)怎麼辦?所以

echo file1
echo file2
echo file3
...

代替

echo file1 file2 file3

我有什麼選擇?

PS我想要類似這樣的bash程式碼:

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

這將產生所需的輸出:

:!echo %f | xargs -n 1 echo

當然,您可以定義一個命令(例如for)以方便使用:

:com for echo %f | xargs -n 1

然後你可以輸入:

:for echo

選項 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 在執行時阻塞,請記住將命令添加到後台。

引用自:https://unix.stackexchange.com/questions/545415