zsh emacs처럼 복사하여 붙여넣기

zsh emacs처럼 복사하여 붙여넣기

zsh에는 emacs에서 볼 수 있는 것과 동일한 내용이 많이 있다는 것을 알았습니다. Ctrl+Space를 사용하여 선택하고 영역을 선택할 수 있습니다. zsh에 있으면 emacs처럼 복사할 수 있습니다. Emacs에서는 시스템 클립보드를 사용할 수 있습니다(예전에는 추가 구성이 필요했지만 이제는 Emacs에서 바로 사용할 수 있습니다). zsh에서는 Cy를 사용하여 클립보드에서 붙여넣을 수 없는 것 같고, zsh에서 내 시스템의 클립보드로 복사해도 같은 문제가 있습니다. 해결책이 있나요?

답변1

Zsh에는 다른 애플리케이션과 통신하지 않는 클립보드가 내장되어 있습니다. 스크립트 작성이 매우 쉽기 때문에 ~/.zshrc.클립또는셰르. 바라보다클립보드에서 vi 지원 zsh 또는 bash 쉘에 붙여넣기vi 모드의 개념 증명용입니다. 다음은 emacs 모드에 해당하는 코드입니다( kill-*다른 위젯에서도 비슷한 작업을 수행할 수 있습니다).

x-copy-region-as-kill () {
  zle copy-region-as-kill
  print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-copy-region-as-kill
x-kill-region () {
  zle kill-region
  print -rn $CUTBUFFER | xsel -i -b
}
zle -N x-kill-region
x-yank () {
  CUTBUFFER=$(xsel -o -b </dev/null)
  zle yank
}
zle -N x-yank
bindkey -e '\ew' x-copy-region-as-kill
bindkey -e '^W' x-kill-region
bindkey -e '^Y' x-yank

X11 클립보드(일반적으로 Ctrl+ C/ Ctrl+ 로 액세스 V) 를 사용하여 -bX11 기본 선택을 사용합니다(선택 항목을 자동으로 복사하고 마우스 가운데 버튼으로 붙여넣기).

답변2

저는 항상 Zsh의 클립 버퍼를 X 클립보드와 통합하고 싶었습니다. 나는 위의 것을 시도했다http://stchaz.free.fr/mouse.zsh그러나 나는 모든 Zsh 작업으로 클립보드를 채우는 것을 좋아하지 않는다는 것을 알았습니다. 예를 들어 브라우저에서 무언가를 복사한 다음 셸로 이동하여 명령줄을 편집한 다음 붙여넣는 경우도 있습니다. 그러나 명령줄을 자주 편집(예: 단어 삭제)하면 Zsh 컷 버퍼가 수정됩니다. 좋든 나쁘든 Zsh나 Emacs에서 실행됩니다.

그래서 제가 한 일은 zsh를 통해 X 클립보드와 상호 작용하기 위한 새로운 특수 키 바인딩을 만드는 것이었습니다. "^Xw"와 "^Xy"는 Emacs와 Zsh 모두에서 사용되지 않으므로 두 애플리케이션 모두에서 바인딩하여 일관된 인터페이스를 얻을 수 있습니다. 이러한 방식으로 일반 편집 작업, 컷 버퍼 및 종료 루프는 영향을 받지 않습니다. 클립보드에 무언가를 복사하려면 영역을 설정하고 "^Xw"를 수행하면 됩니다(또는 해당 영역을 종료하고 해당 영역이 비활성 상태인 경우에는 "^Xw"를 수행하여 클립보드 컷 버퍼를 복사할 수 있습니다). . 클립보드에서 붙여넣기는 "^Xy"로 수행됩니다.

# define commands to copy and paste x clipboard

# ^Xw - copy region, or cut buffer
# ^Xy - paste x clipboard

# in both cases, modifies CUTBUFFER

copy-to-xclip() {
    [[ "$REGION_ACTIVE" -ne 0 ]] && zle copy-region-as-kill
    print -rn -- $CUTBUFFER | xclip -selection clipboard -i
}

zle -N copy-to-xclip
bindkey "^Xw" copy-to-xclip

paste-xclip() {
    killring=("$CUTBUFFER" "${(@)killring[1,-2]}")
    CUTBUFFER=$(xclip -selection clipboard -o)
    zle yank
}

zle -N paste-xclip
bindkey "^Xy" paste-xclip

답변3

한 번 살펴보고 싶을 수도 있습니다http://stchaz.free.fr/mouse.zsh마우스 지원을 추가하는 것 외에도 X 클립보드와 상호 작용을 시도합니다.

답변4

macOS 사용자의 경우: ESC-w(Meta-w 또는 Option-w라고도 함)를 macOS 페이스트보드 및 zsh 내장 클립보드에 복사하는 방법은 다음과 같습니다.

pb-copy-region-as-kill () {
  zle copy-region-as-kill
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-copy-region-as-kill
bindkey -e '\ew' pb-copy-region-as-kill

완전성을 위해 다음은 Ctrl-u 및 Ctrl-k에 대한 코드입니다.

pb-backward-kill-line () {
  zle backward-kill-line
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-backward-kill-line
bindkey -e '^u' pb-backward-kill-line
pb-kill-line () {
  zle kill-line
  print -rn $CUTBUFFER | pbcopy
}
zle -N pb-kill-line
bindkey -e '^k' pb-kill-line

관련 정보