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
...
Según: https://github.com/tpope/vim-fugitive/issues/36
Cierra la otra ventana. La forma más fácil de hacer esto si no lo ha cambiado es
<CW><CO>
, que significa "haga de esta ventana la única ventana".
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.