2012-11-16 32 views
1

我正在使用VIM清理數據源,並將其格式正確地用於SIMILE時間軸。是否可以輕鬆翻譯vim搜索並將宏替換成sed?

VIM效果很好,但據我所知它不能自動化,所以我想用SED來清理數據源。我知道SED可以用於搜索和替換,但是當我使用VIM清理數據時,我使用了VIM宏和vim regex搜索和替換的組合。

SED中是否有與VIM宏相當的功能?

+0

是否可以給出1-2個示例用例? –

+1

如果你真的想要,你*可以*腳本VIM - 見':help -c' –

回答

4

對於非常簡單的文本處理(即使用Vim代替增強 '的sed' 或 '的awk' ,也許剛剛受益於:substitute命令中的增強正則表達式),請使用Ex模式

REM Windows 
call vim -N -u NONE -n -es -S "commands.ex" "filespec" 

注:無聲批處理模式-s-ex打亂了Windows控制檯,所以你可能 做cls Vim的運行後進行清理。

# Unix 
vim -T dumb --noplugin -n -es -S "commands.ex" "filespec" 

注意:Vim會掛起等待輸入,如果「commands.ex」文件不存在 ;更好地檢查它的存在!另外,Vim可以讀取來自stdin的命令 。您也可以使用從 stdin中讀取的文本填充新緩衝區,如果使用 - 參數,則可以從stderr讀取命令。

對於更高級的處理涉及多個窗口,而真正自動化的Vim(你可能會與用戶進行交互或離開Vim的運行,讓 用戶接管),使用的 :

vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec" 

這裏有一個使用參數摘要:

-T dumb   Avoids errors in case the terminal detection goes wrong. 
-N -u NONE  Do not load vimrc and plugins, alternatively: 
--noplugin  Do not load plugins. 
-n    No swapfile. 
-es    Ex mode + silent batch mode -s-ex 
        Attention: Must be given in that order! 
-S ...   Source script. 
-c 'set nomore' Suppress the more-prompt when the screen is filled 
        with messages or output to avoid blocking. 
+0

什麼是ex模式? – leeand00

+0

':help ex-mode' –

3

其實,你可以自動化vim,以及所有以前的vi版本。 (但是,通常你會使用sed(1)。)Vim可以使用ex(1)鏈接啓動,在這種情況下,它仍然處於行模式。

例如:

ex - /etc/hosts << \eof 
$a 
10.11.12.13 a-host-name 
. 
w /tmp/otherhosts 
q 
eof 

如果你把在autovim.sh你可以只:

$ sh autovim.sh 
$ cat /tmp/otherhosts 
+0

什麼是前?我不熟悉這一點。 – leeand00

+1

當安裝vim時,也會安裝名爲ex的鏈接。當vim啓動時,它檢查是否使用vim或ex運行。如果是vim,它以curses(screen)模式啓動...... vim調用* visual *模式,但如果通過ex啓動,它將以行模式啓動。無論哪種方式,您都可以切換。在視覺模式下輸入'Q'或在線模式下輸入'vi',你會發現自己處於另一種模式。 – DigitalRoss