重复后在同一拆分中加载外部命令
load external command in the same split after repeating it
我想将来自命令行命令的一些文本加载到新的 vim 拆分中。我得到了这个工作,但如果我再次 运行 命令,它会不断打开新的拆分。
我想要实现的是将其放入同一个拆分中。我该怎么做?
nnoremap <leader>q :execute 'new <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr>
我建议通过 :pedit
命令使用预览 window。
nnoremap <leader>q :execute 'pedit <bar> wincmd p <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr>
不过,我们可以通过执行以下操作做得更好:
- 使用
g@
和 'opfunc'
创建一个 "query" 运算符
- 一个查询命令(感觉很vim-like这样做)
- 使用标准输入代替文件名
示例:
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
作为我的 "query" 命令。改变以满足您的需求。
如需更多帮助,请参阅:
:h :pedit
:h :windcmd
:h operator
:h g@
:h 'opfunc'
:h systemlist()
我想将来自命令行命令的一些文本加载到新的 vim 拆分中。我得到了这个工作,但如果我再次 运行 命令,它会不断打开新的拆分。
我想要实现的是将其放入同一个拆分中。我该怎么做?
nnoremap <leader>q :execute 'new <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr>
我建议通过 :pedit
命令使用预览 window。
nnoremap <leader>q :execute 'pedit <bar> wincmd p <bar> 0read ! bq query --dry_run --use_legacy_sql=false < ' expand('%')<cr>
不过,我们可以通过执行以下操作做得更好:
- 使用
g@
和'opfunc'
创建一个 "query" 运算符
- 一个查询命令(感觉很vim-like这样做)
- 使用标准输入代替文件名
示例:
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
作为我的 "query" 命令。改变以满足您的需求。
如需更多帮助,请参阅:
:h :pedit
:h :windcmd
:h operator
:h g@
:h 'opfunc'
:h systemlist()