bash에 대한 이전 질문에서 나는 물었습니다.상대 경로를 확장하고 명령줄에서 탭 완성을 사용하는 방법은 무엇입니까?
Ctrl나는 ++를 사용하여 모든 변수를 확장하는 것을 언급하는 @ AltMikel 의 답변을 좋아하며 e자주 사용합니다.
그 후로 전환했습니다 zsh
. 입력 $PWD
하고 눌러 Tab현재 디렉토리에 대한 경로를 확장할 수 있지만, 이와 같은 것을 입력하고 $PWD/.profile
눌러도 Tab확장되지 않습니다.
비슷한 질문을 읽었고 별칭 확장과 변수를 입력하고 눌러 변수를 확장하는 방법에 대한 답변을 보았지만 Tab에서 ++를 누르는 것과는 다릅니다.CtrlAltebash
입력되는 명령줄의 모든 변수를 확장하기 위해 이스케이프 시퀀스(예: Ctrl++ Alt) 를 허용하는 방법이 있습니까 ?ezsh
답변1
설정할 수 있습니다엮다매개변수를 확장하세요 ~/.zshrc
.
zstyle ':completion:*' completer _expand _complete
autoload -Uz compinit
compinit
다음은 최소한의 설정입니다.엮다_expand
이미 활성화되어 있으므로 설정에 추가하면 충분합니다.completer
기본적으로 ( + ) expand-word
에 바인딩된 위젯 도 있는데 , 이는 기본적으로 bash와 동일한 바인딩입니다.^X*
Ctrlx *
참고: 이 두 가지 방법은 현재 단어에만 작동합니다.
대안으로 zsh
원래 질문에서 요청한 작업을 실제로 수행할 수 있습니다. 상대 경로를 절대 경로로 변환합니다. 다음은 zshcontrib(1)
맨페이지에서 약간 수정된 예입니다.
# load necessary utility function
autoload -Uz modify-current-argument
# define helper function for actual work
expand-and-abspath () {
# expand the path (for example `~` -> `/home/youruser`)
REPLY=${~1}
# transform into absolute path (use `:A` if you want to resolve symlinks)
REPLY=${REPLY:a}
}
# actual widget function
abspath-word() {
# use helper function on current word
modify-current-argument expand-and-abspath
}
# create zle widget `abspath-word` (with function of the same name)
zle -N abspath-word
# bind widget to "Ctrl+x p"
bindkey '^Xp' abspath-word
이는 현재 단어를 절대 경로 표현으로 대체하고 이를 + abspath-word
에 바인딩하는 위젯을 정의합니다 .Ctrlxp
답변2
매개변수, 산술 및 명령 대체를 확장하려면(별칭 및 기타 형태의 확장은 제외) 다음을 수행할 수 있습니다.
my-expand() BUFFER=${(e)BUFFER} CURSOR=$#BUFFER
zle -N my-expand
bindkey '\e^E' my-expand
(비슷한 제한 사항이 있으며 거의 위험합니다 bash
.)