zsh emacs gibi kopyalayıp yapıştırın


10

Zsh'ın emac'larda gördüğüm birçok şey olduğunu fark ettim. Ctrl + boşluk ve bölge seçerek seçim yapabilirim. Ben zsh içinde kalırken emacs gibi kopya yapabilirim. Emacs'da sistem panomu kullanabiliyorum (daha önce bazı ek yapılandırmalar gerekiyordu, ancak bu şimdi emacs'ta kutudan çıkıyor). Zsh içinde Cy kullanarak panomdan yapıştırmak gibi görünmüyor ve zsh sistem panoya kopyalamak aynı sorunu var. Bunun etrafında bir yol var mı?

Yanıtlar:


11

Zsh's, diğer uygulamalarla iletişim kurmayan yerleşik bir panoya sahiptir. Çok yazılabilir olduğundan, birkaç satırla iletişim kurabilirsiniz ~/.zshrc. Şunlar gerekir xclip veya xsel . Vi modunda konsept kanıtı için Panodan vi özellikli zsh veya bash kabuğuna yapıştırma konusuna bakın . İşte emacs modu için karşılık gelen kod (muhtemelen diğer kill-*widget'lara benzer bir şey yapmak isteyeceksiniz ).

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

Bu X11 panosunu kullanır (genellikle Ctrl+ C/ Ctrl+ ile erişilir V); -bbunun yerine X11 birincil seçimini kullanma seçeneğini kaldırın (seçildiğinde otomatik kopyala ve farenin orta düğmesiyle yapıştır).


Eğer vi modunu kullanırsanız, bunları değiştirmek kill-regionile vi-deleteve yankile vi-put-afterBenzer şekilde sarın vb vi-yank, ve diğerleri. (Daha merkezi bir şekilde yapmanın bir yolunu bulamadım)
olejorgenb

4

Zsh'ın kesim arabelleğini X panosuna entegre etmek istiyordum. Yukarıda belirtilen http://stchaz.free.fr/mouse.zsh denedim ama tüm Zsh işlemleri panoya doldurmak sevmediğim bulundu. Örneğin, bazen bir tarayıcıda bir şey kopyalayıp bir kabuğa gidip komut satırını düzenleyip yapıştırırdım. Ancak genellikle komut satırını düzenlemek - örneğin bir sözcüğü silmek - Zsh kesme arabelleğini değiştirir. Daha iyisi ya da daha kötüsü, X'in sadece bir öldürme halkası değil, bir panosu var, bu yüzden bir Zsh düzenleme işlemi panonun üzerine yazdığında, yapıştırmak istediğim şey kayboluyor - yapabildiğim gibi yank-pop yapamam (Cy My) Zsh veya Emacs yapın.

Bunun yerine ne yaptım zsh aracılığıyla X pano ile etkileşim için yeni özel tuş bağlamaları oluşturmaktır. "^ Xw" ve "^ Xy" ifadelerinin hem Emacs hem de Zsh'da kullanılmadığı ortaya çıktı, böylece her iki uygulamada da bağlayarak tutarlı bir arayüz elde edebilirim. Bu şekilde normal düzenleme işlemleri, kesici ve öldürme halkası tek başına bırakılır. Panoya bir şey kopyalamak istiyorsam bölgeyi ayarlıyorum ve "^ Xw" yapıyorum (ya da daha önce öldürdüysem ve bölge aktif değilse, kesim arabelleğini kopyalamak için "^ Xw" yapabilirim). Panodan yapıştırma "^ Xy" ile yapılır.

# 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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.