![zle 위젯을 사용하여 전체 버퍼를 선택하는 방법은 무엇입니까?](https://linux55.com/image/220935/zle%20%EC%9C%84%EC%A0%AF%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A0%84%EC%B2%B4%20%EB%B2%84%ED%8D%BC%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 zle 위젯이 있습니다.
_ctrl-a() {
CURSOR=0
if ((MARK == 0)); then
zle set-mark-command
fi
if [ "$BUFFERLINES" -gt 1 ]; then
zle end-of-buffer-or-history
else
zle end-of-line
fi
}
zle -N _ctrl-a
bindkey '^A' _ctrl-a # Ctrl+A
전체 버퍼를 선택합니다. 내 말은 커서를 버퍼의 시작 부분에 놓고 마커를 시작한 다음 커서를 버퍼의 끝에 둔다는 것입니다.
여기에서 여러 줄 명령에 사용하는 위젯은 end-of-buffer-or-history
이지만, 로 만들고 싶습니다 end-of-buffer
.
그래서 저는 다음을 교체하고 싶습니다:
if [ "$BUFFERLINES" -gt 1 ]; then
zle end-of-buffer-or-history
else
zle end-of-line
fi
그리고
zle end-of-buffer
하지만 그렇지 않은 것 같습니다 end-of-buffer
.
어떡해?
폴리스티렌변수를 사용하여 전체 버퍼를 선택할 수 있다면 좋은 학습 경험이 될 것입니다 MARK
.
답변1
존재하다위젯 코드MARK
, CURSOR
, BUFFER
등 의 변수를 읽을 수 있을 뿐만 아니라 수정할 수도 있습니다 .
커서를 버퍼 끝으로 이동하려면 다음을 수행하십시오.
CURSOR=$#BUFFER
마커가 시작에 있고 커서가 끝에 있는 전체 버퍼를 선택하려면 위젯을 호출할 필요가 없습니다. 적절한 변수를 설정하기만 하면 됩니다.
function _ctrl-a {
MARK=0
CURSOR=$#BUFFER
REGION_ACTIVE=1
}