Fish 셸에서는 를 누르면 Alt+l
명령의 출력이 멋지게 표시됩니다 ls
. 누르기 전에 작성한 명령이 유지됩니다. zsh에 넣고 싶습니다.
나의 매우 이상한 시도는 다음과 같습니다.
function myls {
awk '{len = length($0); for(i=0;i<len;i++) printf "\b"}' <<< "$LBUFFER"
zle push-input
zle accept-line
print $(ls --color=always --indicator-style=slash)
}
zle -N myls
bindkey -- '^[l' myls
나는 기존 명령을 지우는 데 어려움을 겪었고 결국 hacky \b
를 사용하게 되었습니다. 길고 여러 줄에서는 제대로 작동하지 않습니다.
누구든지 더 잘할 수 있나요?
답변1
zle -R
push-input
버퍼 없이 줄을 다시 표시하려면 나중에 사용하세요 .
대부분의 경우 zsh의 완성 목록에는 ls를 실행하는 데 위젯이 필요하지 않습니다. ls 스타일 색상과 파일 유형 접미사가 있습니다. 모든 컨텍스트에서 파일 완성을 수행하고 긴 ls -l
스타일 목록을 수행하는 다음 바인딩이 있습니다 .
zstyle ":completion:file-complete::::" completer _files
zle -C file-complete complete-word _generic
zstyle ':completion:file-complete:*' file-list true
bindkey '^X^F' file-complete
답변2
@okapi님의 의견 덕분에 이런 생각이 들었습니다.
function myls {
[[ "$CONTEXT" = cont ]] && return
zle push-input
zle -R
zle accept-line
print -n $(ls --color=always --indicator-style=slash)
}
zle -N myls
bindkey -- '^[l' myls
훨씬 낫지만 "for>..." 및 "while>..." 루프와 같은 연속에서는 작동하지 않으므로 지금은 반환합니다.