65

fugitive extensionで vim を使用しています。vimdiff モードに入る :Gdiff コマンドがありますが、vimdiff モードを閉じる/終了する正しい/迅速な方法は何ですか?

つまり、Git リポジトリで FooBar.txt ファイルを編集しているとしましょう。:Gdiff を起動し、vimdiff で変更を確認してから、戻って FooBar.txt またはその他のファイルの編集を続けたい :)

更新 1:翌営業日にこれらのクイック コンボを試してみます :)

"vimdiff current vs git head (fugitive extension)
nnoremap <Leader>gd :Gdiff<cr> 
"switch back to current file and closes fugitive buffer
nnoremap <Leader>gD :diffoff!<cr><c-w>h:bd<cr>

UPDATE2:現在のマッピング (差分ウィンドウのみを閉じます!)

"vimdiff current vs git head (fugitive extension)
nnoremap <Leader>gd :Gdiff<cr> 
"switch back to current file and closes fugitive buffer
nnoremap <Leader>gD <c-w>h<c-w>c

また、以下が答えになるかどうかを判断するのを手伝ってください:https://stackoverflow.com/a/15975201/275980

4

15 に答える 15

56

実行windo set nodiff noscrollbindしてから、2 番目のウィンドウを閉じることができます。

更新:diffoffコマンドがあります。windo diffoff前の行で書いたものではなく、 を使用してください。

于 2010-04-24T08:24:16.510 に答える
39

によると:https://github.com/tpope/vim-fugitive/issues/36

もう一方のウィンドウを閉じます。フォーカスを移動していない場合にこれを行う最も簡単な方法は<C-W><C-O>、「このウィンドウを唯一のウィンドウにする」ことです。

于 2011-10-14T02:59:24.023 に答える
13

私は運が悪かったのdiffoffですが:Gedit、引数を指定しないと、レビューしていた以前のバージョンとは対照的に、ファイルの作業ディレクトリ バージョンに戻ることがわかりました。

また、q( は必要ありません):qは diff サイドバーを閉じるため、 を実行してサイドバーを削除し、ファイルの現在のバージョンに戻ることができます。q:Gedit

于 2011-02-18T23:03:18.440 に答える
4

上記の解決策はどれも私にはうまくいきませんでした。代わりにこれを行うことになりました:

nnoremap <Leader>D :Gedit<CR><C-w>h :q<CR><C-w>k

于 2011-03-24T09:15:41.250 に答える
4

これに対する簡単な解決策を見つけました。ここで確認できます: https://gist.github.com/radmen/5048080

" Simple way to turn off Gdiff splitscreen
" works only when diff buffer is focused
if !exists(":Gdiffoff")
  command Gdiffoff diffoff | q | Gedit
endif
于 2013-02-27T14:00:20.843 に答える
4

これは、ここにある既存のアイデアのいくつかを組み合わせて、私にとってはうまくいきます。

function! MyCloseDiff()
  if (&diff == 0 || getbufvar('#', '&diff') == 0)
        \ && (bufname('%') !~ '^fugitive:' && bufname('#') !~ '^fugitive:')
    echom "Not in diff view."
    return
  endif

  " close current buffer if alternate is not fugitive but current one is
  if bufname('#') !~ '^fugitive:' && bufname('%') =~ '^fugitive:'
    if bufwinnr("#") == -1
      b #
      bd #
    else
      bd
    endif
  else
    bd #
  endif
endfunction
nnoremap <Leader>gD :call MyCloseDiff()<cr>
于 2011-04-04T13:12:35.163 に答える
1

このページでとのvimdiff間の切り替えを確認してください 。diffthisdiffoff

コード:

nnoremap <silent> <Leader>df :call DiffToggle()<CR>

function! DiffToggle()
    if &diff
        diffoff
    else
        diffthis
    endif
:endfunction
于 2013-01-10T11:12:01.547 に答える
1

方法 1:

  • 次の方法で比較を開きます。

:windo diffthis

  • 次の方法で閉じます。

:windo diffoff

方法 2:

最も単純なコマンドを使用することをお勧めします。:q<CR>

すばやく実行したい場合は、マッピングを追加します。

" Set mapleader
let mapleader = ","
let g:mapleader = ","

" Quickly close the current window
nnoremap <leader>q :q<CR>

それは私にとってはうまくいきます。,q通常、カーソルは古いファイルにあるため、vimdiffを終了します。

于 2016-10-19T06:50:40.453 に答える
0

私の機能は、差分ウィンドウとファイル ウィンドウの両方から機能します。ただし、複数の差分を開いた状態では、おそらくそれ自体を処理できません。そのためにはfugitive#buffer(n).path()、スキャンして照合するために使用する必要があります。

command! Gdiffoff call Gdiffoff()
function! Gdiffoff()
    let diffbufnr = bufnr('^fugitive:')
    if diffbufnr > -1 && &diff
        diffoff | q
        if bufnr('%') == diffbufnr | Gedit | endif
        setlocal nocursorbind
    else
        echo 'Error: Not in diff or file'
    endif
endfunction

キー バインドを追加します。

nnoremap <silent> <leader>gD :Gdiffoff<CR>
于 2014-08-27T15:16:33.837 に答える
0

これは、:Gdiff を使用した後に vimdiff ウィンドウを離れなければならないものです。

nnoremap gD :q!<CR> :Gedit!<CR>
于 2012-07-05T13:17:14.703 に答える
0

さらに別の方法。fugitive.vim にあるもの - 最初に diff の開始時にいくつかの情報 (s:gitbufname) を保存します。

function! s:Diff(vert,...) abort
  call sy#toggle()
  let s:startcol = winwidth(0)
  let &columns=(winwidth(0) * 2 - 20)
...
    if getwinvar('#', '&diff')
      let s:gitbufname = bufname("%")
      wincmd p
      call feedkeys(winnr."\<C-W>w", 'n')
    endif
...
endfunction

その後、バッファー切り替えウィンドウを保存されたバッファーに残し、復元する場合:

augroup fugitive_diff
autocmd!
autocmd BufWinLeave *
  \ if s:can_diffoff(+expand('<abuf>')) && s:diff_window_count() == 2 |
  \   if exists('s:gitbufname') && winnr() != bufwinnr(s:gitbufname) |
  \     let nr = bufnr("%") | exe bufwinnr(s:gitbufname).'wincmd w' | exe 'buf'.nr |
  \   endif |
  \   call s:diffoff_all(getbufvar(+expand('<abuf>'), 'git_dir')) |
  \   call sy#toggle() |
  \   call airline#load_theme() | call airline#update_statusline() |
  \   let &columns=s:startcol |
  \ endif
...
于 2015-04-03T00:03:51.800 に答える