如何创建目录搜索并替换为vimscript和fzf

如何创建目录搜索并替换为vimscript和fzf,vim,fzf,Vim,Fzf,我正在尝试使用在vimscript中创建一个目录搜索和替换函数。当尝试使用Alt-afzf绑定选择整个列表时,I阻塞的位置。考虑到fzf是一个外部流程,我甚至不确定这是否可行,但我可能错了 这是我当前的函数 function! CWDSearchAndReplace() " Try to get word under cursor else prompt user for a word let wordToReplace = expand("<cword>")

我正在尝试使用在vimscript中创建一个目录搜索和替换函数。当尝试使用
Alt-a
fzf绑定选择整个列表时,I阻塞的位置。考虑到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
函数!CWDSearchAndReplace()
“尝试在光标下获取单词,否则提示用户输入单词
让wordToReplace=展开(“”)
如果wordToReplace==“”
调用inputsave()
让wordToReplace=input(“Replace:”)
调用inputrestore()
恩迪夫
“更换提示
调用inputsave()
let replacement=input(“Replace\”.wordToReplace.“\”为:”)
调用inputrestore()
执行“Ag”。文字替换
“====>在这里,我要执行Alt-a,然后执行
执行“cdo%s/.”替换。“/gc”
端函数
感谢您的帮助!

正如的创建者所说,这里不需要使用
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>
函数!s:ag\u to\u qf(行)
让零件=拆分(a:线“:”)
回声部分
返回{'filename':部分[0],'lnum':部分[1],'col':部分[2],
\“文本”:联接(部分[3:],':')}
端功能
函数!AgToQF(查询)
调用setqflist(映射(systemlist('ag--column'.a:query),'s:ag_to_qf(v:val)'))
端功能
函数!CWDSearchAndReplace()
让wordundersor=展开(“”)
调用inputsave()
让wordToReplace=input(“Replace:”,wordundersor)
调用inputrestore()
调用inputsave()
让replacement=input(“Replace\”.wordundersor.“\”替换为:”)
调用inputrestore()
呼叫AgToQF(WordUndersor)
执行“cdo%s/”.wordToReplace./“.replacement./”/gc”
端功能
nnoremap r:调用FileSearchAndReplace()

Alt-a是从哪里来的?你是在谈论还是?为什么在你的函数中有这么多第三方工具?fzf.vim.Ag是fzf.vim的一部分,cdo现在是vim的一部分。Alt-a来自fzf.vim文档,并且是硬编码的,因为fzf的使用方式。一种方便快捷的跨文件搜索和替换方法是使用vim ripgrep for searching和quickfix reflector,以在生成的quickfix窗口中保存任何编辑。