ฉันจะตั้งค่าตัวแก้ไขให้ทำงานกับ Git บน Windows ได้อย่างไร


561

ฉันพยายามออกGit บน Windows ฉันมาถึงจุดที่พยายาม "คอมมิทคอม" และฉันได้รับข้อผิดพลาดนี้:

เทอร์มินัลเป็นใบ้ แต่ไม่ได้กำหนด VISUAL หรือ EDITOR โปรดระบุข้อความโดยใช้ตัวเลือก -m หรือ -F

ดังนั้นฉันคิดว่าฉันต้องมีตัวแปรสภาพแวดล้อมที่เรียกว่า EDITOR ไม่มีปัญหา. ฉันตั้งให้ชี้ไปที่แผ่นจดบันทึก มันใช้ได้ผลเกือบ ข้อความส่งเริ่มต้นจะเปิดขึ้นใน Notepad แต่ Notepad ไม่รองรับฟีดบรรทัดเปล่า ฉันออกไปข้างนอกและได้รับแผ่นจดบันทึก ++แต่ฉันไม่สามารถหาวิธีตั้งค่าแผ่นจดบันทึก ++ ได้%EDITOR%ในลักษณะที่ใช้งานได้กับ Git ตามที่คาดไว้

ฉันไม่ได้แต่งงานกับ Notepad ++ ณ จุดนี้ฉันไม่รังเกียจสิ่งที่ฉันใช้แก้ไข ผมแค่อยากที่จะสามารถพิมพ์ข้อความในกระทำการแก้ไขมากกว่าบรรทัดคำสั่ง (มี-m)

ผู้ที่คุณใช้ Git บน Windows: คุณใช้เครื่องมือใดในการแก้ไขข้อความการส่งข้อความและคุณต้องทำอย่างไรจึงจะทำงานได้


7
TLDR: ใส่เครื่องหมายคำพูดเดี่ยวรอบ ๆ พา ธ ไปยังโปรแกรมเรียกทำงานตัวแก้ไข
yoyo

อาจไม่เป็นประโยชน์ แต่ FWIW ฉันใช้ notepad ทั่วไป ฉันไม่ได้ทำอะไรเพื่อให้มันทำงานได้ มันเพิ่งจะหมดไปโดยปริยาย ...
BrainSlugs83

11
อัปเดตในเดือนกันยายน 2558: ความเรียบง่ายgit config core.editor notepadก็เพียงพอแล้ว ดูคำตอบของการปรับปรุงด้านล่างของฉัน
VonC

ทราบเพียงว่า JEdit ไม่ใช่เครื่องมือแก้ไขที่เหมาะสมสำหรับ git JEdit เปิดเพียงหนึ่งอินสแตนซ์แม้สำหรับหลายไฟล์ หากเปิดแล้ว git จะทำให้เปิดไฟล์ใหม่ แต่คุณต้องปิด JEdit ก่อนที่ git จะดำเนินการต่อ ไม่มีตัวเลือกบรรทัดคำสั่งที่จะทำให้ JEdit เปิดอินสแตนซ์แยกต่างหากเพื่อแก้ไขข้อความการส่งข้อความ
GrantRobertson

ในกรณีที่คนรัก Sublime ข้อความ 3 นี่คือคำแนะนำของฉันสำหรับวิธีการที่ฉันกำหนดค่าสำหรับ Windows และ Linux ... เกินไป: การตั้งค่าที่ดีที่สุดสำหรับ Sublime ข้อความ 3 เป็นบรรณาธิการคอมไพล์ (Windows และ Linux คำแนะนำ) @yoyo, TLDR สำหรับการใช้โปรแกรมแก้ไขข้อความใด ๆ : ใส่เครื่องหมายคำพูดเดี่ยวรอบ ๆ พา ธ ไปยังโปรแกรมเรียกทำงานตัวแก้ไขและใช้เครื่องหมายทับซ้าย (/) NOT back slashes (\) ในชื่อพา ธ ไปยังไฟล์ปฏิบัติการ Windows
Gabriel Staples

คำตอบ:


562

อัปเดตกันยายน 2558 (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 (ไตรมาสที่ 1 ปี 2018) จะแสดงข้อความเพื่อบอกผู้ใช้ว่ากำลังรอให้ผู้ใช้แก้ไขให้เสร็จเมื่อวางไข่ในกรณีที่ผู้แก้ไขเปิดหน้าต่างที่ซ่อนอยู่หรือที่อื่นและผู้ใช้หลงทาง

ดูกระทำ abfb04d (7 ธันวาคม 2017) และกระทำ a64f213 (29 พฤศจิกายน 2017) โดยลาร์สไนเดอร์ (larsxschneider )
ช่วยโดย: Junio C Hamano (gitster )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 0c69a13 , 19 ธันวาคม 2017)

launch_editor(): ระบุว่า Git รอการป้อนข้อมูลจากผู้ใช้

เมื่อกราฟิกGIT_EDITORถูกวางไข่โดยคำสั่ง Git ที่เปิดและรออินพุตของผู้ใช้ (เช่น " git rebase -i") หน้าต่างแก้ไขอาจถูกบดบังโดยหน้าต่างอื่น
ผู้ใช้อาจถูกจ้องมองไปที่หน้าต่างเทอร์มินัล 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\" %*"

ที่ให้เสมอ:

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" %*'.

ถ้าฉันกำหนด npp.bat รวมถึง:

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

และฉันพิมพ์:

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

เป็นเพียงการทำงานจากเซสชั่นดอสแต่ไม่ได้มาจากเปลือกคอมไพล์
(ไม่ใช่ว่ามีกลไกการกำหนดค่า core.editor สคริปต์ที่มี " start /WAIT..." อยู่ในนั้นจะไม่ทำงาน แต่จะเปิดหน้าต่าง DOS ใหม่เท่านั้น)


คำตอบเบ็นเน็ตต์กล่าวถึงความเป็นไปได้ที่จะหลีกเลี่ยงการเพิ่มสคริปต์ แต่จะอ้างอิงโดยตรงโปรแกรมเองระหว่างคำพูดง่ายๆ หมายเหตุทิศทางของเครื่องหมายทับ! ใช้/NOT \เพื่อแยกโฟลเดอร์ในชื่อพา ธ !

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

หรือถ้าคุณอยู่ในระบบ 64 บิต:

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

แต่ฉันชอบใช้สคริปต์ (ดูด้านล่าง): git configวิธีการที่ฉันสามารถเล่นกับเส้นทางที่แตกต่างกันหรือตัวเลือกที่แตกต่างกันได้โดยไม่ต้องลงทะเบียนอีกครั้ง


ทางออกที่แท้จริง (พร้อมสคริปต์) คือการตระหนักว่า
สิ่งที่คุณอ้างถึงในไฟล์ปรับแต่งนั้นจริงๆแล้วคือเชลล์ ( /bin/sh) สคริปต์ไม่ใช่สคริปต์ DOS

ดังนั้นสิ่งที่ทำงานคือ:

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

ด้วยC:/prog/git/npp.bat:

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

หรือ

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

ด้วยการตั้งค่านั้นฉันสามารถทำ ' git config --global --edit' จาก DOS หรือ Git Shell หรือฉันสามารถทำได้ ' git rebase -i ...' จาก DOS หรือ Git Shell
คำสั่ง Bot จะทริกเกอร์อินสแตนซ์ใหม่ของ notepad ++ (ดังนั้น-multiInstตัวเลือก ') และรอให้อินสแตนซ์นั้นปิดก่อนที่จะดำเนินการต่อ

โปรดทราบว่าฉันใช้เฉพาะ '/' ไม่ใช่\' และฉันติดตั้ง msysgit โดยใช้ตัวเลือก 2 (เพิ่มgit\binไดเรกทอรีลงในPATHตัวแปรสภาพแวดล้อม แต่ไม่มีการแทนที่เครื่องมือ windows บางตัวในตัว)

ความจริงที่ว่าแผ่นจดบันทึก ++ เรียกว่า. bat นั้นไม่สำคัญ
มันจะดีกว่าที่จะตั้งชื่อ 'npp.sh' และวางไว้ใน[git]\cmdไดเรกทอรีแม้ว่า (หรือในไดเรกทอรีใด ๆ ที่อ้างอิงโดยตัวแปรสภาพแวดล้อม PATH ของคุณ)


ดูสิ่งนี้ด้วย:


lightfire228เพิ่มในความคิดเห็น :

สำหรับใครก็ตามที่มีปัญหาที่ N ++ เพิ่งเปิดไฟล์เปล่าและ git ไม่รับข้อความคอมมิทของคุณโปรดดูที่ "การยกเลิกการคอมมิทเนื่องจากข้อความว่างเปล่า ": เปลี่ยนไฟล์ของคุณ.batหรือ.shพูดเป็น:

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

นั่นจะบอกให้ notepad ++ เห็นเพื่อเปิดไฟล์ temp commit แทนที่จะเป็นไฟล์เปล่าตัวใหม่


ในเชลล์สคริปต์ของคุณคุณต้องการอัญประกาศประมาณ $ * ไม่เช่นนั้นจะไม่สามารถทำงานได้อย่างถูกต้องสำหรับพา ธ ที่มีช่องว่าง ขอบคุณสำหรับคำอธิบายอย่างละเอียด - ฉันกำลังติดตั้ง git (และสิ่งอื่น ๆ มากมาย) บน Windows สำหรับการเริ่มต้นโปรแกรมเมอร์และบรรทัดคำสั่งนั้นยากพอที่จะติดตามโดยไม่ทำให้พวกเขาเรียนรู้คำสั่ง vi
Sarah Mei

อีกตัวอย่างที่ชัดเจน: stackoverflow.com/questions/1634161/ …
VonC

1
ต่อไปนี้คำตอบของเบ็นเน็ตต์คุณไม่จำเป็นต้องสร้างสคริปต์คุณก็สามารถใช้เครื่องหมายวรรคตอน 'ภายในเครื่องหมายคำพูด".
โทเบียส KIENZLER

@Tobias: จริงฉันได้รวมคำตอบของเขาในของฉันเช่นเดียวกับเหตุผลที่ฉันยังคงต้องการอ้างอิงสคริปต์ในgit configการตั้งค่าของฉัน
VonC

6
@NateGlenn ใช้การย่อให้สั้นลงdir /X: " PROGRA~2" สำหรับ " Program Files (x86)" ซึ่งเป็นนิสัยที่ดีในการใช้เครื่องมือที่เข้ากันได้ข้ามแพลตฟอร์มบน Windows ซึ่งช่วยให้คุณสควอชช่องว่าง
JJ Zabkar

300

อาคารในคำตอบของคาร์เรนเพื่อใช้ Notepad ++ คุณก็สามารถทำเช่นนี้ (ทั้งหมดในหนึ่งบรรทัด):

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

เห็นได้ชัดว่าC:/Program Files/Notepad++/notepad++.exeส่วนควรเป็นเส้นทางไปยังปฏิบัติการ Notepad ++ ในระบบของคุณ C:/Program Files (x86)/Notepad++/notepad++.exeยกตัวอย่างเช่นมันอาจจะ

มันใช้งานได้เหมือนเสน่ห์สำหรับฉัน


10
ฉันด้วย! BTW สวิตช์เหล่านั้นอธิบายไว้ที่ C: / Program Files / Notepad ++ / user.manual / เอกสาร / คู่มือผู้ใช้ notepad / command-line.html
Andrew Swan

23
ดู Notepad ++ ที่อยู่ในไฟล์ `C: \ Program (x86)`
mindless.panda

8
สำหรับ x64 Windows ให้เปลี่ยนเป็น: git config - global core.editor "'C: / Program Files (x86) / Notepad ++ / notepad ++. exe' -multiInst -notabbar -nosession -noPlugin"
Dariusz

4
ฉันรู้ว่าฉันมางานปาร์ตี้ช้า แต่อยากรู้อยากเห็นไม่มีใครรู้ (หรือจำได้ว่าหลังจากหลายปีที่ผ่านมา) ทำไมใครจะระบุ "-notabbar"? ฉันเข้าใจเหตุผลที่อยู่เบื้องหลังพารามิเตอร์อื่น ๆ (ดีไม่แน่ใจว่าทำไม "-noPlugin" จริง ๆ ) แต่ไม่ใช่อันนี้
Wilson F

11
@WilsonF เหตุผลก็เพราะคุณต้องออกจาก notepad ++ เพื่อให้ git หยุดรออินพุตและดำเนินการต่อ คุณไม่ต้องการที่จะเปิดแท็บอื่น ๆ ในตัวอย่างของ Notepad ++ นี้เพราะเซสชั่น git ของคุณจะถูกแช่แข็ง! การตั้งค่าเหล่านั้นทำสิ่งที่ถูกต้อง: หากคุณเปิด Notepad ++ ไว้แล้วคุณจะได้รับอินสแตนซ์ใหม่ที่ไม่อนุญาตให้คุณเปิดไฟล์อื่นและคุณต้องปิดเมื่อเสร็จแล้วเพื่อให้ git รู้ว่าคุณกำลังแก้ไขอยู่ . ทำงานเหมือนกันสำหรับการส่งข้อความ
ErikE

50

อย่างไรก็ตามฉันเพิ่งได้เล่นกับสิ่งนี้และพบว่าต่อไปนี้จะทำงานได้ดีสำหรับฉัน:

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

ฉันไม่คิดว่า CMD ชอบอัญประกาศเดี่ยวดังนั้นคุณต้องใช้เครื่องหมายคำพูดคู่ "เพื่อระบุอาร์กิวเมนต์สตริงที่ฝังในช่องว่าง"

Cygwin (ซึ่งฉันเชื่อว่าเป็นแพลตฟอร์มพื้นฐานสำหรับ Git's Bash) ในทางกลับกันชอบทั้งสอง'และ"; คุณสามารถระบุพา ธ ที่เหมือนกันของ CMD ได้โดยใช้/แทน\ตราบใดที่มีการอ้างถึงสตริงในอินสแตนซ์นี้โดยใช้เครื่องหมายคำพูดเดี่ยว

การ-mแทนที่ / บ่งบอกถึงการใช้งานของบรรณาธิการหลายคนและไม่จำเป็นต้องมีการแก้ไข%*ในตอนท้าย


ขอบคุณสำหรับคำอธิบายคำพูดเดี่ยว / คู่เข้ากันได้แล้ว!
Patrick McDonald

3
git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -m"ทำงานเหมือนจับใจสำหรับฉัน
Vlad Holubiev

ฉันใช้ `git config --global code.editor" 'C: \\ Program Files \\ Sublime Text 3 \\ sublime_text.exe' -n -w -m "" แต่เมื่อฉันเรียกใช้ "git commit" มันจะเปิดขึ้น โปรแกรมแก้ไข Notepad มีความคิดเห็นเกี่ยวกับสาเหตุที่เป็นเช่นนี้หรือไม่? ขอบคุณล่วงหน้า.
Ryan Chase

@RyanChase ลบรายการการตั้งค่าท้องถิ่นออกจาก. / git/config เช่นeditor = notepad
Ricky Boyce

1
Git Bash ทำงานภายใต้ MingW64 ไม่ใช่ Cygwin Cygwin มีไบนารี Git ของตัวเอง
Hans Deragon

27

แก้ไข:หลังจากอัปเดตเป็นกลุ่ม 7.3 ฉันได้ข้อสรุปว่าวิธีที่สะอาดและง่ายที่สุดคือ:

  1. เพิ่มโฟลเดอร์หลักของ Vim ให้กับเส้นทางของคุณ (คลิกขวาที่My ComputerคุณสมบัติAdvancedตัวแปรสภาพแวดล้อม )

  2. เรียกใช้สิ่งนี้:

    git config --global core.editor "gvim --nofork '%*'"
    

ถ้าคุณทำแบบนี้ฉันก็ค่อนข้างแน่ใจว่ามันจะใช้ได้กับ Cygwin เช่นกัน

คำตอบเดิม:

แม้ว่าจะมีคำตอบที่เกี่ยวข้องกับ Vim สองสามประการ แต่ฉันก็มีปัญหาในการทำงานกับ gVim ใน Windows (ในขณะที่ไม่ได้ใช้แบตช์ไฟล์หรือ% EDITOR% หรือ Cygwin)

ในที่สุดสิ่งที่ฉันมาถึงก็ดีและสะอาดและดึงออกมาจากวิธีแก้ปัญหาบางอย่างที่นี่:

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

หนึ่ง gotcha ที่พาฉันไปสักพักหนึ่งนั่นไม่ใช่แบ็กสแลชสไตล์ Windows มันเป็นเครื่องหมายทับหน้าปกติ


1
หากมีการติดตั้งเป็นกลุ่มProgram Files(x86)คุณจำเป็นต้องเปลี่ยนเส้นทางอย่างชัดเจน
Swapnil

15

Notepad ++ ใช้งานได้ดีแม้ว่าฉันเลือกที่จะติดกับ Notepad, -m หรือแม้กระทั่งบางครั้ง "แก้ไข" ในตัว

ปัญหาที่คุณพบโดยใช้ Notepad ++ เกี่ยวข้องกับวิธีที่ Git เรียกใช้ตัวแก้ไขได้ วิธีแก้ไขปัญหาของฉันคือการตั้งค่าตัวแปรสภาพแวดล้อมEDITORเป็นไฟล์แบตช์แทนที่จะเรียกใช้งานจริงของตัวแก้ไขที่ทำต่อไปนี้:

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

/WAITบอกให้เซสชันบรรทัดคำสั่งหยุดจนกว่าแอปพลิเคชั่นจะออกดังนั้นคุณจะสามารถแก้ไขเนื้อหาของหัวใจได้ในขณะที่ Git รออย่างมีความสุข % * ส่งผ่านอาร์กิวเมนต์ทั้งหมดไปยังแฟ้มแบตช์ผ่านไปยัง Notepad ++

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

ฉันมีปัญหาในการทำให้สิ่งนี้ทำงานภายใต้ powershell วิธีนี้ ( stackoverflow.com/questions/10564/… ) ทำงานได้ดี
Peter Stephens

11

WordPad !

ฉันมีความสุขที่ใช้ Vim แต่เนื่องจากฉันพยายามแนะนำ Git ให้กับ บริษัท ฉันต้องการสิ่งที่เราทุกคนมีและพบว่า WordPad ดูเหมือนว่าจะทำงานได้ดี (เช่น Git รอจนกว่าคุณจะแก้ไขเสร็จแล้วและปิด หน้าต่าง).

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

กำลังใช้ Git Bash บน msysgit; ฉันไม่ได้ลองจากพรอมต์คำสั่งของ Windows (หากนั่นทำให้เกิดความแตกต่าง)


ฉันชอบความเรียบง่ายของสิ่งนี้ แต่มันก็ไม่ได้ผลสำหรับฉัน นี่คือสิ่งที่ฉันพยายาม ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด: มีปัญหากับตัวแก้ไข 'C: \ Program Files \ Windows NT \ Accessories \ wordpad.exe'
Shaun Luttin

3
คำพูดไม่ถูกต้อง คุณต้องใส่เครื่องหมายคำพูดคู่นอกราคาเดียว นั่นคือใช้ "\ C: \ Program Files \ Windows NT \ Accessories \ wordpad.exe" "แล้วมันจะทำงาน
Shaun Luttin

คุณอาจได้รับประโยชน์จากเครื่องหมายสแลช (/) แทนแบ็กสแลช (\)
Chris Jones

1
นอกจากนี้ควรใช้ "git config --global" แทนการใช้ "git config" คุณอาจต้องการให้การตั้งค่าใช้กับที่เก็บ git ทั้งหมดบนเวิร์กสเตชันของคุณไม่ใช่แค่ที่คุณอยู่ในตอนนี้
Chris Jones

@ChrisJones ไม่มีจุดในกรณีนี้เพราะ "ไฟล์โปรแกรม" มีช่องว่างระหว่างมัน
Pacerier

9

ฉันยังใช้ Cygwin บน Windows แต่ใช้ gVim (ซึ่งต่างจากVimแบบเทอร์มินัล)

เพื่อให้งานนี้ฉันได้ทำต่อไปนี้:

  1. สร้างไฟล์แบตช์หนึ่งบรรทัด (ชื่อgit_editor.bat) ซึ่งมีสิ่งต่อไปนี้: "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. วางไว้ในของฉันgit_editor.batPATH
  3. ชุด GIT_EDITOR=git_editor.bat

เมื่อทำสิ่งนี้เสร็จgit commitฯลฯ จะเรียกใช้ไฟล์ gVim ได้อย่างถูกต้อง

หมายเหตุ 1: --noforkตัวเลือกของ gVim ทำให้มั่นใจได้ว่าจะปิดกั้นจนกว่าข้อความคอมมิทจะถูกเขียน

หมายเหตุ 2: ต้องใช้เครื่องหมายคำพูดรอบ ๆ พา ธ ไปยัง gVim หากคุณมีช่องว่างในพา ธ

หมายเหตุ 3: จำเป็นต้องใช้เครื่องหมายคำพูดรอบ "% *" ในกรณีที่ Git ส่งผ่านพา ธ ไฟล์ที่มีช่องว่าง


สำหรับคนที่ใช้ msysgit (ไม่ใช่ git ของ cygwin) ฉันสามารถทำให้มันง่ายขึ้นเล็กน้อย stackoverflow.com/questions/10564/…
Nick Knowlson

ในวินาทีคิดว่ามันอาจทำงานกับ cygwin เช่นกันฉันไม่แน่ใจทั้งหมด
Nick Knowlson

8

ขอบคุณชุมชน Stack Overflow ... และการวิจัยเล็กน้อยฉันสามารถรับEditPad Pro ที่ฉันโปรดปราน เพื่อใช้เป็นตัวแก้ไขหลักด้วย msysgit 1.7.5.GIT และ TortoiseGit v1.7.3.0 บน Windows XP SP3 ..

ทำตามคำแนะนำข้างต้นฉันเพิ่มเส้นทางไปยังสคริปต์ Bash สำหรับโปรแกรมแก้ไขรหัส ...

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

อย่างไรก็ตามหลังจากความพยายามที่ล้มเหลวหลายครั้งในการแก้ปัญหาที่กล่าวมาข้างต้น ... ในที่สุดฉันก็สามารถทำงานนี้ได้ ตามเอกสารของ EditPad Pro การเพิ่มค่าสถานะ '/ newinstance' จะอนุญาตให้เชลล์รออินพุตอินพุต ...

ธง' / newinstance ' เป็นกุญแจสำคัญในกรณีของฉัน ...

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

ใช่เครื่องหมายทับสองครั้งสำหรับพารามิเตอร์ newinstance ควรอยู่ในเอกสารของ Editpad ขอบคุณที่สังเกตที่นี่!
gwideman

EditPad Pro ต้องการสวิตช์บรรทัดคำสั่งที่ต้องการ/newinstanceให้มีเครื่องหมายสแลชหนึ่งอัน นี่เป็นเรื่องปกติสำหรับแอปพลิเคชัน Windows หากคุณเรียกใช้ EditPad จากเชลล์ UNIX คุณจะต้องใช้กลไกใด ๆ ที่เชลล์ของคุณเสนอเพื่อหลบหลีกสแลชดังนั้นจึงไม่เห็นสวิตช์เป็นพา ธ สัมบูรณ์และส่งต่อสแลชตัวอักษรไปยังบรรทัดคำสั่งของ EditPad
Jan Goyvaerts

2
หากคุณมี EditPad Pro 7 และคุณต้องการเรียกใช้ EditPad Pro จากกระบวนการที่ต้องการรอกระบวนการของ EditPad คุณควรผ่าน/waitสวิตช์บนบรรทัดคำสั่งของ EditPad คุณสามารถใช้/waitโดยมีหรือไม่มี/newinstanceเพื่อควบคุมว่าควรเปิดหน้าต่าง EditPad ใหม่หรือไม่หรือควรนำหน้าต่างที่มีอยู่มาใช้ใหม่หรือไม่ กระบวนการเปิดตัวโดยสคริปต์ของคุณจะรอให้ไฟล์ปิดโดยไม่คำนึงว่าหน้าต่างถูกสร้างหรือนำมาใช้ซ้ำ EditPad Pro 6 /waitและก่อนที่จะไม่ได้รับการสนับสนุน
Jan Goyvaerts

@JanGoyvaerts ~ ขอบคุณสำหรับ/waitเคล็ดลับธงเซอร์ ... :)
Eddie B

ฉันไม่สามารถให้ EditPad Lite ใช้งานได้โดยใช้คำแนะนำด้านบน อาจเป็นเพราะฉันพยายามเรียกใช้ EditPad (ผ่าน Git) โดยใช้เทอร์มินัล Windows แทน Git Bash หรือ UNIX shell อื่น ๆ สิ่งที่ทำงานสำหรับฉันคือการแก้ไขโดยตรง[core]ส่วน .gitconfig editor = "'C:/Program Files/Just Great Software/EditPad Lite 7/EditPadLite7.exe' //wait //newinstance"จะรวมสาย
user697473

8

สำหรับAtomคุณสามารถทำได้

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

และคล้ายกับรหัส Visual Studio

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

ซึ่งจะเปิดหน้าต่างAtomหรือVisual Studio Codeเพื่อให้คุณส่งผ่าน

หรือสำหรับSublime Text :

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

ง่ายและมีประสิทธิภาพมากขึ้น ขอบคุณ.
rom5jp

6

แก้ไขไฟล์. gitconfig ในโฟลเดอร์ c: \ Users \ YourUser และเพิ่ม:

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

6

นี่เป็นอาการหนึ่งของปัญหาที่มากกว่า TERM=dumbโดยเฉพาะอย่างยิ่งว่าคุณมีการตั้งค่าบางสิ่งบางอย่าง สิ่งอื่น ๆ ที่ทำงานไม่ถูกต้องคือlessคำสั่งที่บอกว่าคุณไม่มีเทอร์มินัลที่ใช้งานได้สมบูรณ์

ดูเหมือนว่านี่เป็นสาเหตุส่วนใหญ่ที่เกิดจากการตั้งค่า TERM เป็นสิ่งที่อยู่ในตัวแปรสภาพแวดล้อม Windows ทั่วโลกของคุณ สำหรับฉันปัญหาเกิดขึ้นเมื่อฉันติดตั้งStrawberry Perlข้อมูลบางอย่างเกี่ยวกับสิ่งนี้อยู่ในข้อผิดพลาด msysgit สำหรับปัญหานี้เช่นเดียวกับการแก้ปัญหาหลายอย่าง

ทางออกแรกคือการแก้ไขใน ~ / .bashrc ของคุณโดยการเพิ่ม:

export TERM=msys

คุณสามารถทำได้จากพรอมต์ Git Bash ดังนี้:

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

วิธีการแก้ปัญหาอื่น ๆ ซึ่งในท้ายที่สุดคือสิ่งที่ผมทำเพราะผมไม่สนใจเกี่ยวกับเหตุผลสตรอเบอร์รี่ของ Perl สำหรับการเพิ่มTERM=dumbการตั้งค่าสภาพแวดล้อมของฉันคือการไปและเอาTERM=dumbเป็นผู้กำกับในความคิดเห็นเกี่ยวกับเรื่องนี้รายงานข้อผิดพลาด msysgit

แผงควบคุม / ระบบ / ตัวแปรขั้นสูง / สภาพแวดล้อม ... (หรือคล้ายกันขึ้นอยู่กับรุ่นของ Windows) เป็นที่ตั้งค่าตัวแปรสภาพแวดล้อมที่เหนียวบน Windows ตามค่าเริ่มต้น TERM จะไม่ถูกตั้งค่า หากตั้งค่า TERM ไว้ที่นั่นแสดงว่าคุณ (หรือหนึ่งในโปรแกรมที่คุณติดตั้ง - เช่น Strawberry Perl) ตั้งค่าไว้ ลบการตั้งค่านั้นและคุณควรจะปรับ

ในทำนองเดียวกันถ้าคุณใช้ Strawberry Perl และใส่ใจลูกค้าCPANหรืออะไรทำนองนั้นคุณสามารถปล่อยให้TERM=dumbอยู่คนเดียวและใช้unset TERMในไฟล์ ~ / .bashrc ซึ่งจะมีผลคล้ายกันกับการตั้งค่าคำศัพท์ที่ชัดเจนดังกล่าวข้างต้น

แน่นอนว่าโซลูชันอื่น ๆ ทั้งหมดนั้นถูกต้องซึ่งคุณสามารถใช้git config --global core.editor $MYFAVORITEEDITORเพื่อให้แน่ใจว่า Git ใช้โปรแกรมแก้ไขที่คุณชื่นชอบเมื่อต้องการเปิดใช้งานสำหรับคุณ


ขอบคุณมาก! ฉันเคยมีปัญหานี้เพราะสตรอเบอร์รี่และมันทำให้ฉันโกรธ! ขอบคุณสำหรับการชี้ให้เห็นนี้
Dmitry Avtonomov


4

ฉันใช้งาน PortableGit 1.6 ได้ดี แต่หลังจากอัปเกรดเป็นรุ่น PortableGit 1.7 Windows แล้วฉันมีปัญหา คำสั่ง Git บางคำเปิด Notepad ++. exe ใช้ได้ แต่บางคำสั่งไม่ได้โดยเฉพาะการรีบูต Gitโดยเฉพาะจะทำงานต่างกัน

ปัญหาคือคำสั่งบางคำสั่งใช้กระบวนการ Windows cmd และบางคำสั่งใช้กระบวนการ Unix cmd ฉันต้องการมอบแอททริบิวต์เริ่มต้นให้กับตัวแก้ไข Notepad ++ ดังนั้นฉันต้องมีสคริปต์ที่กำหนดเอง ทางออกของฉันคือสิ่งนี้

  1. สร้างสคริปต์เพื่อเรียกใช้โปรแกรมแก้ไขข้อความที่เหมาะสม สคริปต์ดูแปลก ๆ แต่จัดการกับทั้งรูปแบบ 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 %*
    
  2. ตั้งค่าตัวแปร global.editor ส่วนกลาง

    สคริปต์ถูกบันทึกลงในโฟลเดอร์ git / cmd ดังนั้นจึงอยู่ในเส้นทาง gitconsole แล้ว นี่เป็นข้อบังคับเนื่องจากเส้นทางแบบเต็มอาจทำงานไม่ถูกต้อง

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

ตอนนี้ฉันสามารถรันคำสั่งgit commit -aและgit rebase -i masterได้ ลองดูถ้าคุณมีปัญหาในเครื่องมือ Git Windows


4

ฉันใช้ Git ในหลาย ๆ แพลตฟอร์มและฉันต้องการใช้การตั้งค่า Git เดียวกันกับพวกเขาทั้งหมด (อันที่จริงฉันมีไฟล์กำหนดค่าทั้งหมดของฉันอยู่ภายใต้การควบคุมรีลีสด้วย Git และวางโคลนที่เก็บ Git ไว้ในแต่ละเครื่อง) วิธีแก้ปัญหาที่ฉันพบคือ:

ฉันตั้งค่าตัวแก้ไขของฉันเป็นgiteditor

git config --global core.editor giteditor

แล้วฉันจะสร้างการเชื่อมโยงสัญลักษณ์ที่เรียกว่าgiteditorซึ่งอยู่ในของฉันเส้นทาง (ฉันมีไดเรกทอรีbinส่วนตัวแต่ทุกที่ในPATHใช้ได้) ลิงก์นั้นชี้ไปที่ตัวเลือกปัจจุบันของฉัน บนเครื่องที่แตกต่างกันและแพลตฟอร์มที่แตกต่างกันฉันใช้เครื่องมือแก้ไขที่แตกต่างกันดังนั้นนี่หมายความว่าฉันไม่ต้องเปลี่ยนการกำหนดค่า Git สากล ( .gitconfig ) เพียงแค่ลิงค์ที่gititorชี้ไป

ลิงก์สัญลักษณ์ได้รับการจัดการโดยระบบปฏิบัติการทุกระบบที่ฉันรู้จักแม้ว่าอาจใช้คำสั่งต่างกัน สำหรับลินุกซ์, คุณใช้-s LN สำหรับ Windows คุณสามารถใช้คำสั่งในตัวmklink พวกเขามีรูปแบบที่แตกต่างกัน (ซึ่งคุณควรมองหา) แต่มันก็ใช้งานได้เหมือนกันจริงๆ


ที่จริงแล้วฉันได้ลองทำสิ่งนี้บน Windows7 และมันไม่ทำงานจาก msys git มันบอกว่าerror: cannot spawn giteditor: No such file or directory
DanielSank

4

ตามคำแนะนำของ VonC สิ่งนี้ได้ผลสำหรับฉัน (ทำให้ฉันบ้า):

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

การละเว้น-waitอาจทำให้เกิดปัญหาโดยเฉพาะอย่างยิ่งหากคุณทำงานกับGerritและเปลี่ยนรหัสที่ต้องคัดลอกด้วยตนเองไปที่ด้านล่างของข้อความยืนยันของคุณ


4

ฉันต้องทำทั้งสองอย่างต่อไปนี้เพื่อให้ Git เปิดใช้งาน Notepad ++ ใน Windows:

  • เพิ่มต่อไปนี้ใน. gitconfig:

    editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
    
  • ปรับเปลี่ยนทางลัดเพื่อเปิดใช้เชลล์ Git Bash เพื่อให้ทำงานในฐานะผู้ดูแลระบบจากนั้นใช้ปุ่มนั้นเพื่อเปิดใช้งานเชลล์ Git Bash ฉันเดาว่ารายการเมนูบริบท "Git Bash here" ไม่ได้เรียกใช้ Notepad ++ พร้อมการอนุญาตที่จำเป็น

หลังจากทำทั้งสองอย่างข้างต้นแล้วก็ใช้งานได้


3

ฉันใช้Cygwinบน Windows ดังนั้นฉันจึงใช้:

export EDITOR="emacs -nw"

-nwเป็นno-windowsเช่นบอก Emacs ไม่ได้ที่จะลองและใช้วินโดว์

ปุ่มลัด Emacs ไม่ทำงานสำหรับฉันจากเชลล์ของ Windows ดังนั้นฉันจะใช้เฉพาะจาก Cygwin เชลล์ ... ( แนะนำให้ใช้rxvt )


3

นี่คือการตั้งค่าของฉันเพื่อใช้Geanyเป็นบรรณาธิการสำหรับ Git:

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

ด้วยเนื้อหาต่อไปนี้ในgeany.bat:

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

มันทำงานได้ทั้งในคอนโซล DOS และ msysgit


2
VonC ตอบเกี่ยวกับ notepad ++ คำตอบของฉันสำหรับ Geany?
CharlesB

2

ดูเหมือนว่า Git จะไม่พบเครื่องมือแก้ไขหากมีช่องว่างในเส้นทาง ดังนั้นคุณจะต้องใส่ไฟล์แบตช์ที่กล่าวถึงในคำตอบของ Patrickลงในพา ธ ที่ไม่ใช่ช่องว่าง


3
รูปแบบนี้ทำงานได้ดีสำหรับพา ธ ที่มีช่องว่าง: git config - global core.editor "\" c: \ Program Files \ textpad 5 \ textpad.exe \ "" ดังนั้นจึงอาจเป็นประโยชน์สำหรับคุณที่จะหลีกเลี่ยงการสร้างแบตช์ไฟล์
Carl

2

ฉันมีปัญหาในการทำให้ Git ร่วมมือกับWordPad , Komodo Editและบรรณาธิการอื่น ๆ ที่ฉันให้ไว้ ส่วนใหญ่เปิดให้แก้ไข แต่ Git ชัดเจนไม่รอให้เกิดการบันทึก / ปิด

ในฐานะที่เป็นไม้ยันรักแร้ฉันเพิ่งจะทำคือ

git commit -m "Fixed the LoadAll method"

เพื่อให้สิ่งต่าง ๆ เคลื่อนไหว มันมีแนวโน้มที่จะทำให้ข้อความคอมมิชชันของฉันสั้นกว่าที่ควรจะเป็นเล็กน้อย แต่ชัดเจนว่ามีงานบางอย่างที่ต้องทำใน Git เวอร์ชัน Windows

GitGUI ก็ไม่เลวเช่นกัน ใช้การปฐมนิเทศเล็กน้อย แต่หลังจากนั้นก็ใช้งานได้ดีพอสมควร


2

ฉันชอบที่จะใช้ Emacs การตั้งค่าอาจยุ่งยากเล็กน้อย

  1. ดาวน์โหลด Emacs c:\emacsและแกะมันบางแห่งเช่น
  2. c:\emacs\bin\addpm.exeวิ่ง คุณต้องคลิกขวาและ "Run as Administrator" หากคุณใช้ Windows Vista ขึ้นไป สิ่งนี้จะใส่ไฟล์ที่เรียกทำงานได้ในพา ธ ของคุณ
  3. เพิ่ม(server-start)บางแห่งใน.emacsไฟล์ของคุณ ดู Emacs Windows FAQสำหรับคำแนะนำเกี่ยวกับตำแหน่งที่จะวาง.emacsไฟล์ของคุณ
  4. git config --global core.editor emacsclientw

Git จะเปิดไฟล์ภายในกระบวนการ Emac ที่มีอยู่ คุณจะต้องเรียกใช้กระบวนการที่มีอยู่ด้วยตนเองจากc:\emacs\bin\runemacs.exeคุณจะต้องเรียกว่ากระบวนการที่มีอยู่ด้วยตนเองจาก


1

ฉันจัดการเพื่อให้เวอร์ชันสภาพแวดล้อมทำงานได้โดยการตั้งค่าตัวแปร EDITOR โดยใช้เครื่องหมายคำพูดและ/:

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

1

ฉันเพิ่งมีปัญหาเดียวกันและพบวิธีแก้ไขปัญหาที่แตกต่างกัน ฉันได้รับ

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

ฉันได้รับVISUAL=ecแล้วและไฟล์แบตช์เรียกว่าec.batบนเส้นทางของฉันที่มีหนึ่งบรรทัด:

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

สิ่งนี้ช่วยให้ฉันแก้ไขไฟล์จากบรรทัดคำสั่งด้วยec <filename>และการVISUALตั้งค่าหมายความว่าโปรแกรมที่ unixy ส่วนใหญ่รับมันด้วย Git ดูเหมือนว่าการค้นหาเส้นทางที่แตกต่างกันไปคำสั่งอื่น ๆ ของฉันแม้ว่า - เมื่อฉันมองที่git commitอยู่ในกระบวนการตรวจสอบที่ฉันเห็นมันมองในทุกโฟลเดอร์บนเส้นทางสำหรับecและแต่ไม่ได้สำหรับec.exe ec.batฉันเพิ่มตัวแปรสภาพแวดล้อมอื่น ( GIT_EDITOR=ec.bat) และทุกอย่างใช้ได้


1

ฉันใช้ GitHub สำหรับ Windows ซึ่งเป็นตัวเลือกภาพที่ดี แต่ฉันก็ชอบที่บรรทัดคำสั่งเพื่อให้มันทำงานเมื่อฉันเปิดพื้นที่เก็บข้อมูลใน Git เชลล์ฉันเพิ่งตั้งต่อไปนี้:

git config --global core.editor vim

ซึ่งใช้งานได้ดี



1

ฉันพบวิธีแก้ปัญหาที่เรียบง่ายที่สวยงามโพสต์ที่นี่ - แม้ว่าอาจจะมีข้อผิดพลาดในเส้นทางที่คุณต้องคัดลอกไปที่ไฟล์ "subl" ที่ได้รับจากผู้เขียน

ฉันใช้ Windows 7 x64 และฉันต้องใส่ไฟล์ "subl" ใน/Git/cmd/โฟลเดอร์ของฉันเพื่อให้ทำงานได้

มันใช้งานได้เหมือนมีเสน่ห์


1

Atom และ Windows 10

  1. ฉันคลิกขวาที่ไอคอน Atom ที่เดสก์ท็อปและคลิกที่คุณสมบัติ
  2. คัดลอกพา ธ ตำแหน่ง "เริ่มต้นใน"
  3. มองไปที่นั่นด้วย Windows Explorer และพบ "atom.exe"
  4. ฉันพิมพ์สิ่งนี้ใน Git Bash:

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

หมายเหตุ: ผมเปลี่ยนทั้งหมดสำหรับ\ /ฉันสร้าง. bashrc ที่โฮมไดเร็กตอรี่ของฉันและเคย/ตั้งโฮมไดเร็กตอรี่ของฉันและมันใช้งานได้,/จะเป็นหนทางที่จะไป.


โปรดตรวจสอบURLนี้มันจะมีประโยชน์ในการยกระดับคุณภาพเนื้อหาของคุณ
Willie Cheng

@willie ขอบคุณฉันจัดรูปแบบข้อความและเพิ่มแท็ก หวังว่าจะปรับปรุงให้ดีขึ้นอีกหน่อย
Jonathan Ramos

0

นี่คือทางออกของ Cygwin:

#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
  1. หากไม่มีเส้นทางให้ผ่านไม่มีเส้นทาง

  2. หากเส้นทางว่างเปล่าให้ผ่านเส้นทางที่ว่างเปล่า

  3. หากเส้นทางไม่ว่างเปล่าให้แปลงเป็นรูปแบบ Windows

จากนั้นฉันจะตั้งค่าตัวแปรเหล่านี้:

export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
  1. EDITOR อนุญาตให้สคริปต์ทำงานกับ Git

  2. GIT_EDITOR อนุญาตให้สคริปต์ทำงานกับคำสั่ง Hub

แหล่ง


0

สิ่งนี้ใช้ได้กับฉันโดยใช้ Cygwin และTextPad 6 (แก้ไข: ยังทำงานกับ TextPad 5 ได้ตราบใดที่คุณเปลี่ยนแปลงสคริปต์อย่างเห็นได้ชัด) และสมมุติว่าแบบจำลองนี้สามารถใช้กับบรรณาธิการอื่น ๆ ได้เช่นกัน:

ไฟล์~/.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"

หนึ่งซับนี้ทำงานเช่นกัน:

ไฟล์~/script/textpad.sh(ตัวเลือก 2):

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

0

สิ่งนี้ใช้ได้กับฉัน:

  1. เพิ่มไดเรกทอรีซึ่งมีตัวแก้ไขที่สามารถเรียกทำงานได้ของตัวแปรPATHของคุณ (เช่น"C: \ Program Files \ Sublime Text 3 \" )
  2. รีบูทคอมพิวเตอร์ของคุณ
  3. เปลี่ยนตัวแปร Git ส่วนกลางของcore.editorเป็นชื่อของตัวแก้ไขที่ปฏิบัติการได้โดยไม่มีนามสกุล '.exe' (เช่น git config --global core.editor sublime_text)

แค่นั้นแหละ!

หมายเหตุ: Sublime Text 3 เป็นตัวแก้ไขที่ฉันใช้สำหรับตัวอย่างนี้


เมื่อกำหนดค่าด้วยวิธีนี้ Sublime Text 3 จะเปิดหลายอินสแตนซ์หรือจัดการกับข้อเท็จจริงที่ว่าคอมไพล์ต้องการให้ปิดสัญญาณการสิ้นสุดของการแก้ไขหรือไม่
James World

1
ฉันคิดว่ามันจะเปิดหน้าต่างใหม่ คุณสามารถเพิ่มสวิตช์ - รอ ( sublimetext.com/forum/viewtopic.php?f=3&t=3257 )
nikoskip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.