4

在vim中,是否可以在缩写中使用正则表达式?例如,像

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

会将“50nm”的每个实例扩展为“\SI{50}{\nano\meter}”。

4

2 回答 2

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>

也许不是最好的代码。绑定到 insert-mode C-l,如果光标在单词上或直接在它之后,它将替换诸如50nm所需的单词。

于 2013-01-16T18:02:11.557 回答
1

我想将此作为对先前答案的评论添加,但显然我不能直到 50 代表。我也知道这太晚了,但仅供参考:

如果键映射是可以接受的(按照上一个答案),肯定是这样的

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

(即具有所需模式的整个文件的全局替代)会更容易维护吗?为了 .vimrc 的可读性/维护,我喜欢避免使用 vimscript!显然你用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}
于 2014-05-05T00:28:15.813 回答