Pat*_*ney 545 windows git cygwin editor
我在Windows上试用Git.我到了尝试"git commit"的地步,我收到了这个错误:
终端是愚蠢的,但没有定义VISUAL或EDITOR.请使用-m或-F选项提供消息.
所以我想出了我需要一个名为EDITOR的环境变量.没问题.我把它设置为指向记事本.这几乎奏效了.默认提交消息将在记事本中打开.但记事本不支持裸线馈送.我出去拿了Notepad ++,但是我无法弄清楚如何将Notepad ++设置为%EDITOR%
以这样的方式使它与Git一起工作.
我没跟Notepad ++结婚.在这一点上,我不介意我使用什么编辑器.我只想在编辑器而不是命令行(with -m
)中键入提交消息.
那些在Windows上使用Git的人:你用什么工具来编辑你的提交信息,你需要做些什么来使它工作?
Von*_*onC 549
2015年9月更新(6年后)
git-for-Windows的最后一个版本(2.5.3)现在包括:
通过配置
git config core.editor notepad
,用户现在可以notepad.exe
将其用作默认编辑器.
配置git config format.commitMessageColumns 72
将由记事本包装器选取,并在用户编辑后对提交消息进行换行.
见提交69b301b由约翰内斯Schindelin( )dscho
.
并且Git 2.16(2018年第一季度)将显示一条消息,告诉用户在生成编辑器时它正在等待用户完成编辑,以防编辑器打开隐藏窗口或某处隐藏并且用户迷路.
请参阅提交abfb04d(2017年12月7日),并提交Lars Schneider(larsxschneider
)的a64f213(2017年11月29日).
帮助:Junio C Hamano(gitster
).
(由Junio C gitster
Hamano合并- -在提交0c69a13,2017年12月19日)
launch_editor()
:表示Git等待用户输入当图形
GIT_EDITOR
由打开并等待用户输入(例如"git rebase -i
")的Git命令生成时,编辑器窗口可能会被其他窗口遮挡.
用户可能会盯着原始的Git终端窗口,甚至没有意识到他/她需要在Git继续之前与另一个窗口进行交互.对于这个用户Git显得悬挂.打印一条消息,Git正在等待原始终端中的编辑器输入,并在编辑器返回时删除它,如果终端支持删除最后一行
原始答案
我刚用git版本1.6.2.msysgit.0.186.gf7512和Notepad ++ 5.3.1进行了测试
我更喜欢不必设置EDITOR变量,所以我试过:
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"
Run Code Online (Sandbox Code Playgroud)
总是给出:
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" %*'.
Run Code Online (Sandbox Code Playgroud)
如果我定义一个npp.bat包括:
"c:\Program Files\Notepad++\notepad++.exe" %*
Run Code Online (Sandbox Code Playgroud)
我键入:
C:\prog\git>git config --global core.editor C:\prog\git\npp.bat
Run Code Online (Sandbox Code Playgroud)
它只适用于DOS会话,但不适用于git shell.
(不是使用core.editor配置机制,其中带有" start /WAIT...
" 的脚本不起作用,但只打开一个新的DOS窗口)
Bennett的回答提到了避免添加脚本的可能性,但是在简单的引号之间直接引用程序本身.注意斜线的方向!使用/
NOT \
来分隔路径名中的文件夹!
git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是64位系统:
git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
Run Code Online (Sandbox Code Playgroud)
但我更喜欢使用脚本(见下文):这样我可以使用不同的路径或不同的选项,而无需再次注册a git config
.
实际的解决方案(使用脚本)是要意识到:
在配置文件中引用的实际上是一个shell(/bin/sh
)脚本,而不是DOS脚本.
那么工作是什么:
C:\prog\git>git config --global core.editor C:/prog/git/npp.bat
Run Code Online (Sandbox Code Playgroud)
用C:/prog/git/npp.bat
:
#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"
Run Code Online (Sandbox Code Playgroud)
要么
#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"
Run Code Online (Sandbox Code Playgroud)
使用该设置,我可以git config --global --edit
从DOS或Git Shell执行,或者我可以git rebase -i ...
从DOS或Git Shell执行.
Bot命令将触发一个新的记事本++实例(因此是-multiInst
'选项),并等待该实例在继续之前关闭.
请注意,我只使用'/',而不是\
'.我使用选项2安装了msysgit.(将git\bin
目录添加到PATH
环境变量中,但没有覆盖一些内置的Windows工具)
记事本++包装器被称为.bat的事实并不重要.
将它命名为'npp.sh'并将其放在[git]\cmd
目录中(或在您的PATH环境变量引用的任何目录中)会更好.
也可以看看:
lightfire228 在评论中添加:
对于任何有问题的人,N ++只打开一个空白文件,而git不接受你的提交消息,请参阅" 由于空消息而中止提交 ":更改你的文件
.bat
或.sh
说:
"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>.
Run Code Online (Sandbox Code Playgroud)
这将告诉notepad ++打开临时提交文件,而不是一个空白的新文件.
Ben*_*wee 288
基于Darren的回答,使用Notepad ++你可以简单地做到这一点(所有在一行):
C:/Program Files/Notepad++/notepad++.exe
显然,该C:/Program Files (x86)/Notepad++/notepad++.exe
部分应该是系统上Notepad ++可执行文件的路径.例如,它可能是C:/Program Files/Notepad++/notepad++.exe
.
对我来说就像一个魅力.
Dar*_*hop 50
无论如何,我一直在玩这个,发现以下内容对我来说很好用:
git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"
Run Code Online (Sandbox Code Playgroud)
我不认为CMD喜欢单引号,所以你必须使用双引号"来指定空间嵌入字符串参数".
另一方面,Cygwin(我认为是Git的Bash的底层平台)喜欢'
和"
; 您可以使用/
而不是指定类似CMD的路径,\
只要引用该字符串即在此实例中使用单引号.
该-m
重写/指示使用多个编辑器,并没有必要为一个%*
上涨的结束.
Nic*_*son 26
编辑:更新到vim 7.3后,我得出的结论是,最干净,最简单的方法是:
将Vim的主文件夹添加到路径中(右键单击"我的电脑" - >"属性" - >"高级" - >"环境变量")
运行这个:__CODE__
如果你这样做,那么我相信它也适用于cygwin.
原始答案:
即使有几个与vim相关的答案,我也无法在Windows下使用gvim(而不使用批处理文件或%EDITOR%或cygwin).
我最终得到的是干净整洁,并从这里的一些解决方案中得出:
git config --global core.editor "gvim --nofork '%*'"
Run Code Online (Sandbox Code Playgroud)
让我筋疲力尽的一个问题是这些不是Windows风格的反斜杠,它们是正常的正斜杠.
Pat*_*yer 15
Notepad ++工作得很好,虽然我选择坚持使用记事本,-m,甚至有时内置"编辑".
您使用Notepad ++遇到的问题与git如何启动编辑器可执行文件有关.我的解决方案是将EDITOR设置为批处理文件,而不是实际的编辑器可执行文件,它执行以下操作:
start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*
Run Code Online (Sandbox Code Playgroud)
/ WAIT告诉命令行会话暂停,直到应用程序退出,因此您可以编辑到您的内容,而git愉快地等待着您.%*将批处理文件的所有参数传递到Notepad ++.
C:\src> echo %EDITOR%
C:\tools\runeditor.bat
Run Code Online (Sandbox Code Playgroud)
Gav*_*vin 11
写字板!
我很高兴使用vim,但是因为我想向公司介绍Git我想要的东西我们都有,并且发现Wordpad似乎工作正常(即Git确实等到你完成编辑和关闭窗户).
git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'
Run Code Online (Sandbox Code Playgroud)
那是在msysgit上使用Git Bash; 我没有尝试从Windows命令提示符(如果这有任何区别).
我也在Windows上使用Cygwin,但是git_editor.bat
(与基于终端的相反"C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
).
为了完成这项工作,我做了以下工作:
git_editor.bat
),其中包含以下内容:PATH
GIT_EDITOR=git_editor.bat
我的git commit
.--nofork
完成此操作后git_editor.bat
,等将正确调用gvim可执行文件.
注1:"C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
gvim 的选项确保它在写入提交消息之前就会阻塞.
注意2:如果路径中有空格,则需要gvim路径周围的引号.
注3:如果git传递带空格的文件路径,则需要"%*"周围的引号.
感谢SO社区...并进行了一些研究,我得到了我最喜欢的编辑器 EditPadPro,作为msysgit 1.7.5.GIT和TortoiseGit v1.7.3.0在WinXP SP3上的核心编辑器......
按照上面的建议,我添加了代码编辑器的bash脚本的路径......
git config --global core.editor c:/msysgit/cmd/epp.sh
Run Code Online (Sandbox Code Playgroud)
然而,经过几次尝试上述解决方案失败后...我终于能够正常工作了.根据EditPadPro的文档,添加'/ newinstance'标志将允许shell等待编辑器输入....
' / newinstance '标志是我案例中的关键......
#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"
Run Code Online (Sandbox Code Playgroud)
这是更大问题的一个症状.值得注意的是,你有一些设置TERM =哑.其他无法正常工作的TERM=dumb
命令是说你没有一个功能齐全的终端.看起来这通常是由于将TERM设置为全局Windows环境变量中的某些内容而导致的.对我来说,当我安装Strawberry Perl的时候出现了一个问题,这个问题就在这个问题的msysgit bug以及几个解决方案上.
第一个解决方案是通过添加以下内容将其修复到〜/ .bashrc中:
export TERM=msys
Run Code Online (Sandbox Code Playgroud)
您可以从Git BASH提示符执行此操作,如下所示:
echo "export TERM=msys" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
另一个解决方案最终是我所做的因为我不关心Strawberry Perl将TERM = dumb添加到我的环境设置的原因是按照msysgit错误报告中的评论指示删除TERM = dumb .
控制面板/系统/高级/环境变量...(或类似的,取决于您的Windows版本)是在Windows上设置粘性环境变量的位置.默认情况下,未设置TERM.如果在那里设置了TERM,那么您(或您安装的程序之一 - 例如Strawberry Perl)已经设置了它.删除该设置,你应该没事.
类似地,如果您使用Strawberry Perl并关心CPAN客户端或类似的东西,您可以less
单独使用TERM=dumb
并在〜/ .bashrc文件中使用,这与设置如上所述的明确术语具有类似的效果.
当然所有其他解决方案都是正确的,您可以使用它TERM=dumb
来确保git在需要为您启动时使用您喜欢的编辑器.
小智 6
对于Atom,你可以做到
git config --global core.editor "atom --wait"
Run Code Online (Sandbox Code Playgroud)
和类似的VSCode
git config --global core.editor "code --wait"
Run Code Online (Sandbox Code Playgroud)
这将打开一个Atom或VSCode窗口供您通过,
或者是Sublime
git config --global core.editor "subl -n -w"
Run Code Online (Sandbox Code Playgroud)
小智 6
在c:\ Users\YourUser文件夹中编辑.gitconfig文件并添加:
[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'
Run Code Online (Sandbox Code Playgroud)
我让 PortableGit 1.6 工作正常,但在升级到 PortableGit 1.7 Windows 版本后,我遇到了问题。一些 Git 命令可以很好地打开 Notepad++.exe,但有些则不能,尤其是Git rebase 的行为不同。
问题是一些命令运行 Windows cmd 进程,而一些命令使用 Unix cmd 进程。我想为 Notepad++ 编辑器提供启动属性,所以我需要一个自定义脚本。我的解决办法是这样。
创建脚本以运行适当的文本编辑器。该脚本看起来很奇怪,但它同时处理 Windows 和 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 %*
Run Code Online (Sandbox Code Playgroud)设置全局 core.editor 变量
脚本已保存到 git/cmd 文件夹,因此它已经在 gitconsole 路径中。这是强制性的,因为完整路径可能无法正常工作。
git config --global core.editor "git-editor.bat"
Run Code Online (Sandbox Code Playgroud)现在我可以运行git commit -a和git rebase -i master命令。如果您在 Git Windows 工具中遇到问题,请尝试一下。
我在多个平台上使用 Git,而且我喜欢在所有平台上使用相同的 Git 设置。(事实上,我的所有配置文件都在 Git 的发布控制之下,并在每台机器上放置了一个 Git 存储库克隆。)我想出的解决方案是这样的:
我将我的编辑器设置为giteditor
git config --global core.editor giteditor
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个名为giteditor的符号链接,它在我的PATH 中。(我有一个个人bin目录,但在PATH 中的任何地方都有效。)该链接指向我当前选择的编辑器。在不同的机器和不同的平台上,我使用不同的编辑器,所以这意味着我不必更改我的通用 Git 配置(.gitconfig),只需更改 giteditor指向的链接。
符号链接由我所知道的每个操作系统处理,尽管它们可能使用不同的命令。对于 Linux,您使用ln -s。对于 Windows,您使用cmd内置mklink。它们有不同的语法(你应该查一下),但它们的工作方式都是一样的,真的。
我需要执行以下两项操作才能让 Git 在 Windows 中启动 Notepad++:
将以下内容添加到 .gitconfig:
editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
Run Code Online (Sandbox Code Playgroud)修改快捷方式以启动 Git Bash shell 以管理员身份运行,然后使用它来启动 Git Bash shell。我猜测上下文菜单条目“Git Bash here”没有以所需的权限启动 Notepad++。
做完以上两件事后,它起作用了。
假设您想将VsCode配置为您的编辑器。请执行下列操作:
.gitconfig
文件中:
.gitconfig
文件的默认位置是C:\Users\USER_NAME\.gitconfig
[core]
editor = code -w -n
[diff]
tool = vscode
[difftool "vscode"]
cmd = code -w -n --diff $LOCAL $REMOTE
[merge]
tool = vscode
[mergetool "vscode"]
cmd = code -w -n $MERGED
Run Code Online (Sandbox Code Playgroud)
笔记:
-w
是强制性的,并告诉您git
等待vscode加载。-n
是可选的,告诉您在新窗口中git
打开vscode 。
您需要将该单词替换code
为VsCode 的“.exe”路径。
例如:
[core]
editor = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n
[diff]
tool = vscode
[difftool "vscode"]
cmd = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n --diff $LOCAL $REMOTE
[merge]
tool = vscode
[mergetool "vscode"]
cmd = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n $MERGED
Run Code Online (Sandbox Code Playgroud)
笔记:
- 您需要用单引号 将路径引起来
''
。- 路径中的斜杠应该是正斜杠
/
。
或者另一个例子:
[core]
editor = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n
[diff]
tool = vscode
[difftool "vscode"]
cmd = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n --diff $LOCAL $REMOTE
[merge]
tool = vscode
[mergetool "vscode"]
cmd = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n $MERGED
Run Code Online (Sandbox Code Playgroud)
VsCode 现在支持“3 路合并”! 更新是在版本1.69.0和1.70.0中完成的。现在您可以启用 VsCode“mergetool”来查看 3 路合并。
为此,您需要更新该行:
[mergetool "vscode"]
cmd = code -w -n $MERGED
Run Code Online (Sandbox Code Playgroud)
与新行:
[mergetool "vscode"]
cmd = code -w -n --merge $REMOTE $LOCAL $BASE $MERGED
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
302522 次 |
最近记录: |