vim - 重复后在同一拆分中加载外部命令

标签 vim vim-plugin

我想将来自命令行命令的一些文本加载到新的 vim 拆分中。我得到了这个工作,但如果我再次运行命令,它会不断打开新的拆分。

我想要实现的是将其放入同一个拆分中。我该怎么做?

nnoremap <leader>q :execute 'new <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr> 

最佳答案

我建议通过 :pedit 命令使用预览窗口。

nnoremap <leader>q :execute 'pedit <bar> wincmd p <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr>

但是,我们可以通过执行以下操作做得更好:

  • 使用 g@'opfunc' 制作“查询”运算符>
  • 一个查询命令(感觉很像 vim)
  • 使用标准输入代替文件名

例子:

function! s:query(str)
    pedit [query]
    wincmd p
    setlocal buftype=nofile
    setlocal bufhidden=wipe
    setlocal noswapfile
    %delete _
    call setline(1, systemlist('awk 1', a:str))
endfunction

function! s:query_op(type, ...)
    let selection = &selection
    let &selection = 'inclusive'
    let reg = @@

    if a:0
        normal! gvy
    elseif a:type == 'line'
        normal! '[V']y
    else
        normal! `[v`]y
    endif

    call s:query(@@)

    let &selection = selection
    let @@ = reg
endfunction

command! -range=% Query call s:query(join(getline(<line1>, <line2>), "\n"))
nnoremap \qq :.,.+<c-r>=v:count<cr>Query<cr>
nnoremap \q :set opfunc=<SID>query_op<cr>g@
xnoremap \q :<c-u>call <SID>query_op(visualmode(), 1)<cr>

注意:我使用 awk 1 作为我的“查询”命令。改变以满足您的需求。

有关更多帮助,请参阅:

:h :pedit
:h :windcmd
:h operator
:h g@
:h 'opfunc'
:h systemlist()

关于vim - 重复后在同一拆分中加载外部命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49011402/

相关文章:

vim - 有没有办法模拟 Vimscript/VimL 函数?

Vim:是否可以使用垂直选项卡列表?

vim - 更改 vim yankring 历史文件的位置

vim - 如何在vim中更快地滚动

vim - vim 中特定于键的 timeoutlen

vim - 根据文件名在vim中快速搜索特定窗口

Vim、长行和滚动

ruby-on-rails - Vim/command-T : Ignoring "gem-name" because its extensions are not built. 尝试 gem pristine "gem-name"

search - 有选择地设置 iskeyword

vim - 用于在 vim 中制作编号列表的宏?