tutorial fugitive vim vimdiff vim-fugitive

fugitive - vim-< surround



¿Cómo sale del modo vimdiff en vim, específicamente, para Fugitive? (13)

Método 1:

  • abrir una comparación por:

:windo diffthis

  • Ciérralo por

:windo diffoff

Método 2:

Recomiendo usar el comando más simple :q<CR>

cuando quieras hacerlo rápido, agrega la asignación:

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

y

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

Funciona bien para mi Salga de vimdiff solo con ,q , porque normalmente su cursor en el archivo anterior.

Estoy usando vim con la extensión fugitiva . Tiene un: comando Gdiff que lo lleva al modo vimdiff, pero ¿cuál es la forma correcta / rápida de cerrar / salir del modo vimdiff?

Es decir, digamos que estoy editando el archivo FooBar.txt en el repositorio Git. Enciendo: Gdiff, reviso mis cambios en vimdiff, y luego quiero volver y continuar editando FooBar.txt o cualquier otro archivo :)

ACTUALIZACIÓN 1: Voy a probar estos combos rápidos el siguiente día laborable :)

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

ACTUALIZACIÓN2: Mis asignaciones actuales (¡solo cierra la ventana de diferencias!)

"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

Además, ayúdeme a decidir si lo siguiente debería ser una respuesta: https://stackoverflow.com/a/15975201/275980


Esto funciona bien para mí, combinando algunas de las ideas existentes aquí:

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>


He encontrado una solución simple para esto. Puede comprobarlo aquí: 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


Mi función funcionará tanto desde la ventana de diferencias como desde la ventana de archivos. Pero probablemente no se manejará solo con múltiples diferencias abiertas. Para eso necesitarás usar fugitive#buffer(n).path() para escanear y hacer coincidir.

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

Añadir un enlace clave:

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


Ninguna de las soluciones anteriores funcionó para mí. Terminé haciendo esto en su lugar:

nnoremap <Leader>D :Gedit<CR><Cw>h :q<CR><Cw>k


No tuve suerte con diffoff , pero acabo de enterarme de que :Gedit sin argumentos lo regresará a la versión de trabajo del directorio del archivo, a diferencia de algunas versiones anteriores que estaba revisando.

Y como q (no es necesario para :q ) cerrará la barra lateral de diferencias, puede hacer q seguido de :Gedit para deshacerse de la barra lateral y luego volver a la versión actual del archivo.


Otra forma más. Lo que tengo en fugitive.vim: primero guarde algunas informaciones (s: gitbufname) cuando empiece diff:

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

y más tarde, al salir de la ventana de cambio de búfer al búfer guardado y restaurar:

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



Una alternativa a <CW><CO> , si tiene varias ventanas, se movería a la otra ventana de diferencias y hacer <CW>c , que cierra solo una ventana.

Si cierra la ventana de diferencia incorrecta, haga lo siguiente :Gedit

Tenga cuidado y no confunda <CW>c con <CW><CC>


Verifique el vimdiff entre diffthis y diffoff aquí en esta página .

El código:

nnoremap <silent> <Leader>df :call DiffToggle()<CR> function! DiffToggle() if &diff diffoff else diffthis endif :endfunction


esto es lo que tengo que dejar las ventanas vimdiff después de usar: Gdiff

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


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

Modo bastante diferencial y cierre otras ventanas dif. (Nota: fugitive eliminará automáticamente sus buffers ocultos.)


Puede ejecutar windo set nodiff noscrollbind y luego cerrar la segunda ventana.

Actualización: hay un comando diffoff . Use windo diffoff , no lo que escribí en la línea anterior.