Respuestas:
Puede haber otras formas, pero este enfoque le permite hacer más que agregar un fragmento, por lo que tiendo a usarlo bastante.
Ejecutar :Gdiff
comando Se abrirá una división con la versión del archivo actual que se encuentra actualmente en el índice a la izquierda / parte superior de la ventana original.
Mientras está en la ventana original (derecha o inferior), realice una selección visual de los cambios que desea git add
.
Ejecutar :diffput
comando, que puede operar en un rango. (la dp
clave no funciona en modo Visual).
Cierre esa segunda ventana guardando los cambios para actualizar el archivo en el índice. Aquí puede editarlo como desee antes de guardarlo, no tiene que coincidir exactamente con la versión original o nueva del archivo.
Tenga en cuenta que es :diffput
posible que no siempre le brinde lo que esperaría dependiendo de la estructura de los cambios (especialmente si está cometiendo solo una parte del bloque contiguo de cambios). Así que no olvide validar commit. Sin embargo, en la mayoría de las situaciones prácticas funciona bien.
Vimcasts tiene una gran serie en Fugitive.vim . El episodio Fugitive.vim: trabajar con el índice git sería el más útil para su pregunta.
Puede usar :Gdiff
para organizar solo partes de un archivo. La ejecución :Gdiff
le mostrará el archivo actual "diff-ed" con el escenario / índice. Usted puede simplemente utilizar los comandos diff de Vim ( dp
, do
, :diffput
, y :diffget
) para mover el trozo de la etapa / index. Luego escribe el archivo etapa / índice como lo haría con cualquier otro búfer, :w
/ :x
.
Como preguntó específicamente sobre soluciones que usan otros complementos, notaré que también puede organizar selecciones visuales usando vimagit , que es un complemento de Git (basado en el popular complemento Magit del otro editor ) centrado en la visualización, puesta en escena y confirmación de cambios.
Para organizar una selección visual usando Vimagit:
Ejecute el :Magit
comando para abrir un nuevo búfer que muestre todos los trozos modificados en su repositorio (no solo en un archivo),
Localice las líneas que desea poner en escena y realice su visual
selección,
Pulse el mapeo "etapa": S
.
vim-gitgutter
Etapa completa Hunk
<Leader>hs
o:GitGutterStageHunk
Etapa Parte de un trozo de solo adiciones (desde 8/2019)
Modo visual
{Visual}<Leader>hs
:'<,'>GitGutterStageHunk
'<,'>
como siempre se insertan para ti)Rango
:42,45GitGutterStageHunk
Etapa Parte de cualquier Hunk a través de la ventana de vista previa (desde 8/2019)
<Leader>hp
:wincmd P
<Leader>hs
o:GitGutterStageHunk
Actualizado: 17.8.2019 debido a confirmaciones recientes bc1d28d y b036fcf
:Gstatus
+D
para hacer lo mismo con fugitivo. De esta manera también puedo elegir el archivo en el que estoy operando entre la lista de archivos que se han modificado.