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


10

zsh에는 emacs에서 볼 수있는 것이 많이 있습니다. ctrl + space로 영역을 선택하고 선택할 수 있습니다. zsh 내부에 머무는 동안 이맥스처럼 복사 할 수 있습니다. emacs에서는 시스템 클립 보드를 사용할 수 있습니다 (이전에 일부 추가 구성이 필요하지만 이제는 emacs에서 즉시 작동합니다). zsh에서는 Cy를 사용하여 클립 보드에서 붙여 넣을 수 없으며 zsh에서 시스템 cliipboard로 복사하는 데 동일한 문제가 있습니다. 이 주위에 방법이 있습니까?

답변:


11

Zsh에는 다른 응용 프로그램과 통신하지 않는 클립 보드가 내장되어 있습니다. 스크립트가 매우 가능하기 때문에의 몇 줄과 통신 할 수 있습니다 ~/.zshrc. xclip 또는 xsel 이 필요합니다 . vi 모드의 개념 증명에 대해서는 클립 보드에서 vi 지원 zsh 또는 bash 쉘로 붙여 넣기를 참조하십시오 . 다음은 이맥스 모드에 해당하는 코드입니다 (아마도 다른 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 기본 선택을 대신 사용 하는 옵션을 제거하십시오 (선택시 자동 복사 및 마우스 가운데 버튼으로 붙여 넣기).


당신이 VI 모드를 사용하는 경우, 단순히 교체 kill-regionvi-deleteyankvi-put-after마찬가지로 포장 등 vi-yank등. (중앙에서 수행하는 방법을 찾지 못했습니다)
olejorgenb

4

Zsh의 컷 버퍼를 X 클립 보드에 통합하고 싶었습니다. 위에서 언급 한 http://stchaz.free.fr/mouse.zsh를 시도했지만 모든 Zsh 작업이 클립 보드에 채워지는 것을 싫어합니다. 예를 들어, 때로는 브라우저에서 무언가를 복사 한 다음 쉘로 이동하여 명령 행을 편집 한 후 붙여 넣기합니다. 그러나 종종 단어를 삭제하는 등 명령 줄을 편집하면 Zsh 컷 버퍼가 수정됩니다. 더 좋든 나쁘게도 X에는 킬 링이 아닌 클립 보드 만 있으므로 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

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