2012-04-18 50 views
7

Đây là một phần mở rộng của câu hỏi nàysử dụng Notepad ++ cho git trong Cygwin

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

tôi đã làm tất cả các kết hợp mà tôi có thể nghĩ ra cho kịch bản shell của tôi. khi tôi có giao diện điều khiển Cygwin của mình (im sử dụng mintty nếu nó quan trọng) tôi có thể nhập

npp {file} 

và tệp mở đúng cách. nhưng khi tôi thực hiện một số

git rebase -i HEAD~5 

npp sẽ mở ra với một tài liệu trống mới, không phải tệp tương tác để kiểm soát việc rebase. bất kỳ ý tưởng tại sao điều này sẽ xảy ra?

 
git --version 
git version 1.7.9 

phiên bản mới nhất của Cygwin trên cửa sổ 7 máy và NPP 5.9.8

cũng có, đây là kịch bản wrapper của tôi

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

Cygwin, thú vị. Kịch bản của tôi đã được sử dụng với msysgit, trong một phiên bash DOS hoặc mwin. Đối với Cygwin, không nên sử dụng đường dẫn Cygwin? '/ cygdrive/c/Program Files (x86)/...' – VonC

+0

posix được bật để cửa sổ đường dẫn bên trong Cygwin làm việc tốt, bên cạnh đó, tôi đã thử cả hai cách và không làm việc. – scphantm

+0

bạn đã kiểm tra http://superuser.com/q/168971/11855 – CharlesB

Trả lời

14

tôi đã đúng về vấn đề con đường Cygwin của tôi. tôi đã thay đổi trình bao bọc vỏ của mình thành

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

và nó hoạt động hoàn hảo.

+1

Tuyệt vời (+1). Tôi đã chỉnh sửa bằng câu trả lời gốc (http://stackoverflow.com/questions/1634161/how-do-i-use-notepad-or-other-with-msysgit/1635493#comment13111374_1635493) để bao gồm kết luận của bạn (và tham khảo lại câu trả lời). – VonC

+1

Tôi đang sử dụng Cygwin và có một số vấn đề với \ vì vậy tôi đã thay đổi điều này thành: #!/Bin/sh 'C:/Apps/Notepad ++/notepad ++. Exe' -multiInst -notabbar -nosession -noPlugin " $ (cygpath -w "$ *") " Và bây giờ nó hoạt động cho tôi. Cảm ơn một bó cho điều này. – jontejj

+0

Bạn có ý nghĩa gì với "trình bao bọc shell" ở đây? Tôi đang gặp vấn đề này với Sublime Text và không thể tìm ra nó. Khi tôi thực hiện một cam kết Git, nó sẽ mở một tệp rỗng không tồn tại. Nó tìm một đường dẫn như thế này: "C: \ c \ Users \ Jordan \ Desktop \ test \ .git \ COMMIT_EDITMSG" –

5

Đây là giải pháp hoàn chỉnh mà không có tập lệnh bao bọc.

Những dòng này giả định rằng bạn đang sử dụng phiên bản 64 bit của Windows.

Chạy lệnh sau từ dấu nhắc lệnh (Cygwin):

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

Đây là một ví dụ về cách bạn .gitconfig nên trông giống như sau lệnh:

[core] 
    excludesfile = /home/Aternus/.gitignore_global 
    autocrlf = input 
    safecrlf = true 
    editor = '/cygdrive/c/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin 
+0

Giải pháp này không xử lý với đường dẫn linux ... –

+3

Điều này có thể hoạt động chỉ với phiên bản Windows của Git, không phải Cygwin's, bởi vì Cygwin's Git sẽ thực thi Notepad ++ với đường dẫn của Cygwin tới tập tin: 'notepad ++. Exe/home/user/repository/file.extension'. Tôi chắc chắn Windows Notepad ++ sẽ không tìm thấy tập tin như vậy. Ngay cả khi bạn có bạn repo bên ngoài thư mục của Cygwin, nó sẽ giống như thế này: 'notepad ++. Exe/cygdrive/d/repository/file.extension'. –

+1

Khi tôi sử dụng tính năng này, tôi sẽ mở một cửa sổ sổ ghi chép trống khi thực hiện rebase tương tác ... – ddinchev

3

Tôi đã tạo một tập lệnh đơn giản để chạy các lệnh Windows tùy ý với các đối số đường dẫn kiểu UNIX:

cygrun.sh

#!/bin/sh 
if test -z "$1"; then 
    echo "Usage: $(basename "$0" .sh) program [argument]..." 
    exit 1 
fi 

program=$1 
shift 
if test $# -ge 0; then 
    IFS=$'\n' 
    exec "$program" $(cygpath -w "[email protected]") 
else 
    exec "$program" 
fi 

Đây là cách tôi có thể sử dụng nó trong cấu hình git của tôi (giả sử cygrun là một liên kết tượng trưng đến cygrun.sh đâu đó trong PATH):

[core] 
    editor = cygrun 'C:/Program Files/Notepad2/Notepad2.exe' 
[difftool "diffmerge"] 
    cmd = cygrun 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' \"$LOCAL\" \"$REMOTE\" 

Bằng cách này một kịch bản có thể phù hợp với nhiều trường hợp sử dụng tương tự, không cần phải tạo trình bao bọc riêng biệt mỗi lần. Nó cũng có thể thuận tiện để sử dụng từ dòng lệnh.

+0

Phiên bản cải tiến của tập lệnh, cũng có thể được sử dụng để chạy các công cụ Cygwin sử dụng đường dẫn Windows: https: //gist.github .com/gene-pavlovsky/e81c8e18327540f70df4e5296ff3dd15 Sử dụng tùy chọn '-w' để chạy các công cụ Windows có đường dẫn UNIX và không có tùy chọn (hoặc' -u') để chạy các công cụ Cygwin có đường dẫn Windows. –

0
#!/bin/dash -e 
if [ "$1" ] 
then k=$(cygpath -w "$1") 
elif [ "$#" != 0 ] 
then k= 
fi 
Notepad2 ${k+"$k"} 
  1. Nếu không có đường dẫn, vượt qua không có con đường

  2. Nếu con đường trống, vượt qua con đường trống

  3. Nếu con đường không phải là trống rỗng, chuyển đổi sang định dạng Windows.

Sau đó, tôi thiết lập các biến:

export EDITOR=notepad2.sh 
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' 
  1. EDITOR cho phép kịch bản để làm việc với Git

  2. GIT_EDITOR cho phép kịch bản để làm việc với Hub commands

Source

Các vấn đề liên quan