2011-03-03 90 views
1


我有了這個樣本名單:
cat dog lion VIM /其他編輯批量編輯

而這種代碼在我需要它插入到:
<li><img src="images/opcje/{value}.png" alt=""/><label for="wezel">{value}</label><input type="checkbox" id="wezel" {if strstr($opcje,"-{order_number}-")} checked {/if} name="opcje[]" value="-{order_number}-"/></li>

而且輸出示例:
<li><img src="images/opcje/cat.png" alt=""/><label for="wezel">cat</label><input type="checkbox" id="wezel" {if strstr($opcje,"-1-")} checked {/if} name="opcje[]" value="-1-"/></li>
有沒有快速和乾燥的方法呢?

+1

vim的更多交互編輯。你可能想要使用sed和/或awk來做這樣的事情 - 假設你從文件中讀取貓/狗/獅子的東西開始。 – 2011-03-03 17:30:46

+1

是的,我可以從文件中讀取它。你能舉一些例子嗎? – methyl 2011-03-03 17:38:07

+0

我用一個示例宏回答 – 2011-03-03 18:04:26

回答

1

你可以使用宏。它的工作像下面這樣:

  1. vim my.xml
  2. :sp拆分窗口
  3. C-w j去窗口底部
  4. :e mylist.txt

現在,你必須打開這兩個文件。讓我們來製作一個宏!

  1. qa記錄的 'a' 宏
  2. dw刪除第一個列表項
  3. C-w k去頂窗
  4. 1G去my.xml年初
  5. /\{value\}並按返回查找第一個實例{value}
  6. P to過去之前{value}
  7. wd7l跳轉到{value}並刪除它
  8. C-w j跳轉到下面的窗口
  9. q結束錄製宏

現在調用宏幾次。對於10項列表,請嘗試:

[email protected]

瞧!

1

你可以在vim中用宏來做到這一點。您將開始通過按q後跟一些關鍵字來記錄您的宏,宏將保存在其中。例如qa將開始將宏記錄到密鑰(或寄存器)a中。然後你會做一次替換,但是你必須確保這樣做,如果你以後再執行宏,它也可以用於列表中的下一個單詞。再次按q停止錄製。如果您正確記錄了宏,則可以通過按@a執行保存在寄存器a中的宏,該宏將自動執行下一個替換。

+0

太棒了,生病了試試吧! – methyl 2011-03-03 18:02:31

1

也許類似下面的小腳本會更合適:

#bash script 
i=0; 
for val in {cat,dog,lion}; do 
    i=$((i+1)); 
    sed -e "s/{value}/$val/g;s/{order_number}/$i/g" your_code > new_code_$i 
done