Bash'te Emacs'ta olduğu gibi kopyalama ve ayar işareti?


16

Emacs varsayılan olarak kullandığı I (kullanarak yani kopyalayıp aynı klavye bağları kullanarak Bash komut satırında metni yapıştırmak edebilmek istiyorum C-spaceiçin set-mark, M-wmetni kopyalamak için, C-y, M-yvb yapıştırmak için).

GNU Bash dokümantasyon Bash öntanımlı olarak ayarlanan bu anahtar bağları bazıları ile geldiğini söylüyor.

Örneğin, yanking ( C-y) varsayılan olarak terminalimde çalışır. Ancak, set-markve copykomutlarını çalıştıramıyorum ve varsayılan olarak herhangi bir tuşa bağlı görünmüyorlar.

Genellikle, kullanıcının kendi anahtar bağlantılarını tanımlama şekli onları eklemektir .inputrc. Baktım ve yardımcı olabilir sanırım o belgelerinde aşağıdaki bash fonksiyonları bulundu Yani bana (yani istediğiniz davranışı gibi Emacs tanımlamak set-markile C-spaceve copyile M-w).

copy-region-as-kill ()

Bölgedeki metni öldürme arabelleğine kopyalayın, böylece hemen çekilebilir. Varsayılan olarak, bu komut ilişkisizdir.

ve

set-mark (C-@)

İşareti noktaya ayarlayın. Sayısal bir bağımsız değişken sağlanırsa, işaret bu konuma ayarlanır.

Doğru anlarsam, yukarıdaki copy-region-as-kill, varsayılan olarak herhangi bir klavye sırasına set-markbağlı olmadığı C-@, varsayılan olarak bağlı olduğu anlamına gelir .

C-@Terminalimde denedim , ancak çalıştığını sanmıyorum set-markçünkü imlecimi hareket ettirdiğimde vurgulanmış herhangi bir metin görmüyorum. Her durumda, klavye bağlamaları ( M-wve C-) işlevlerimde copy-region-as-killve set-markyukarıda eklemeyi .inputrcve sonra yeniden yüklemeyi denedim C-x C-r, ancak bu işe yaramadı. Diğer girişlerimin.inputrcDiğer kullanıcı tanımlı tuş bağlamalarında tanımladığım için çalışmalardaki .

Yanlış yaptığım bir şey var mı? Bir şey mi kaçırıyorum?


Hangi sürümü bashve hangi terminal programını kullanıyorsunuz?
Mikel

GNOME bash, sürüm 3.1.17 (1) -çalışması (x86_64-redhat-linux-gnu) gnome terminalinde (ayrıca Terminatörde) kullanıyorum
Amelio Vazquez-Reina

Yanıtlar:


11

Seçimi vurgulamaz, ancak aksi takdirde iyi çalıştığını düşünüyorum.

Koşmayı dene

$ bind -p | grep copy-region-as-kill

C-x C-rgerçekten işe yaradığından emin olmak için .

Şunu söylemeli:

"\ew": copy-region-as-kill

Bundan sonra, iyi çalışmalıdır.

Misal:

$ abc<C-Spc><C-a><M-w> def <C-y>

bana verir

$ abc def abc

Nerede markolduğunu bilmek istiyorsan , yap C-x C-x.

Misal:

$ <C-Spc>abc<C-x><C-x>

imleci işareti (çizginin başlangıcı) ayarladığınız yere geri getirecektir.

Ayrıca, set-markbağlayıcıyı eklemeniz gerektiğini düşünmüyorum . Ben yapmadım.

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(not çoğu terminalleri göndermesini C-@zaman C-Spcbasılır. Seninkinin de yapar varsayalım.)

Bütün bunlar başarısız olursa:

  • does Ctrl+ Spaceemacs -nwaynı terminalde?
  • Diğer yapmak Alt/ Metabash kısayollar işi?

1
Teşekkürler! .İnputrc içinde "\ ew" yerine "Mw" vardı. Vurgulama eksikliği de beni şaşırttı. Bu arada bağlama komutuna işaretçi için teşekkürler. Şimdi bir cazibe gibi çalışıyor!
Amelio Vazquez-Reina

2
Hoşgeldiniz! Evet, yazmak zorundasın \eya da \M-. Bkz. Readline init file sözdizimi .
Mikel

Ne harika bir cevap! Teşekkürler. Bu benim için benzer sorunları
düzeltti

set-mark ve kill-as-kill-as bölge çalışma sessizce, bölgeyi vurgulayabilir miyim (emacs gibi)?
mosh

4

Cw'yi öldürme bölgesi için de bağlarım . İşte benim .inputrc:

# Bkz. Http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
bind-tty-special-chars'ı kapat

# En sevdiğim Emacs anahtar bağlamalarımı tanımla.
"\ C- @": ayar işareti
"\ Cw": kill-region
"\ Mw": öldürme olarak kopya bölgesi
"\ M- /" dabbrev-genişlet
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.