2

使用 NeoVim 我遇到了:Gpush锁定编辑器的命令问题。有没有人可以解决这个问题?

4

2 回答 2

1

我了解您的问题是,当您推送到 github 时,您需要从 shell 手动输入用户名/密码。我不认为 GPush 的设计目的是允许这样做。这可能解决了你的问题

:te git push

您可能会在屏幕上看到一个终端窗口,询问用户名/密码。您需要i在终端上键入以进入插入模式,并且应该很好。

于 2018-02-18T06:53:46.743 回答
0

fugitive 的 push 将在 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 &

但这会阻止您看到命令的输出(这很糟糕:如果 fit push 失败了怎么办?)

这是为我解决的逃犯 GPush 的替换函数,可能对你也有用(把它放在你的 init.vim 中)。它利用 nvim 的异步作业控制:h job-control并在预览窗口中显示输出: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()
于 2018-02-12T09:30:22.307 回答