다른 명령에 대해 다른 zsh 메뉴 선택 동작을 사용할 수 있습니까?


13

menu select동작을 사용 zsh하여 다양한 가능성을 볼 수있는 커서 아래의 메뉴를 호출합니다. 내가 설정 한 .zshrc 옵션은

zstyle ':completion:*' menu select=2

기본적 Return으로이 메뉴에서 가능성을 선택 하려면를 누르면 단어 만 완성됩니다. 실제로 명령을 보내지는 않습니다. 예를 들어 다음과 같은 메뉴가 표시 될 수 있습니다.

~ % cd de<TAB>
completing directory:
[Desktop/]  Development/

Return여기를 누르면

~ % cd Desktop/

그런 다음 명령을 실제로 보내려면 번 눌러야 Return합니다 .

나는 그렇게 눌러 있음을 만들기 위해이 동작을 수정할 수 있습니다 Return모두 선택을 완료 하고하는 것은 이렇게하여 명령을 전송

bindkey -M menuselect '^M' .accept-line

그러나 이것에 문제가 있습니다 : 때로는 명령 보내지 않고 파일이나 디렉토리를 완성해야합니다 . 예를 들어, ln -s Desktop Desktop2bindkey동작으로 데스크탑을 완성하려고 ln -s Desktop/하면 명령으로 전송 될 것이므로 분명히 원하지 않습니다.

공간을 누르는 것만으로도 명령을 수행 할 수 있다는 것을 알고 있지만 이제는 습관입니다.
이 경우, 일부 명령 만 Return한 번만 누르면 cd되지만 다른 모든 명령은 두 번 눌러야합니까?


경우 .zshrc파일이 당신이 할 수 없습니다 그럼 대답은 단순히 지원 명령 기반의 행동에 소스 코드를 직접 조정하지 않는 한, 더 될 것 없다. 그러나이 작업을 수행 할 명령을 정의해야합니다.이 명령은 추가 입력을 누르는 것보다 훨씬 지루합니다.
Tamara Wijsman

답변:


3

실제로 이것이 필요한 경우 이론적으로 실행중인 명령을 확인하는 기능을 설정하고 라인을 완료하거나 보낼 수 있습니다.

다음과 같이 시도하십시오 (예정되지 않음).

commands=(ls cd)
# define widget function
function check-command {
    zle beginning-of-line
    zle forward-word
    RBUFFER=" $RBUFFER"
    if [[ ${commands[(r)$LBUFFER]} == $LBUFFER ]] ; then ; zle accept-line ; else; zle     end-of-line ; fi
}

# create widget from function
zle -N check-command

# bind widget
bindkey -M menuselect '^M' check-command

출처 : zsh의 이전 .inputrc에서 사용자 정의 명령을 사용합니까?


0

기술적으로 당신이 요구하는 방식으로는 불가능합니다. 다른 방법이 있는지 모르겠다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.