1

fzf を使用してvimscriptでディレクトリ検索と置換機能を作成しようとしています。私がブロックする場所は、Alt-afzf バインディングを使用してリスト全体を選択しようとするときです。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

ご協力いただきありがとうございます!

4

1 に答える 1

2

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>
于 2016-07-26T17:27:58.817 に答える