쉘이 종료 코드를 기다리지 않고 Cygwin에서 메모장 ++ 사용


19

Cygwin을 실행 중이며 메모장 + +를 기본 쉘 편집기로 사용하고 싶습니다 .Mac에서와 비슷한 종류 mate whatever로 TextMate 인스턴스를 열 수 있습니다 . 내에서 ~/.bashrcCygwin에서의 파일 나는 다음과 같은 별칭 및 환경 변수 세트를 가지고 :

export EDITOR="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
alias np="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"

그것은 대부분 작동 : 내가 입력 할 때 np whatever또는 $ EDITOR에 대한 Cygwin에서 프로그램 호출, 메모장 ++가 열릴 때.

그러나 셸은 Notepad ++가 닫힐 때까지 기다렸다가 그때까지는 입력을 허용하지 않습니다. 이것은 bash에만 해당 될 수 있지만 Cygwin에서 Notepad ++를 열고 쉘이 종료 코드가 계속되기를 기다리지 않도록 어떻게 말할 수 있습니까? &alias 명령의 끝에 a 를 추가하면 제대로 작동하지 않습니다. 제목없는 파일 filename: command not found을 열고 파일을 여는 대신 경고 만합니다 .

감사!

답변:


16

bash앰퍼샌드 앞에 인수를 전달 하는 함수를 시도 할 수 있습니다 .

np ()
{
    /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $* &
}

그러나 더 큰 문제는 Notepad ++가 종료 될 때까지 기다리지 않는 것이 전부 입니다. $EDITOR일반적으로 사용하는 셸 명령 은 편집기가 편집이 완료되었다는 표시를 다시 보낼 때까지 기다리 도록 설계되었습니다 . 이는 일반적으로 편집기가 종료되었음을 의미합니다 (예 : vi또는 nano).

이맥스 설정하는 방법이 당신 EDITOR에게 emacsclient당신이 완료 편집있을 때 다음, 당신이 마법의 키 입력을 (충돌 C-x #하는 편집이 완료 나타냅니다). 메모장 ++에 cygwin 사용자와 비슷한 것이 있다면 이것이 어떻게 작동하는지 알 수 있습니다.

또 다른 대안은 평범하고 지루한 간단한 메모장을 EDITOR로 사용하고 많은 양을 위해 메모장 ++를 예약하는 것입니다 ( 이 블로그 게시물 에서 아이디어를 얻었 습니다 )


대단했습니다. 나는 바닐라 메모장을 EDITOR로, 메모장 ++을 np ()로하겠습니다
Andrew

메모장은 또한 편집이 완료되기를 기다려야합니다
codezombie

8

간단한 심볼릭 링크로 해결했습니다.

ln -s /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe ~/bin/npp

물론 ~ / bin은 $ PATH에 있습니다.

이제 파일을 열려면 cygwin 프롬프트에서 "npp filename.txt"를 입력하십시오. 명령 끝에 &를 사용할 필요가 없었습니다.

또한 다른 창을 열지 않고 현재 실행중인 메모장 ++ 창에 탭을 던집니다. 파일이 이미 열려 있으면 다시 열리지 않습니다.


$ PATH에 ~ / bin을 어떻게 추가합니까?
eric f

3

EDITOR = "/ cygdrive / c / Program \ Files \ '(x86)'/ Notepad ++ / notepad ++. exe"내보내기

별칭 np = "/ cygdrive / c / Program \ Files \ '(x86)'/ Notepad ++ / notepad ++. exe"

x86에서도 작동


2

명령 끝에 공백과 앰퍼샌드 (&)를 추가하면 메모장이 열려있는 상태에서 셸이 즉시 입력 모드로 돌아갑니다.

편집시 :

나는 당신의 별칭에 추가하는 것에 대해 이야기하고 있지 않습니다. 다음과 같이 명령 끝에 추가하십시오.

np whatever &


1
아 이것은 지금까지 좋아 보인다. 그것을 넣을 수있는 방법이 있습니까? .bash_profile그래서 항상 입력 할 필요는 없습니까?
Andrew

나는 bash 전문가는 아니지만 별칭을 인수 인 변수로 사용하고 끝에 앰퍼샌드를 포함시킬 수 있다고 가정합니다. bash를 사용하는 똑똑한 사람은 아마도 정확한 구문을 줄 수 있습니다. Windows 개발자 환경에서 작업하는 동안 똑같은 작업을 수행했기 때문에 질문에 대답하는 방법 만 알았습니다. :)
Robert S Ciaccio

Bash에서 별칭을 변수로 사용할 수 없습니다. 함수 나 스크립트를 사용해야합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1

별명은 보간 된 인수를 사용하지 않습니다. 대신 함수를 사용하십시오.

function np() { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $1 & }

1
#!/bin/sh
/cygdrive/c/Program\ Files/Notepad++/notepad++.exe $@ &

이 스크립트는 백그라운드에서 Notepad ++를 시작하여 '&'앞에 명령 행 인수를 전달합니다.

Doug가 조언 했듯이 $EDITOR차단하지 않는 기본값 을 사용하면 문제가 발생할 수 있습니다.


0

cygwin에는이를 수행하기위한 특정 명령이 있습니다. run.exe를 다운로드하고 PATH에 있는지 확인하십시오 (또는 PATH에 실행 파일이 포함되어 있는지 확인).

alias np="run.exe /cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.