
나는 Oh-my-zsh를 통해 ZSH를 사용하는데, 내가 본 멋진 기능 중 하나는 백틱에 있을 때 셸이 내 명령을 확장한다는 것입니다.
예를 들어 `pwd`
+ 는 현재 경로로 tab대체됩니다 .`pwd`
백틱을 사용하지 않고도 일부 명령에 대해 동일한 작업을 수행하는 상대적으로 쉬운 방법이 있는지 궁금합니다. 이를 일부 별칭(또는 함수)에 적용하고 싶습니다.
분명히 말하면 인수를 명령으로 확장하는 것이 아니라 명령 자체를 말하는 것입니다.
이것은 정말 놀라운 기능이지만 제가 찾던 기능은 아닙니다. 내가 뭔가 잘못한 것이 아니라면 별칭이 정의된 대로 별칭이 확장되지만 결과는 확장되지 않습니다. 예를 들면 다음과 같습니다.
전체 명령 대신 해당 명령의 결과를 보고 싶습니다.
답변1
이를 위해 사용자 정의 zle 위젯을 사용하고 키 바인딩으로 호출할 수 있습니다. 예를 들어 Alt+ ( , Tab와 동일 )EscTab
expand-to-output () {
BUFFER='$('$BUFFER')'
CURSOR=0
zle redisplay
zle expand-word
}
zle -N expand-to-output
bindkey "^[^I" expand-to-output
Alt이제 + 뒤에 명령을 입력하면 Tab전체 명령이 해당 출력으로 대체됩니다.만약에명령이 성공적으로 실행될 수 있습니다. 명령을 성공적으로 실행할 수 없는 경우 입력한 명령줄은 $(...)
확장되지 않고 둘러싸일 뿐입니다 . 오류 메시지가 있으면 편집 버퍼 위에 인쇄되어야 합니다. 여러 줄 프롬프트에서는 안정적으로 작동하지 않을 수 있습니다.
설명:
expand-to-output () {...}
(새)expand-to-output
함수를 정의합니다.BUFFER
현재 명령줄이 포함되어 있습니다.BUFFER='$('$BUFFER')'
명령줄$(
앞과 뒤에 위치합니다 . 와 동일 하지만 중첩될 수 있습니다.)
$(...)
`...`
CURSOR
명령줄에서 커서의 위치입니다.CURSOR=0
(편집된) 명령줄의 시작 부분, 즉 에 커서를 놓습니다$
. 거기에 커서를 이동하지 않고 전체 프로세스를 대체하는 대신zsh
내부의 단어를 확장하려고 하는 경우가 발생할 수 있습니다.$(...)
zle redisplay
편집 버퍼를 다시 표시합니다. 이렇게 하면 확장된 명령이 무언가를 인쇄할 때 발생하는 표시 오류를 방지할 수 있습니다.표준 오류. (참고: 여러 줄 프롬프트에는 몇 가지 문제가 있을 수 있습니다)zle expand-word
expand-word
일반적으로 탭 완성의 일부로 호출되는 위젯을 호출합니다 .zle -N expand-to-output
같은 이름의 위젯으로 함수를 등록합니다.bindkey "^[^I" expand-to-output
위젯을 +expand-to-output
에 바인딩합니다 .AltTab