Как создать каталог для поиска и замены на vimscript и fzf

Я пытаюсь создать функцию поиска и замены каталогов в vimscript с помощью fzf. Место, где я блокирую это при попытке использовать Alt-a Привязка fzf для выбора всего списка. Я даже не уверен, возможно ли это, учитывая, что fzf является внешним процессом, но я могу ошибаться.

Вот моя текущая функция.

function! CWDSearchAndReplace()

    " Try to get word under cursor else prompt user for a word
    let wordToReplace = expand("<cword>")
    if wordToReplace == ""
        call inputsave()
        let wordToReplace = input("Replace: ")
        call inputrestore()
    endif

    " Prompt for replacement
    call inputsave()
    let replacement = input("Replace \"" . wordToReplace . "\" with: ")
    call inputrestore()
    execute "Ag " . wordToReplace

    " =====>  Here I'd like to execute Alt-a followed by <CR>

    execute "cdo %s//" . replacement . "/gc"
end function

Спасибо за вашу помощь!

1 ответ

Как указал создатель fzf.vim, нет необходимости использовать fzf здесь можно просто использовать ag,

function! s:ag_to_qf(line)
  let parts = split(a:line, ':')
  echo parts
  return {'filename': parts[0], 'lnum': parts[1], 'col': parts[2],
        \ 'text': join(parts[3:], ':')}
endfunction

function! AgToQF(query)
  call setqflist(map(systemlist('ag --column '.a:query), 's:ag_to_qf(v:val)'))
endfunction

function! CWDSearchAndReplace()
    let wordUnderCursor = expand("<cword>")
    call inputsave()
    let wordToReplace = input("Replace : ", wordUnderCursor)
    call inputrestore()
    call inputsave()
    let replacement = input("Replace \"" . wordUnderCursor . "\" with: ")
    call inputrestore()
    call AgToQF(wordUnderCursor)
    execute "cdo %s/" . wordToReplace . "/" . replacement ."/gc"
endfunction

nnoremap <leader>r :call FileSearchAndReplace()<CR>
Другие вопросы по тегам