해결책 없음

해결책 없음

최근에 oh-my-zsh로 전환했는데 위쪽 화살표 키가 작동하는 방식에 익숙해지지 않습니다. 예를 들어 ssh를 입력하고 위쪽 화살표를 누르면 ssh로 시작하는 명령만 표시되지만 이전 명령은 표시하고 싶습니다. 나에게 익숙한 Bash처럼 실행되도록 하려면 어떻게 해야 합니까?

다음 줄을 추가하십시오.답변zshrc의 끝으로 가는 것은 도움이 되지 않았으며, bash에서 oh-my-zsh로 업그레이드하고 전환한 후에도 이런 일이 발생하지 않았습니다.

답변1

해결책 없음

아이러니하게도 사람들이 묻는 질문에 대한 대답은 반복적이다…

바인딩 키 '\e[A'는 기록에서 뒤로 검색을 시작합니다.
Bindkey '\e[B' 기록이 앞으로 검색을 시작합니다.
… 예완전히 틀린 대답. 이는 터미널 화살표 편집 키의 제어 순서가 ZLE에 의해 확장 위젯에 매핑되고 history-beginning-search-backwardOh history-beginning-search-forwardMy ZSH history-substring-search플러그인에 의해 제공되는지 확인합니다.

이것이 바로 당신이 생각한 것입니다원하지 않는다생각하다.

다른 동작을 선호하기 때문에 이 기능을 끄려고 하는 것입니다. 동작이 손상되었기 때문에 고치려는 것이 아닙니다.

해결책

당신이 원하는 것은 일반 Z Shell과 마찬가지로 위젯에 매핑되는 키입니다. Oh My ZSH는 일부(전부는 아니지만) 사람들이 좋아하는 Z Shell의 확장 및 사용자 정의입니다. Vanilla Z Shell의 위젯은 이전 Bourne Again 셸에서 좋아했던 동작과 대략 비슷합니다. (Bourne Again 셸과 달리 여러 줄의 편집 버퍼가 있는 경우 버퍼의 위쪽 및 아래쪽 가장자리에서 위아래로 이동하고 기록에서 위아래로 이동합니다.)

이러한 위젯은 다음과 같습니다.

바인딩 키 "$terminfo[kcuu1]"이 온라인이거나 기록에 기록되어 있습니다.
바인딩된 키 "$terminfo[kcud1]"이 오프라인이거나 기록 기록이 있습니다.

작업 방식에 주의를 기울이세요.특정 터미널 유형을 배선하지 않음스크립트를 입력하세요. 또는 "$termcap[ku]"및 를 사용할 수 있습니다 "$termcap[kd]". Z Shell은 사용자가 적절한 모듈을 로드했다고 가정하고 둘 사이의 매핑을 유지합니다. 그러나 일반적으로 말하면 세상은 지금 terminfo를 사용할 수 있다면 그것을 선호할 것입니다. 이기종 시스템과 함께 사용하거나 다른 사람에게 물건을 제공하기 위해 엄격하게 방탄하려면 test -nOh My ZSH 확장 프로그램이 실제로 수행하는 것처럼 거기에 필요합니다.

test -n "$terminfo[kcuu1]" &&bindkey "$terminfo[kcuu1]" 온라인 또는 기록
test -n "$terminfo[kcud1]" &&bindkey "$terminfo[kcud1]" 오프라인 또는 기록

(극단적인 경우, 가능성이 거의 없는 가능성에 대처하려면 약간의 변수 확장이 필요할 것입니다 "${terminfo[x]-${termcap[y]}}". 아, 내 ZSH 확장은 후자를 신경 쓰지 않으며 실제로는 상당 부분에서도 벗어날 수 있습니다. In In 실제로는 거의 모든 사람이 termcap 및 terminfo 모듈을 로드하고 있으므로 현재 터미널 유형에 대한 레코드가 실제로 관련 제어 순서를 정의하는지 여부만 걱정하면 됩니다 test -n.

Bourne Again 쉘의 동작에 대한 보다 정확한 근사치는 다음과 같습니다.

키 "$terminfo[kcuu1]" 기록 바인딩
바인딩 키 "$terminfo[kcud1]" 기록
이는 일반적인 Z Shell 기본값이 아니며 첫 번째 여러 줄 명령줄을 편집한 후 기본값을 원하는 대로 결정할 수 있습니다. ☺

관련 정보