Vim 缩写和正则表达式

4
在vim中,可以在缩写中使用正则表达式吗?例如,类似于:
:iab \([0-9]\{-}\)nm \\SI{\1}{\\nano\\meter}

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

2
你试过了吗?有效果了吗? - romainl
1
如何在代码中添加一行 :iab .* 今天的工作已完成。 - Kent
哈哈哈。但是vim只会字面上解释“.*”和我上面的表达式。 - Genausactly
2个回答

2

你最好写一个小帮手函数。利用omni完成或用户定义的完成(C-x C-u,见:help 'cfu')是一个不错的选择。我草拟了一个正常的函数来映射到一个键:

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等单词为所需单词。


1
我想把这个作为对之前答案的评论添加进来,但显然在获得50个声望之前我不能这样做。我也知道现在已经太晚了,但出于参考目的:
如果键映射是可以接受的(根据之前的回答),那么肯定有类似以下的东西:
imap <silent> <leader>obscure-key-of-choice <Esc>:%s/\v(\d+)nm/\\SI{\1}{\\nano\\meter}/g<CR>``i

(即在整个文件上进行所需模式的全局替换)是否更易于维护?我喜欢避免使用vimscript来保持.vimrc的可读性/可维护性!显然,您将 模糊选择的键 替换为您选择的模糊键。无论如何,您只需要在输入所有文本后执行一次,因此最好将其他按键保存为更常规有用的绑定!

该快捷方式将替换类似于

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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接