Как использовать escape () Vim с <C -R> в качестве первого аргумента? - PullRequest
1 голос
/ 05 марта 2020

Моя цель - выбрать несколько слов в визуальном режиме Vim (ну, в моем случае, neovim), нажать лидер + L и позволить fzf показывать результаты поиска для выбранной строки через :Rg. Я пришел с этим:

vnoremap <expr> <leader>l 'y:<C-U>Rg '. shellescape(escape('<C-R>"', '()[]><')) .'<CR>'

, который работает, но когда я выбираю текст options(:modifier) и запускаю поиск, команда escape() не выходит за скобки и Rg не удается вернуть результаты.

Короче говоря, я ожидаю, что эта команда будет запускаться:

:Rg 'options\(:modifier\)'

И вместо этого я получаю:

:Rg 'options(:modifier)'

Я думаю, я не могу использовать <C-R> в этом контексте, но я не могу понять, почему?


ОБНОВЛЕНИЕ : благодаря полезному ответу пользователя D. Бен Нобл , указывающий, что я могу бросить и построить отображение по-другому, я закончил с этим, решая мою проблему:

vnoremap <leader>l "ky:exec 'Rg '. shellescape(escape(@k, '()[]{}?.'))<CR>

1 Ответ

2 голосов
/ 05 марта 2020

Вам не нужно - все регистры доступны в виде префикса переменной с @ (все доступны для чтения, кроме @_, я думаю, что большинство из них доступно для записи).

Поэтому вместо <C-R>" используйте @"

...