在另一个线程有人建议使用这种出色的映射来将 SQL 关键字大写:
noremap <leader>s <Esc>:s/\v<select>\|<from>\|<insert>\|<into>\|<table>\|<where>\|<delete>\|<limit>\|<order>\|<by>\|<asc>\|<desc>\|<set>\|<update>/\U\0/g<Return>
但是,看起来<insert>
和<delete>
是 VIM 关键字。如何转义它们?显然,在它们前面加上的尝试\
行不通!
谢谢。
答案1
是的,摆脱尖括号可能是正确的做法。
我原来的建议是\v
减少搜索模式中的反斜杠的数量,但它没有考虑到映射的要求。
因此,解决方案是删除\v
并疯狂使用反斜杠,最终得到如下结果:
nnoremap <F9> :s/\<insert\>\\|\<delete\>/\U\0<cr>
答案2
在这种情况下,由于这发生在正则表达式中,您可以通过使用分组来共享 <> 字符来分解这些序列,从而解决该问题:
noremap <leader>s <Esc>:s/\v<(select\|from\|insert\|into\|table\|where\|delete\|limit\|order\|by\|asc\|desc\|set\|update)>/\U\0/g<Return>
更一般地,您可以用 替换<
字符(全部字符或者只是问题单词之前的字符)<Char-0x3c>
,0x3c 是该字符的 ASCII 值<
。