如何在映射中转义 vim 关键字?

如何在映射中转义 vim 关键字?

另一个线程有人建议使用这种出色的映射来将 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 值<

相关内容