Zsh의 메뉴 기반 완성

Zsh의 메뉴 기반 완성

Powershell을 사용하는 Windows 터미널의 경우 매우 편리한 기능을 제공하는 PSReadline 플러그인이 있습니다. 예를 들어, 입력을 시작하면 탐색 가능한 내 기록 목록 보기가 표시됩니다. 따라서 입력하면 cd내가 사용한 최근 10개의 명령 목록이 표시되고 cd해당 목록을 위아래로 이동하여 하나를 선택할 수 있습니다.

PSReadline 스크린샷 - 스크롤 가능한 기록

내가 좋아하는 또 다른 기능은 cdTab 키를 입력하고 눌러 탐색할 수 있는 모든 하위 디렉터리 목록을 표시할 수 있다는 것입니다. 또한 위/아래/왼쪽/오른쪽 키를 눌러 이 목록에서 디렉터리를 선택하고 해당 디렉터리로 이동할 수도 있습니다.

PSReadline - 디렉터리 선택 스크린샷

WSL(Ubuntu) 프롬프트에 대해 비슷한 작업을 수행할 수 있습니까? 그런데 저는 Powershell과 WSL 모두에서 프롬프트로 oh-my-posh를 사용합니다. oh-my-zsh에 이와 같은 기능이 있을 것으로 생각되지만 oh-my-posh의 테마를 설정하는 데 많은 시간을 소비하므로 설치하지 않는 것이 좋습니다. 테마 없이 oh-my-zsh 플러그인을 사용할 수 있는 방법이 없다면 말이죠.

답변1

Ubuntu 및 대부분의 GNU/Linux 배포판의 기본 셸인 Bash는 이러한 멋진 기능을 대부분 지원하지 않습니다. 그러나 구성 파일을 일부 조정하면 더 가까운 기능을 얻을 수 있습니다. Zsh는 추가 기능을 갖춘 또 다른 셸입니다. Bash에는 메뉴 기반 대화형 완성 기능이 없지만 Zsh에는 있습니다. Zsh와 Bash 모두에서 기록 검색을 수행하는 여러 가지 방법이 있습니다.

Ubuntu에 Zsh를 설치하려면 실행 sudo apt install zsh한 다음 기본 쉘 변경을 사용 chsh하거나 zshBash에서 한 번만 실행하여 Zsh로 전환할 수 있습니다. 기본 구성 파일을 생성하려면 Zsh를 한 번 실행해야 합니다. Bash 및 Zsh의 구성 파일은 각각 홈 폴더 ~/.bashrc 및 ~/.zshrc에 있습니다. 구성 파일을 수정한 후 셸(터미널)을 닫았다가 열어야 적용됩니다. 개인적으로 oh-my-zsh는 불필요하고 느린 타사 플러그인 시스템이므로 사용을 권장하지 않습니다. 모든 작업은 수동으로 수행할 수 있습니다.

또한 Oh My Posh는 Zsh를 포함한 모든 셸에서 작동합니다. Zsh로 전환하면 포기할 필요가 없습니다.
이것은 공식 문서입니다. Zsh 구성 지침을 보려면 목록에서 "zsh"를 클릭하세요. eval "$(oh-my-posh init zsh)".zshrc에 추가해야 합니다
. Bash에서 이미 Oh My Posh를 사용하고 있다면 이것이 모두 필요한 작업이며 동일한 테마를 사용해야 합니다.

Zsh의 메뉴 기반 완성

이러한 것들은 Zsh의 기본 자동 완성에 필요하며 아마도 이미 .zshrc에 있을 것입니다.

autoload -Uz compinit
compinit

compinit 안전하지 않은 디렉터리 오류가 발생하는 경우 보조 기본 .zshrc 생성을 완료하지 않고 compinit를 활성화하지 않았기 때문일 수 있습니다. compinit -C또는 를 실행해 보세요 compaudit | xargs chmod g-w.여기.

이제 기본 자동 완성 기능이 있으므로 다음 구성 줄을 사용하면 대화형 메뉴가 활성화됩니다.

zstyle ':completion:*' menu yes select

위의 구성을 사용하면 탭을 클릭하여 화살표 키를 사용하여 탐색할 수 있는 대화형 메뉴를 얻을 수 있습니다. Tab을 한 번 누르면 커서 대신 화살표 키가 메뉴를 제어합니다. 메뉴에 "들어가기" 전에 Tab 키를 다시 누르려면 "예"를 제거하십시오.

zstyle ':completion:*' menu select

이력 검색

Ctrl+R - 상자 밖으로 검색

불다

<Ctrl>-R입력하면서 명령 기록을 검색합니다.

                     

답변2

하스트기록을 목록으로 검색하고 탐색할 수 있지만 일반 탭 완성(명령/파일)을 수행하는 방법을 모르겠습니다. 누군가 대답할 수 있기를 바라요

답변3

PSReadLine과 호환되어야 합니까? 이는 정확히 동일한 동작을 제공하지는 않지만 수행 중인 작업에는 충분할 수 있습니다.

  1. bash 내장 기능은 history마지막 N 명령의 색인화된 목록을 제공합니다(여기서 N은 배포판에 의해 구성됨). 인덱스 1013에서 명령을 실행하려면 !1013bash 프롬프트에 해당 명령을 입력하세요.
  2. 키 조합을 사용 <Ctrl>-R하면 검색 문자열을 입력할 수 있으며 계속 입력할 때 마지막으로 일치하는 명령이 표시됩니다. 다시 입력하면 <Ctrl>-R이전에 일치하는 항목이 검색됩니다. 올바른 명령을 찾으면 키 <Enter>를 눌러 실행하세요. 편집하려면 왼쪽 화살표 키를 사용하세요. 검색을 종료하려면 를 입력하세요 <Ctrl>-G.

Bash 기록을 처리하는 데 더 많은 옵션이 있습니다. 사용 사례에 bash 기록을 사용하는 것으로 충분하다면 PSReadLine을 무시하도록 질문을 바꿔볼 수 있습니다.

관련 정보