어떤 zsh 기능을 사용하십니까? [닫은]


33

터미널에서 많은 작업을 수행하므로 선택한 쉘 zsh에 대해 많은 것을 배웠습니다. 직장에서 생산성을 높이기 위해 zsh의 어떤 기능을 사용하십니까? 내가 가장 좋아하는 것 중 하나는 multi-dir 자동 완성입니다. 따라서 입력하는 대신 많은 키 입력을 cd /fo{tab}/ba{tab}/ba{tab}수행 cd /fo/ba/ba{tab}하고 저장할 수 있습니다 !


2
나는 그 기능에 대해 몰랐다, 나는 그것을 시도해야 할 것이다!
Roy Rico

1
해당 디렉토리가 자동 완성되는 옵션은 무엇입니까?
hometoast

답변:


50

이 작은 보석을 찾았습니다.

cd old new

이 형식은 현재 디렉토리의 전체 경로에서 cd발생하는 모든 것을 대체 하고 작업 디렉토리를 결과 경로로 변경하려고 시도합니다.oldnew

예를 들어, 작업 디렉토리가 /home/larry/code/backrub/server있고로 전환하려면 /home/sergei/code/backrub/server다음을 수행하면됩니다.

cd larry sergei

7
좋아, 그 규칙.
hometoast

21

내가 아는 한 배쉬가 할 수없는 일을 계속 할 것입니다.

  • 멋진 완성. bash는 그 중 일부를 가지고 있지만 zsh는 더 많은 명령을 알고 있으며 더 정확하며 구성 가능성이 더 많습니다.

  • **글로브, 예를 들어, **/foo라는 파일을 찾습니다 foo재귀 적으로 하위 디렉토리에. (그리고 ***/foo또한 심볼릭 링크를 다음과 같습니다.) 두 문자 대신 긴 find(일부 파일 이름에 공백이 따옴표와 같은 특수 문자가 포함 된 경우 오른쪽 얻기 어렵다) 명령.

  • 덜 자주, foo*(*)(예 foo*: 실행 파일 만 보유), foo(.)(디렉토리가 아닌 일반 파일 만), foo(-@) (매달린 심볼릭 링크 만), foo*(m-5)(마지막 5 분 동안 수정 된 파일 만), foo*(om[1])(가장 최근 수정 된 파일) 등

  • autocd: 디렉토리 이름을 명령으로 입력하면 디렉토리 이름이 변경됩니다 ( cd또는 pushd구성 방법에 따라 다름). cd명령은 너무 오래 세 문자입니다! 나는 고통을 느끼지 않고 30 초 이상 bash를 사용할 수 없습니다. 또한 다음과 같은 단일 문자 기능이 있습니다.

기능-{
  만약 [[$ # -eq 0]]; 그때
    cd "$ OLDPWD"
  그밖에
    내장- "$ @"
  fi
}
  • zmv내장하고,
별명 zcp = 'noglob zmv -C'
별명 zln = 'noglob zmv -L'
별명 zmv = 'noglob zmv'
  • 내가 그 동안 noglob내장.

  • precmdpreexec후크 기능 : 내가 사용하는 preexec실행 명령을 포함하는 내 터미널의 제목을 설정하고, precmd종료 코드와 명령을 대체 할 수 있습니다. 같은 것

term_title_base = '@ % l : % 1 ~'
preexec () {
  print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ *" '$ \ a'
}
precmd () {
  print -nr $ '\ e] 2;' "$ {(%) term_title_base} ($?)" '$ \ a'  
}
  • Ctrl + Z :
    • 빈 명령 줄에서 실행됩니다 bg(Ctrl + Z Ctrl + Z는 프로그램을 일시 중단하고 백그라운드에서 즉시 다시 시작합니다).
    • 비어 있지 않은 명령 줄에서 현재 명령 버전을 일시 중단합니다. 다른 명령을 입력하겠습니다. 두 번째 명령 줄이 끝나면 편집 할 첫 번째 명령을 다시받습니다.
    • 이것은 다음 기능을 사용합니다.
fancy-ctrl-z () {
  만약 [[$ # BUFFER -eq 0]]; 그때
    bg
    zle 재표시
  그밖에
    zle 푸시 입력
  fi
}
zle -N fancy-ctrl-z
bindkey '^ Z'fancy-ctrl-z
  • 가장 중요한 비 완료 관련 옵션 : setopt append_history autocd extended_glob no_match

3
^ Z ^ Z 트릭을 사랑하십시오, 감사합니다! 원래 superuser.com/questions/378018 에서 단일 키에 바인딩하는 솔루션을 찾고 있었지만 ^ Z ^ Z가 훨씬 더 의미가 있습니다
Evgeniy Dolzhenko

13

파일 및 디렉토리 외에 자동 완성 기능을 제공하는 zsh의 기능

예를 들어, git 패키지가 설치되면 git-sh {tab}이 나타납니다.

-자식 명령-
shortlog-자식 로그 출력을 요약합니다
show-branch-브랜치와 커밋을 보여줍니다
show-index-팩 idx 파일의 내용을 표시합니다

1
예, 훌륭합니다! 명령 줄 스위치가 무엇인지 확실하지 않지만 man 파일을 조사 할 필요가 없을 때도 이것을 사용합니다.
Frew Schmidt

bash는이 기능도 가지고 있다고 생각합니다.
Keith Thompson

10

전 세계 별칭을 정말 좋아합니다

alias -g L='|less
alias -g DN='>/dev/null'

내가 같은 일을하게 해줘

somecommand file arg L

페이징하십시오.


나는 또한 grep을 위해 G를 좋아한다.
Frew Schmidt

7

다른 사람들이 언급했듯이 zsh의 자동 완성 기능은 뛰어납니다.

번거 로움없이 사용자 정의 명령에 대해 자동 완성 기능을 설정할 수 있습니다. 완전한 사용자 이름을 손가락의 인수로 탭하려면 :

# ~/.zshrc
function userlist {
        reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES

내가 설정하고 싶은 다른 옵션 :

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

밀고 터지는 것도 꽤 편리합니다.

# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME

짜증나게 홈 키와 종료 키는 기본적으로 다른 쉘에서와 같이 zsh에서 작동하지 않지만이 문제를 해결할 수 있습니다.

# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line

2
나는 철자 수정이 실제로 도움이되는 것보다 더 성가신 것을 발견하는 경향이 있습니다.
Frew Schmidt

@Frew heh, 당신은 저에게 그런 말을 한 최초의 사람이 아닙니다. 수정의 더 좋은 기능 중 하나는 수정 된 버전을 기록에 넣을 수 있기 때문에 실수로 다시 같은 것을 실행하지 않습니다.
theotherreceive

5

scp원격 서버에서 사용할 때 자동 완성을 활성화하십시오 .

추가 정보를 표시하기위한 올바른 프롬프트.


과연! 매우 복잡하지만 짧은 프롬프트가 있습니다. 호스트 [전류 선] <오류 없음> %
Frew 슈미트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.