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

configuration, git, msysgit, notepad++, text-editor

Solution

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

Problem

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

Original source

Related problems