Command
vifm:分別在每個選定的文件上執行命令
我想
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 在執行時阻塞,請記住將命令添加到後台。