Domanda

Sto usando vim con la latitante estensione . Ha un:? Il comando Gdiff che ti porta in modalità vimdiff, ma quello che è il diritto / rapido modo per chiudere / uscire dalla modalità vimdiff

vale a dire., Diciamo che mi sono l'editing del FooBar.txt file in repository Git. I fuoco up: Gdiff, rivedere i miei cambiamenti di vimdiff, e poi voglio tornare e continuare a modificare FooBar.txt o qualsiasi altro file:)

Update1: ho intenzione di dare a questi combo rapide una prova successivo giorno lavorativo :)

"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: I miei mappature correnti (! Chiude unica finestra diff)

"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

Inoltre, per favore aiutarmi a decidere se il seguente dovrebbe essere un anwser: https://stackoverflow.com/a/15975201/275980

È stato utile?

Soluzione

È possibile eseguire windo set nodiff noscrollbind e quindi chiudere la seconda finestra.

Aggiornamento: c'è un comando diffoff. Usa windo diffoff, non quello che ho scritto nel riga precedente.

Altri suggerimenti

Secondo: https://github.com/tpope/vim-fugitive/issues/36

  

chiudere l'altra finestra. Il modo più semplice per fare questo obiettivo se non si è spostato ad essa è <C-W><C-O>, che significa "fanno di questa finestra l'unica finestra".

Non ho avuto fortuna con diffoff, ma ho appena saputo che :Gedit senza argomenti vi riporterà alla versione working-directory del file, a differenza di alcuni versione precedente si stava rivedendo.

E come q (senza bisogno di :q) chiuderà la barra laterale diff, si può fare q seguito da :Gedit per sbarazzarsi della barra laterale e poi tornare alla versione corrente del file.

Questo funziona bene per me, che unisce alcune delle idee già esistenti qui:

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>

ho trovato una soluzione semplice per questo. È possibile controllare qui: 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

Nessuna delle soluzioni di cui sopra ha funzionato per me. Finito per fare questo, invece:

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

Un'alternativa al <C-W><C-O>, se si dispone di più finestre, sarebbe mossa per l'altra finestra diff e fare <C-W>c, che si chiude una sola finestra.

Se si chiude la finestra diff sbagliato fare un :Gedit

Fare attenzione e di non confondere con <C-W>c <C-W><C-C>

Questo è quello che ho da lasciare le finestre vimdiff dopo l'uso: Gdiff

nnoremap gD :q!<CR> :Gedit!<CR>

noremap <leader>do :diffoff \| windo if &diff \| hide \| endif<cr>

Piuttosto diff modalità e chiudere le altre finestre diff. (Nota:. Fuggitivo volontà eliminazione automatica suoi buffer nascosti)

La mia funzione funzionerà sia da diff Finestra e file. Ma probabilmente non gestirà per sé con più diff aperte. Per questo è necessario utilizzare fugitive#buffer(n).path() per la scansione e la partita.

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

Aggiungere una chiave vincolante:

nnoremap <silent> <leader>gD :Gdiffoff<CR>

Un altro modo. Quello che ho in fugitive.vim - primo salvataggio di alcune informazioni (s: gitbufname) quando diff inizia:

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

e successivamente al momento di lasciare la finestra di commutazione del buffer nel buffer salvato e ripristinare:

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
...

Controlla la commutazione tra il vimdiff diffthis e diffoff qui a questa pagina .

Il codice:

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

function! DiffToggle()
    if &diff
        diffoff
    else
        diffthis
    endif
:endfunction

Metodo 1:

  • aprire un confronto da:

:windo diffthis

  • chiuderlo:

:windo diffoff

Metodo 2:

Mi consiglia semplicemente utilizzando il comando più semplice: :q<CR>

quando si desidera farlo in fretta, aggiungere il mapping:

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

e

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

Funziona bene per me. Uscire vimdiff semplicemente ,q, perché normalmente il cursore nel vecchio file.

È stato usando il codice seguente in base a https://stackoverflow.com/a/15113951/10999673 :

    if !exists(":Gdiffoff")
        command Gdiffoff bw! fugitive://*
    endif

ma mi ha dato un errore "E93: più di una corrispondenza per ..." in un diff 3 vie, così ho invece usato la risposta da https://stackoverflow.com/a/4867969/10999673 e, infine, avere questo:

function! GetBufferList()
    return filter(range(1,bufnr('$')), 'buflisted(v:val)')
endfunction

function! GetMatchingBuffers(pattern)
    return filter(GetBufferList(), 'bufname(v:val) =~ a:pattern')
endfunction

function! WipeMatchingBuffers(pattern)
    let l:matchList = GetMatchingBuffers(a:pattern)

    let l:count = len(l:matchList)
    if l:count < 1
        echo 'No buffers found matching pattern ' . a:pattern
        return
    endif

    if l:count == 1
        let l:suffix = ''
    else
        let l:suffix = 's'
    endif

    exec 'bw ' . join(l:matchList, ' ')

    echo 'Wiped ' . l:count . ' buffer' . l:suffix . '.'
endfunction

command! -nargs=1 Gdiffoff call WipeMatchingBuffers('fugitive://')

Ho appena ottimizzato, copiato e incollato il codice nella mia .vimrc

Esecuzione :Gwrite dopo la fusione per la vostra soddisfazione chiuderà gli altri due riquadri diversi, oltre ad aggiornare la cache git per contrassegnare il file come fusi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top