NeoVim Fugitive 插件 Gpush 锁定
NeoVim Fugitive Plugin Gpush Locking Up
使用 NeoVim 我遇到了 :Gpush
命令锁定编辑器的问题。有人能解决这个问题吗?
fugitive 的推送将在 nvim 上同步工作。来自逃犯帮助文件
*fugitive-:Gpush*
:Gpush [args] Invoke git-push, load the results into the |quickfix|
list, and invoke |:cwindow| to reveal any errors.
|:Dispatch| is used if available for asynchronous
invocation.
问题是 nvim 上没有调度函数。你可以 运行
!git push &
但这会阻止您看到命令的输出(这很糟糕,因为:如果合适的推送失败怎么办?)
这是为我解决的逃犯 GPush 的替换函数,可能对你也有用(把它放在你的 init.vim 中)。它利用 nvim 的异步作业控制 :h job-control
并在预览中向您显示输出 window :h preview-window
function! s:shell_cmd_completed(...) dict
wincmd P
setlocal modifiable
call append(line('$'), self.shell)
call append(line('$'), '########################FINISHED########################')
call append(line('$'), self.pid)
call jobstop(self.pid)
normal! G
setlocal nomodifiable
wincmd p
endfunction
function! s:JobHandler(job_id, data, event) dict
let str = join(a:data)
wincmd P
call append(line('$'), str)
normal! G
wincmd p
endfunction
function! GitPush()
let s:shell_tmp_output = tempname()
execute 'pedit '.s:shell_tmp_output
wincmd P
wincmd J
setlocal modifiable
setlocal nobuflisted
nnoremap <buffer>q :bd<cr>
wincmd p
let s:callbacks = {
\ 'on_stdout': function('s:JobHandler'),
\ 'on_stderr': function('s:JobHandler'),
\ 'on_exit': function('s:shell_cmd_completed'),
\ 'shell': 'git push'
\ }
let pid = jobstart('git push', s:callbacks)
let s:callbacks.pid = pid
endfunction
command! GitPush call GitPush()
我了解到您的问题是在推送到 github 时需要从 shell 手动输入 username/password。我不认为 GPush 旨在允许这样做。这可能会解决您的问题
:te git push
您可能会在屏幕上看到一个终端 window,要求 username/password。您需要输入 i
以在您的终端上进入插入模式,应该可以开始了。
使用 NeoVim 我遇到了 :Gpush
命令锁定编辑器的问题。有人能解决这个问题吗?
fugitive 的推送将在 nvim 上同步工作。来自逃犯帮助文件
*fugitive-:Gpush*
:Gpush [args] Invoke git-push, load the results into the |quickfix|
list, and invoke |:cwindow| to reveal any errors.
|:Dispatch| is used if available for asynchronous
invocation.
问题是 nvim 上没有调度函数。你可以 运行
!git push &
但这会阻止您看到命令的输出(这很糟糕,因为:如果合适的推送失败怎么办?)
这是为我解决的逃犯 GPush 的替换函数,可能对你也有用(把它放在你的 init.vim 中)。它利用 nvim 的异步作业控制 :h job-control
并在预览中向您显示输出 window :h preview-window
function! s:shell_cmd_completed(...) dict
wincmd P
setlocal modifiable
call append(line('$'), self.shell)
call append(line('$'), '########################FINISHED########################')
call append(line('$'), self.pid)
call jobstop(self.pid)
normal! G
setlocal nomodifiable
wincmd p
endfunction
function! s:JobHandler(job_id, data, event) dict
let str = join(a:data)
wincmd P
call append(line('$'), str)
normal! G
wincmd p
endfunction
function! GitPush()
let s:shell_tmp_output = tempname()
execute 'pedit '.s:shell_tmp_output
wincmd P
wincmd J
setlocal modifiable
setlocal nobuflisted
nnoremap <buffer>q :bd<cr>
wincmd p
let s:callbacks = {
\ 'on_stdout': function('s:JobHandler'),
\ 'on_stderr': function('s:JobHandler'),
\ 'on_exit': function('s:shell_cmd_completed'),
\ 'shell': 'git push'
\ }
let pid = jobstart('git push', s:callbacks)
let s:callbacks.pid = pid
endfunction
command! GitPush call GitPush()
我了解到您的问题是在推送到 github 时需要从 shell 手动输入 username/password。我不认为 GPush 旨在允许这样做。这可能会解决您的问题
:te git push
您可能会在屏幕上看到一个终端 window,要求 username/password。您需要输入 i
以在您的终端上进入插入模式,应该可以开始了。