2013-01-16 75 views
3

在vim中,是否可以使用正則表達式縮寫?例如,類似於vim的縮寫和正則表達式

:iab \([0-9]\{-}\)nm \\SI{\1}{\\nano\\meter} 

會將每個例如'50nm'擴展到'\ SI {50} {\ nano \ meter}'。

+2

你試試?它有用嗎? – romainl

+1

如何行':iab。*今天的工作已經完成。' – Kent

+0

Har har har。但是vim只是從字面上解釋'。*'和上面的表達式。 – Genausactly

回答

2

最好的辦法是給自己寫一個小助手功能。點擊全方位完成或用戶定義的完成(C-x C-u,請參閱:help 'cfu')是一個不錯的選擇。我在一個關鍵字上勾畫了imap的常規函數​​:

function! ExpandNanometers() 
    let items = matchlist(expand('<cword>'), '\v(\d+)nm') 
    if len(items) == 0 
     return 
    endif 
    let modified = '\SI{' . items[1] . '}{\nano\meter}' 
    exec "normal! ciw" . modified 
endf 
imap <C-l> <C-o>:call ExpandNanometers()<CR> 

不是最好的代碼,也許。在插入模式C-l上綁定時,如果光標位於單詞上或直接位於單詞後面,它將替換單詞50nm

0

我想添加此作爲評論以前的答案,但顯然我不能直到50代表。我也知道這是wayyy爲時已晚,但以供參考:(由分組去接聽)

如果鍵映射是可以接受的,當然像

imap <silent> <leader>obscure-key-of-choice <Esc>:%s/\v(\d+)nm/\\SI{\1}{\\nano\\meter}/g<CR>``i 

(即全球替代對整個文件與所需的模式) 會更容易維護?我喜歡避免使用vimscript來讀取/維護.vimrc!很明顯,您可以用您默認的密鑰替換obscure-key-of-choice。你只需要在鍵入所有文本後再進行一次,所以最好將其他鍵保存爲更常用的綁定!

的快捷方式取代類似

50nm blabla 73nm your-interesting-science-here 89nm 
... some new lines... 
we love nanometers nm! 34nm and finally 18nm 

的東西,如

\SI{50}{\nano\meter} blabla \SI{73}{\nano\meter} your-interesting-science-here \SI{89}{\nano\meter} 
... some new lines... 
we love nanometers nm! \SI{34}{\nano\meter} and finally \SI{18}{\nano\meter}