1

В другом потоке это потрясающее сопоставление было предложено как способ ввода заглавных слов 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. Как избежать их? Очевидная попытка предшествовать им с \ не работает!

Благодарю.

2 ответа2

4

В этом случае, поскольку это происходит в регулярном выражении, вы можете обойти эту проблему, разбив эти последовательности, используя группирование для разделения символов <>:

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 для символа < .

3

Да, выход из угловых скобок, вероятно, правильный путь.

Мое первоначальное предложение использовало \v для уменьшения количества обратных косых черт в шаблоне поиска, но оно не учитывало требования отображения.

Таким образом, решение состоит в том, чтобы удалить \v и перейти в безумие с обратной косой чертой, чтобы в итоге получилось что-то вроде:

nnoremap <F9> :s/\<insert\>\\|\<delete\>/\U\0<cr>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .