git commit
이 명령에 대한 bash 별칭을 작성하고 싶습니다 . 나는 보통 다음과 같이 사용하므로 git commit -m "my message here"
다음과 같은 별칭을 작성했습니다.
alias commit='git commit'
이를 통해 다음을 수행할 수 있습니다.
$ commit -m "My message"
하지만 별칭을 업데이트하여 해당 -m
옵션을 제거할 수도 있다고 생각했습니다.
$ commit "my message"
그 다음에"아직도 따옴표를 입력해야 하나요?"라고 생각했습니다. 제가 구상한 내용은 다음과 같습니다.
$ commit
> My message here
>
따옴표 붙은 문자열에 Enter를 입력하면 나타나는 따옴표는 계속해서 다음 위치를 나타냅니다.
$ git commit -m "I am about to hit the enter key
>
Enter 키를 누르면 명령이 완료됩니다.
Bash에서 이 동작을 스크립트로 작성할 수 있는 방법이 있나요?
Ctrl
보너스: +를 클릭하면 명령이 중단됩니다 c
.
답변1
bash
'를 사용하는 함수를 작성할 수 있습니다 read -e
.
commit() {
local commitlog
IFS= read -rep '> ' commitlog &&
git commit -m "$commitlog" "$@"
}
read -e
를 눌러 개행을 삽입할 수 있지만 한 줄만 읽혀지기 Ctrl+VCtrl+J때문에 첫 번째 개행 이후의 모든 내용은 삭제됩니다.read
-d $'\r'
옵션을 추가하여 이 문제를 해결할 수 있지만 read
,Enter적어도 버전 5.0.7 및 4.4.19에서는 프롬프트 이후의 후속 처리가 엉망이라는 것을 발견했습니다..
어쨌든 더 쉽습니다 zsh
.
commit() {
local commitlog=
vared -ep '> ' commitlog &&
git commit -m "$commitlog" "$@"
}
개행 문자를 입력하려면 Ctrl+VCtrl+Jlike in 또는 with를 사용할 수 있습니다.bash
Alt+Enter
또는 기록(중복을 피하기 위해 여기에 공유됨):
commit() {
emulate -L zsh
setopt sharehistory histignorealldups histsavenodups
local commitlog=
fc -ap ~/.zcommit-history 500
vared -ehp '> ' commitlog || return
print -rs -- "$commitlog"
git commit -m "$commitlog" "$@"
}
답변2
이 기능을 원하는지 궁금합니다.
commit() {
if (( $# == 0 )); then
command git commit # no `-m`: invoke an editor
else
command git commit -m "$*"
fi
}
편집기를 열고 싶지 않기 때문에 아마도 다음과 같습니다.
commit() {
[[ $# -eq 0 ]] && set -- A default commit message here.
command git commit -m "$*"
}