¿Cómo puedo configurar un editor para trabajar con Git en Windows?

Estoy probando Git en Windows . Llegué al punto de probar "git commit" y obtuve este error:

La terminal es tonta, pero no se define VISUAL ni EDITOR. Proporcione el post usando la opción -m o -F.

Entonces descubrí que necesito tener una variable de entorno llamada EDITOR. No hay problema. Lo configuré para que apunte al Bloc de notas. Eso funcionó, casi. El post de confirmación pnetworkingeterminado se abre en el Bloc de notas. Pero el Bloc de notas no admite alimentaciones de línea sin formatting. Salí y obtuve Notepad ++ , pero no puedo entender cómo configurar Notepad ++ como %EDITOR% de tal manera que funcione con Git como se esperaba.

No estoy casado con Notepad ++. En este punto, no me importa qué editor utilizo. Solo quiero poder escribir posts de confirmación en un editor en lugar de la command-line (con -m ).

Aquellos de ustedes que usan Git en Windows: ¿Qué herramienta usan para editar sus posts de compromiso, y qué tuvieron que hacer para que funcione?

Actualización de septiembre de 2015 (6 años después)

El último lanzamiento de git-for-Windows (2.5.3) ahora incluye:

Al configurar el git config core.editor notepad , los usuarios ahora pueden usar notepad.exe como su editor pnetworkingeterminado .
La configuration de git config format.commitMessageColumns 72 recogerá con el contenedor de la libreta y se git config format.commitMessageColumns 72 el post de confirmación después de que el usuario lo edite.

Ver commit 69b301b de Johannes Schindelin ( dscho ) .


Respuesta original

Acabo de probarlo con la versión de Git 1.6.2.msysgit.0.186.gf7512 y Notepad ++ 5.3.1

Prefiero no tener que establecer una variable EDITOR, así que probé:

 git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\"" # or git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*" 

Eso siempre da:

 C:\prog\git>git config --global --edit "c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'. 

Si defino un npp.bat que incluye:

 "c:\Program Files\Notepad++\notepad++.exe" %* 

y escribo:

 C:\prog\git>git config --global core.editor C:\prog\git\npp.bat 

Simplemente funciona desde la session de DOS, pero no desde el shell git .
(No es que con el mecanismo de configuration core.editor, un script con " start /WAIT... " no funcione, pero solo abre una nueva window de DOS)


La respuesta de Bennett menciona la posibilidad de evitar agregar un guión, pero hacer reference directamente al progtwig entre citas simples :

 git config --global core.editor \ "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" 

O si estás en un sistema de 64 bits:

 git config --global core.editor \ "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" 

Pero prefiero usar un script (ver a continuación): de esa manera puedo jugar con diferentes routes o diferentes opciones sin tener que volver a registrar una git config .


La solución real (con un script) era darse count de que:
a lo que se refiere en el file de configuration es en realidad un script de shell ( /bin/sh ) , no un script de DOS.

Entonces, ¿qué es el trabajo?

 C:\prog\git>git config --global core.editor C:/prog/git/npp.bat 

con C:/prog/git/npp.bat :

 #!/bin/sh "c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*" 

o

 #!/bin/sh "c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*" 

Con esa configuration, puedo hacer ' git config --global --edit ' desde DOS o Git Shell, o puedo hacer ' git rebase -i ... ' desde DOS o Git Shell.
Los commands Bot desencadenarán una nueva instancia de notepad ++ (de ahí la opción -multiInst '), y esperarán a que esa instancia se cierre antes de continuar.

Tenga en count que solo uso '/', no \ '. E instalé msysgit usando la opción 2. (Agregue el directory git\bin a la PATH entorno PATH , pero sin anular algunas herramientas incorporadas de Windows)

El hecho de que el contenedor notepad ++ se llame .bat no es importante.
Sería mejor nombrarlo 'npp.sh' y ponerlo en el directory [git]\cmd (o en cualquier directory al que haga reference su variable de entorno PATH).


Ver también:

  • ¿Cómo veo la salida 'git diff' con el progtwig visual diff? para la teoría general
  • ¿Cómo configuro DiffMerge con msysgit / gitk? para otro ejemplo de herramienta externa (DiffMerge y WinMerge)

lightfire228 agrega en los comentarios :

Para cualquier persona que tenga un problema donde N ++ solo abra un file en blanco, y git no acepte su post de confirmación, consulte " Cancelación de la confirmación debido a un post vacío ": cambie su file .bat o .sh para decir:

 "<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Eso le dirá al Bloc de notas ++ que abra el file de confirmación temporal, en lugar de uno nuevo en blanco.

Basándose en la respuesta de Darren , para usar Notepad ++ simplemente puede hacer esto (todo en una línea):

En sistema operativo de 32 bits: git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

En 64 bit OS git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Obviamente, la parte C:/Program Files/Notepad++/notepad++.exe debe ser la ruta al ejecutable de Notepad ++ en su sistema. Por ejemplo, en Windows 7 es probable que sea C:/Program Files (x86)/Notepad++/notepad++.exe . Gracias a los comentaristas por señalar esto.

Funciona como un encanto para mí.

De todos modos, solo he estado jugando con esto y encontré que lo siguiente funciona bien para mí:

 git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m" 

No creo que a CMD le gusten las comillas simples, por lo que debe usar comillas dobles "para especificar el argumento de cadena embedded en el espacio".

Cygwin (que creo que es la plataforma subyacente para Git's Bash) le gusta tanto ' como " ; se pueden especificar routes similares a CMD, usando / lugar de \ , siempre que la cadena se cotice, es decir, en este caso, usando comillas simples.

El -m anula / indica el uso de varios editores y no es necesario un %* al final.

Editar: Después de actualizar a vim 7.3, he llegado a la conclusión de que la forma más limpia y fácil de hacer esto es:

  1. Agregue la carpeta principal de Vim a su ruta (haga clic con el button derecho en Mi PC -> Propiedades -> Avanzado -> Variables de entorno)

  2. Ejecuta esto: git config --global core.editor "gvim --nofork '%*'"

Si lo haces de esta manera, entonces estoy bastante seguro de que funcionará también con cygwin.

Respuesta original:

Incluso con un par de respuestas relacionadas con vim, estaba teniendo problemas para hacer que esto funcione con gvim en Windows (sin usar un file por lotes o% EDITOR% o cygwin).

Lo que finalmente llegué es agradable y limpio, y se basa en algunas de las soluciones aquí:

 git config --global core.editor \ "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'" 

Una cosa que me tomó un time es que estas no son las barras invertidas estilo Windows, son barras diagonales normales.

Notepad ++ funciona bien, aunque elijo usar el Bloc de notas, -m, o incluso algunas veces la "edición" incorporada.

El problema que se encuentra con Notepad ++ está relacionado con la forma en que git está ejecutando el ejecutable del editor. Mi solución a esto es configurar EDITOR en un file por lotes, en lugar del ejecutable del editor real, que hace lo siguiente:

 start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %* 

/ WAIT le dice a la session de línea de command que se detenga hasta que la aplicación salga, por lo que podrá editar al contenido de su corazón mientras git lo está esperando. % * pasa todos los arguments al file de process por lotes a Notepad ++.

 c:\src>echo %EDITOR% c:\tools\runeditor.bat 

Wordpad!

Estoy contento de usar vim, pero como bash introducir Git en la compañía, quería algo que todos tuviéramos, y descubrí que Wordpad parece funcionar bien (es decir, Git espera hasta que hayas terminado de editar y cerrar la window).

 git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"' 

Eso es usar Git Bash en msysgit; No lo he intentado desde el símbolo del sistema de Windows (si eso hace alguna diferencia).

También uso Cygwin en Windows, pero con gvim (a diferencia del vim basado en terminal).

Para que esto funcione, he hecho lo siguiente:

  1. Creó un file por lotes de una línea (llamado git_editor.bat ) que contiene lo siguiente:
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. git_editor.bat en mi PATH .
  3. Establecer GIT_EDITOR=git_editor.bat

Una vez hecho esto, git commit , etc. invocará correctamente el ejecutable gvim.

NOTA 1: La opción --nofork a gvim asegura que bloquea hasta que se haya escrito el post de confirmación.

NOTA 2: Se requieren las comillas alnetworkingedor de la ruta de acceso a gvim si tiene espacios en la ruta.

NOTA 3: Las comillas alnetworkingedor de "% *" son necesarias solo en caso de que git pase una ruta de file con espacios.

Gracias a la comunidad SO … y un poco de investigación, pude get mi editor favorito, EditPadPro , para trabajar como editor principal con msysgit 1.7.5.GIT y TortoiseGit v1.7.3.0 sobre WinXP SP3 …

Siguiendo los consejos anteriores, agregué la ruta a un script bash para el editor de código …

 git config --global core.editor c:/msysgit/cmd/epp.sh 

Sin embargo, después de varios bashs fallidos de las soluciones mencionadas … finalmente pude hacer que esto funcionara. Según la documentation de EditPadPro, agregar el indicador '/ newinstance' permitiría al shell esperar la input del editor ….

La bandera ' / newinstance ' fue la key en mi caso …

 #!/bin/sh "C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*" 

Vim / Gvim funciona bien para mí.

 >echo %EDITOR% c:\Vim\Vim71\vim.exe 

Este es el 1 síntoma de problemas mayores. Cabe destacar que tiene algo que establece TERM = tonto. Otras cosas que no funcionan correctamente son el less command que dice que no tiene un terminal completamente funcional. Parece que esto es causado comúnmente por tener TERM establecido en algo en sus variables de entorno de Windows global. Para mí, el problema surgió cuando instalé Strawberry Perl, algo de información sobre esto está en el error msysgit para este problema , así como en varias soluciones.

La primera solución es arreglarlo en su ~ / .bashrc agregando:

 export TERM=msys 

Puede hacer esto desde el prompt de Git BASH de esta manera:

 echo "export TERM=msys" >> ~/.bashrc 

La otra solución que finalmente es lo que hice porque no me importan las razones de Strawberry Perl para agregar TERM = tonto a la configuration de mi entorno es ir y eliminar el TERM = tonto como se indica en este comentario en el informe de error de msysgit .

Panel de control / Sistema / Avanzado / Variables de entorno … (o similar, dependiendo de su versión de Windows) es donde las variables de entorno adhesivas se configuran en Windows. Por defecto, TERM no está configurado. Si TERM se establece allí, entonces usted (o uno de los progtwigs que ha instalado, por ejemplo, Strawberry Perl) lo ha configurado. Elimina esa configuration y deberías estar bien.

Del mismo modo, si usa Strawberry Perl y se preocupa por el cliente CPAN o algo así, puede dejar el TERM=dumb solo y usar unset TERM en su file ~ / .bashrc que tendrá un efecto similar a establecer un término explícito como el anterior.

Por supuesto, todas las otras soluciones son correctas y puedes usar git config --global core.editor $MYFAVORITEEDITOR para asegurarte de que git usa tu editor favorito cuando necesita lanzar uno para ti.

Tenía PortableGit 1.6 funcionando bien, pero después de actualizar a PortableGit-1.7, el lanzamiento de Windows tenía problemas. Algunos de los commands de git abren Notepad ++. Exe pero otros no, especialmente git rebase se comporta de manera diferente.

El problema es que algunos commands ejecutan el process cmd de Windows. Algunos usan el process cmd de Unix. Quiero dar attributes de inicio al editor de Notepad ++, así que necesito tener un script personalizado. Mi solución es esto.

1) Crea una secuencia de commands para ejecutar un editor de text apropiado. El script se ve raro, pero maneja las windows y la variación de Unix. c: /PortableGit/cmd/git-editor.bat

 #!/bin/sh #open a new instance function doUnix() { "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar $* exit } doUnix $* :WINCALL "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar %* 

2) Establecer la variable global core.editor La secuencia de commands se guardó en la carpeta git / cmd, por lo que ya está en una ruta de gitconsole, esto es obligatorio ya que la ruta completa puede no funcionar correctamente.

 git config --global core.editor "git-editor.bat" 

Ahora puedo ejecutar git commit -a y git rebase -i commands maestros . Pruébalo si tienes problemas en la herramienta de Windows Git.

Utilizo git en múltiples plataforms, y me gusta usar la misma configuration de git en todas ellas. (De hecho, tengo todos mis files de configuration bajo control de lanzamiento con git, y puse un clon de repository git en cada máquina.) La solución que se me ocurrió es la siguiente:

Configuré mi editor en giteditor

 git config --global core.editor giteditor 

Luego creo un enlace simbólico llamado giteditor que está en mi PATH . (Tengo un directory bin personal, pero en cualquier lugar de PATH funciona.) Ese enlace apunta a mi actual editor de elección. En diferentes máquinas y diferentes plataforms, uso diferentes editores, por lo que no tengo que cambiar mi configuration de git universal ( .gitconfig ), solo el enlace al que gititor apunta.

Los enlaces simbólicos son manejados por cada sistema operativo que conozco, aunque pueden usar diferentes commands. Para Linux, usa ln -s . Para Windows, use el cmk incorporado mklink . Tienen diferentes syntax (que debes search), pero todo funciona de la misma manera, realmente.

Esta es mi configuration para usar Geany como editor de git:

 git config --global core.editor C:/path/to/geany.bat 

con el siguiente contenido en geany.bat:

 #!/bin/sh "C:\Program Files\Geany\bin\Geany.exe" --new-instance "$*" 

Funciona tanto en la console de DOS como en msysgit.

He tenido dificultades para que Git coopere con Wordpad, KomodoEdit y casi todos los demás editores que le doy. La mayoría abre para editar, pero git claramente no espera a que ocurra el cierre / cierre.

Como una muleta, acabo de estar haciendo ie

 git commit -m "Fixed the LoadAll method" 

para mantener las cosas en movimiento. Tiende a mantener mis posts de compromiso un poco más cortos de lo que probablemente deberían ser, pero claramente hay algo de trabajo por hacer en la versión de Windows de git.

El GitGUI tampoco es tan malo. Se necesita un poco de orientación, pero después de eso, funciona bastante bien.

Uso Cygwin en Windows, entonces uso:

 export EDITOR="emacs -nw" 

El -nw es para no-windows , es decir, dígale a Emacs que no intente y use X11.

Las combinaciones de teclas de Emacs no funcionan para mí desde un shell de Windows, así que solo usaría esto desde un shell de Cygwin … (se recomienda rxvt).

Basado en la sugerencia de VonC anterior , esto funcionó para mí (me estaba volviendo loco):

 git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait" 

-wait puede causar problemas, especialmente si está trabajando con gerrit y cambia los identificadores que deben copyrse manualmente en la parte inferior de su post de confirmación

Para Atom puedes hacer

 git config --global core.editor "atom --wait" 

y similares para VSCode

 git config --global core.editor "code --wait" 

que abrirá una window Atom o VSCode para que puedas comprometerse,

o para Sublime

 git config --global core.editor "subl -n -w" 

Parece que Git no encontrará el editor si hay espacios en el path. Por lo tanto, deberá colocar el file por lotes mencionado en la respuesta de Patrick en una ruta que no sea en blanco.

Prefiero usar emacs. Configurarlo puede ser un poco complicado.

  1. Descargue emacs y descomprímalo en algún lugar como c:\emacs .
  2. Ejecute c:\emacs\bin\addpm.exe . Debe hacer clic derecho y "Ejecutar como administrador" si está usando Windows Vista o superior. Esto pondrá los ejecutables en tu path.
  3. Agregue (server-start) en algún lugar de su file .emacs . Consulte las preguntas frecuentes de Emacs Windows para get asesoramiento sobre dónde colocar su file .emacs .
  4. git config --global core.editor emacsclientw

Git ahora abrirá files dentro de un process de emacs existente. Deberá ejecutar ese process existente manualmente desde c:\emacs\bin\runemacs.exe .

Edite el file .gitconfig en la carpeta c: \ Users \ YourUser y agregue:

 [core] editor = 'C:\\Program files\\path\\to\\editor.exe' 

Acabo de tener el mismo problema y encontré una solución diferente. Estuve obteniendo

 error: There was a problem with the editor 'ec' 

Tengo VISUAL=ec , y un file por lotes llamado ec.bat en mi ruta que contiene una línea:

 c:\emacs\emacs-23.1\bin\emacsclient.exe %* 

Esto me permite editar files desde la línea de command con ec <filename> , y tener un set visual significa que la mayoría de los progtwigs unixy también lo recogen. Sin embargo, Git parece search el path de forma diferente a mis otros commands: cuando miré un git commit en ProcMon lo vi search en cada carpeta en la ruta para ec y para ec.exe , pero no para ec.bat . GIT_EDITOR=ec.bat otra variable de entorno ( GIT_EDITOR=ec.bat ) y todo estaba bien.

Logré que la versión del entorno funcionara estableciendo la variable EDITOR usando comillas y / :

 EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe" 

Estoy usando GitHub para Windows, que es una buena opción visual. Pero también prefiero la command-line, así que para hacer que funcione cuando abro un repository en un shell Git, acabo de establecer lo siguiente:

 git config --global core.editor vim 

que funciona genial

Esto funciona para Powershell y cmder-1.2 (cuando se usa con powershell). En ~ / .gitconfig

 [core] editor = 'c:/program files/sublime text 3/subl.exe' -w 

¿Cómo puedo hacer que Sublime Text sea el editor pnetworkingeterminado para Git?

Resucitando un hilo viejo, pero encontré una solución maravillosamente simple publicada aquí , aunque puede haber un error en el path en el que tienes que copyr el file "subl" dado por el autor. Estoy ejecutando Win 7 x64 y tuve que poner el file "subl" en mi carpeta /Git/cmd/ para que funcione. Aunque funciona como un encanto.

ATOM y Windows 10

  1. Se hizo clic con el button derecho en el icono de Atom en el escritorio y se hizo clic en las properties.
  2. Copió la ruta de location "Comenzar en"
  3. Miró allí con el explorador de Windows y encontró "atom.exe".
  4. Mecanografiado esto en el git bash:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

Nota: Cambié todo \ por / . Creé un .bashrc en mi directory de inicio y usé / para establecer mi directory de inicio y funcionó, así que asumí / seré el path a seguir.

editor de átomos git git-bash windows-10

Cuando se usa un homedrive montado a distancia (samba share, nfs, …), su carpeta ~/.git se comparte a través de todos los sistemas, lo que puede ocasionar varios problemas. Por lo tanto, prefiero un script para determinar el editor correcto para el sistema correcto:

 #!/usr/bin/perl # Detect which system I'm on and choose the right editor $unamea = `uname -a`; if($unamea =~ /mingw/i){ if($unamea =~ /devsystem/i){#Check hostname exec('C:\Program Files (x86)\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV); } if($unamea =~ /testsystem/i){ exec('C:\Program Files\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV); } } $MCEDIT=`which mcedit`; if($MCEDIT =~ /mcedit/){ exec($MCEDIT, @ARGV); } $NANO=`which nano`; if($NANO =~ /nano/){ exec($NANO, @ARGV); } die "You don't have a suitable editor!\n"; 

Uno podría considerar un script de shell simple, pero utilicé Perl ya que Perl se envía con msysgit y sus sistemas unixoid también proporcionarán uno. Poner el script en /home/username/bin , que se debe agregar a PATH en .bashrc o .profile . Una vez agregado con la git config --global core.editor giteditor.pl usted tiene el editor adecuado, esté donde esté.

Esto me funciona usando Cygwin y Textpad 6 (EDIT: también funciona con Textpad 5 siempre que realice el cambio obvio en el script) y, presumiblemente, el model podría usarse también para otros editores:

~ / .gitconfig:

 [core] editor = ~/script/textpad.sh 

~ / script / textpad.sh

 #!/bin/bash APP_PATH=`cygpath "c:/program files (x86)/textpad 6/textpad.exe"` FILE_PATH=`cygpath -w $1` "$APP_PATH" -m "$FILE_PATH" 

Este one-liner también funciona:

~ / script / textpad.sh (opción 2):

 "`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`" 

Aquí hay una solución con Cygwin:

 #!/bin/dash -e if [ "$1" ] then k=$(cygpath -w "$1") elif [ "$#" != 0 ] then k= fi Notepad2 ${k+"$k"} 
  1. Si no hay path, no pasa el path

  2. Si la ruta está vacía, pase el path vacío

  3. Si la ruta no está vacía, conviértalo a formatting de Windows.

Luego establecí estas variables:

 export EDITOR=notepad2.sh export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' 
  1. EDITOR permite que el script funcione con Git

  2. GIT_EDITOR permite que el script funcione con commands de Hub

Fuente

Solo uso TortoiseGit directamente de la caja. Se integra maravillosamente con mis keys públicas PuTTY. Tiene un editor perfecto para posts de compromiso.