在vim中,可以在缩写中使用正则表达式吗?例如,类似于:
将每个实例的“50nm”扩展为“\SI{50}{\nano\meter}”。
:iab \([0-9]\{-}\)nm \\SI{\1}{\\nano\\meter}
将每个实例的“50nm”扩展为“\SI{50}{\nano\meter}”。
:iab \([0-9]\{-}\)nm \\SI{\1}{\\nano\\meter}
你最好写一个小帮手函数。利用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
等单词为所需单词。
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}
:iab .* 今天的工作已完成。
- Kent