如何创建目录搜索并替换为vimscript和fzf
我正在尝试使用在vimscript中创建一个目录搜索和替换函数。当尝试使用如何创建目录搜索并替换为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>")
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窗口中保存任何编辑。