Итак, я пытаюсь иметь привязку, которая запускает lvimgrep
в текущем выделенном тексте.vimscript: Получить текст выбора визуального режима при сопоставлении
fun! s:get_visual_selection()
let l=getline("'<")
let [line1,col1] = getpos("'<")[1:2]
let [line2,col2] = getpos("'>")[1:2]
return l[col1 - 1: col2 - 1]
endfun
vnoremap <expr> <script><leader>* ":lvimgrep /" . <SID>get_visual_selection() . "/j **/*." . expand("%:e") . " \|lopen"
Функция от комментария на вопрос: How to get visually selected text in VimScript
Дело в том, что он ведет себя очень странно: В большинстве случаев текст, возвращаемый функцией не соответствует визуальный отбор и чаще чем нет, это текст последнего визуального выбора, а не текущий.
Прошли тонны сообщений вокруг получения визуального текста выбора в vimscript, но не могут заставить его работать.
Я также пробовал https://stackoverflow.com/a/1534347/287085 без успеха (копирование выбора для регистрации) - получить сообщение об ошибке при вызове из моей привязки.
это вторая vimscript тайна ты решил для меня в день ... :) спасибо! – Raghu
@ Raghu: Рад, что я мог бы помочь. Ваши вопросы хорошо сформулированы и понятны ... продолжайте! –
Приятно, но не могли бы вы отвлечь часть «получить визуальный отбор» от другой части, для ясности? И что означает 'expand ("%: e ")' означает? –