How do I use Notepad++ (or other) with msysgit?

103,421

Solution 1

Update 2010-2011:

zumalifeguard's solution (upvoted) is simpler than the original one, as it no longer needs a shell wrapper script.

As I explain in "How can I set up an editor to work with Git on Windows?", I prefer a wrapper, as it is easier to try and switch editors, or change the path of one editor, without having to register said change with a git config again.
But that is just me.


Additional information: the following solution works with Cygwin, while the zuamlifeguard's solution does not.


Original answer.

The following:

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

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

does work. Those commands are interpreted as shell script, hence the idea to wrap any windows set of commands in a sh script.
(As Franky comments: "Remember to save your .sh file with Unix style line endings or receive mysterious error messages!")

More details on the SO question How can I set up an editor to work with Git on Windows?

Note the '-multiInst' option, for ensuring a new instance of notepad++ for each call from Git.

Note also that, if you are using Git on Cygwin (and want to use Notepad++ from Cygwin), then scphantm explains in "using Notepad++ for Git inside Cygwin" that you must be aware that:

git is passing it a cygwin path and npp doesn't know what to do with it

So the script in that case would be:

#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$(cygpath -w "$*")"

Multiple lines for readability:

#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar \
  -nosession -noPlugin "$(cygpath -w "$*")"

With "$(cygpath -w "$*")" being the important part here.

Val commented (and then deleted) that you should not use -notabbar option:

It makes no good to disable the tab during rebase, but makes a lot of harm to general Notepad usability since -notab becomes the default setting and you must Settings>Preferences>General>TabBar> Hide>uncheck every time you start notepad after rebase. This is hell. You recommended the hell.

So use rather:

#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -nosession -noPlugin "$(cygpath -w "$*")"

That is:

#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -nosession \
  -noPlugin "$(cygpath -w "$*")"

If you want to place the script 'npp.sh' in a path with spaces (as in 'c:\program files\...',), you have three options:

  • Either try to quote the path (single or double quotes), as in:

      git config --global core.editor 'C:/program files/git/npp.sh'
    
  • or try the shortname notation (not fool-proofed):

      git config --global core.editor C:/progra~1/git/npp.sh
    
  • or (my favorite) place 'npp.sh' in a directory part of your %PATH% environment variable. You would not have then to specify any path for the script.

      git config --global core.editor npp.sh
    
  • Steiny reports in the comments having to do:

      git config --global core.editor '"C:/Program Files (x86)/Git/scripts/npp.sh"'
    

Solution 2

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

Or, for 64-bit Windows and a 32-bit install of Notepad++:

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

Or, the following can be issued on the command line on either 32-bit or 64-bit Windows. It will pull the location of notepad++.exe from the registry and configure git to use it automatically:

FOR /F "usebackq tokens=2*" %A IN (`REG QUERY "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe" /ve`) DO git config --global core.editor "'%B' -multiInst -notabbar -nosession -noPlugin"

If you wish to place the above from a .BAT or .CMD file, you must replace %A with %%A and %B with %%B

Solution 3

This works for me

git config --global core.editor C:/Progra~1/Notepad++/notepad++.exe

Solution 4

As of Git for Windows v2.15.0 (October 30th 2017) it is now possible to configure nano or Notepad++ as Git's default editor instead of vim.

During the installation you'll see the following screen:

enter image description here

Solution 5

git config core.editor "\"C:\Program Files (x86)\Notepad++\notepad++.exe\""
Share:
103,421

Related videos on Youtube

warnabas
Author by

warnabas

Passionate PHP developer Penguin Linux junkie Desktop computer Avid PC gamer Coffee aficionado Woman and man holding hands Dedicated husband Family (man, girl, boy) Proud father of two

Updated on March 17, 2022

Comments

  • warnabas
    warnabas about 2 years

    How do I use Notepad++ (or any other editor besides vim) with msysgit?

    I tried all of the following to no avail:

    git config --global core.editor C:\Program Files\Notepad++\notepad++.exe
    
    git config --global core.editor "C:\Program Files\Notepad++\notepad++.exe"
    
    git config --global core.editor C:/Program Files/Notepad++/notepad++.exe
    
    git config --global core.editor C:\\Program Files\\Notepad++\\notepad++.exe
    
  • warnabas
    warnabas over 14 years
    I got this to work by placing npp.sh in the root of my drive (ie - C:/npp.sh). Any time I try to target a folder with spaces (ie - D:/Program Files (x86)/Git/npp.sh) in it it fails, what's the proper way to escape spaces and/or get this to work?
  • Fred
    Fred over 14 years
    put quotes around it. See how he has quotes around the entire thing in his example?
  • scphantm
    scphantm about 12 years
    I have tried multiple combinations of the above and none work with git. i have my npp script in my path and if from my cygwin console i type, "npp {file}" npp opens the file just fine, but when i do a "git rebase -i" npp opens with a blank file instead of the merge file. any ideas why this would happen?
  • VonC
    VonC about 12 years
    @scphantm strange. I would advise for posting a new question, with a link to this answer, and many more details (Git version, OS version, npp version, content of the script, ...)
  • Matt
    Matt almost 12 years
    works in git extensions too. note that for 64bit windows the entry is "C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin
  • Oskar Berggren
    Oskar Berggren over 11 years
    The silly thing is that -notabbar will disable the tab bar permanently, not just for that session. When launchin notepad++ normally, you have to go into the settings dialog an enable the tab bar again.
  • David Faivre
    David Faivre about 11 years
    I had to use: git config --global core.editor "c\:/Program\ Files\ \(x86\)/Notepad++/notepad++.exe -multiInst -nosession -noPlugin" ...not sure why.
  • Chirayu Shishodiya
    Chirayu Shishodiya over 9 years
    git rebase was not rebasing my commits. I was amending them using notepad++.exe. I changed the editor settings of git config as mentioned in this answer and magically git rebase started rebasing. I suspect it is to do with the parameters being passed in to notepad++.exe.
  • Radu Murzea
    Radu Murzea over 9 years
    I have Windows 7 64-bit, msysgit v1.9.2 and Notepad++ v6.6.9 and this worked PERFECTLY. Thanks.
  • Shridutt Kothari
    Shridutt Kothari almost 9 years
    i did the same.. now how to open notepad++ to commit with message?? what is the commad?? please can you give an example
  • Adam McKee
    Adam McKee over 8 years
    You can use backslashes if you escape them, i.e. "C:\\Program..."
  • CodeManX
    CodeManX over 8 years
    Any reason why it shall launch a new Notepad++ process, without session, plugins and tab bar? Doesn't it work if it's already running?
  • blubberdiblub
    blubberdiblub over 8 years
    @CoDEmanX Without -multiInst it will likely just signal the already running Notepad++ to open the file and then exit immediately. This can be a big problem if whatever calls the editor expects it to return only when done editing (i. e. a synchronous operation, as is the case when calling vi). Try an interactive rebase (git rebase -i), for instance. If this still works as expected, then you're fine.
  • blubberdiblub
    blubberdiblub over 8 years
    Adding the -multiInst option is crucial here, like in the other answers.
  • Bhushan Gadekar
    Bhushan Gadekar about 8 years
    but how to launch notepad++ within git repo?
  • kkm
    kkm over 7 years
    This is not good for two reasons. First, if the C: volume is NTFS with the 8.3 filename option turned off, there is no C:\Progra~1 at all. Second, there may be multiple C:\Progra* directories, so the ~1 suffix is not necessarily the valid one.
  • Ofer
    Ofer over 7 years
    Thanks! Worked for me, but with a slight edit: git config --global core.editor "'C:\Program Files (x86)\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin".
  • zumalifeguard
    zumalifeguard over 7 years
    Ofer, I see that the only change you made is changing the forward slashes to backslashes. Did you do it because the forward slashes didn't work?
  • Hilikus
    Hilikus almost 7 years
    For even cooler integration, add "-ldiff". this will add syntax highlighting
  • AtliB
    AtliB almost 7 years
    That did the trick for me! Afterwards the .gitconfig looks like: [core] editor = \"c:\\Program Files (x86)\\Notepad++\\notepad++.exe\" -multiInst -nosession -noPlugin
  • AtliB
    AtliB almost 7 years
    See highest voted answer, which includes this (I didn't read far enough)
  • oleksa
    oleksa about 4 years
    Update 2020: seems that you've missed the options to open new notepad instance. I've used from cmd.exe git config --global core.editor "c:\\soft\\notepad++\\notepad++.exe -multiInst -notabbar -nosession -noPlugin" and it is working from both cmd terminal and git bash