Bash / readline'ı NBSP'yi otomatik olarak normal boşluğa dönüştürecek şekilde yapılandırabilir miyim?


10

Ben haritalar Fin klavye düzeni kullanıyorum AltGr+ Spacebölünemez boşluk (nbsp U + 00A0) için. Genel olarak bu durumdan memnunum ama bash komut satırını kullanırken genellikle boru " |" sembolü ( Fin klavye düzeni ile AltGr+ <ile yazılmış) sonra normal boşluk yerine yanlışlıkla NBSP yazdığımı fark ettim . Sanırım bu, AltGrboruyu yazarken tutmam ve yere çarpmadan önce serbest bırakmam gerektiğinden kaynaklanıyor. Ve yayınlanması için kötü zamanlama olduğunda AltGr, komut satırında görünmez yazım hatası ve

 grep: command not found

ki buna oldukça benziyor

grep: command not found

Bu da bu konuyu ilk kez fark etmeyi biraz zorlaştırıyor.

Ben NBSP devre dışı bırakabilirsiniz biliyorum ama ben sadece boru karakter sonra veya (bu mümkün değilse, her zaman bash komut satırı veya düzeyinde ) ( normal boşluk üretmek için AltGr+ sahip) devre dışı bırakmayı tercih ederim . Kaynak kodunu değiştirmeden bunu yapmak için herhangi bir basit bir yolu var mı Bash, ya da benim terminal emülatörü ( )?Spacereadlinereadlinegnome-terminal

Başka bir iyi çözüm, NBSP'yi komut satırında bir şekilde görünür olacak şekilde yapılandırmaktır, örneğin yalnızca oluşturma için başka bir karakterle (örneğin, U + 2423 ) değiştirilir.


@ tatlı gerçekten bir lütuf gerek yok. Sorunu çözdüm ve bunun hakkında bir soru yazdım. Daha sonra, aşağıdaki cevabı bulmak için Google Arama aracılığıyla yeterince yakın yapılandırma buldum. Hala tüm durumlar için karakteri devre dışı bırakmak yerine NBSP görünür yapmak için bir cevap arıyorum. Ben veri dizeleri NBSP varsa tüm terminal çıkışı berbat değil böylece readline düzeyinde görünür NBSP olmasını istiyorum düşünüyorum.
Mikko Rantalainen

@MikkoRantalainen hala eksik olanı daha net açıklayabilir misiniz? Karakterleri haritalamanın yolunu bulduğunuz için, neden " ":␣yeterli değil? Başka neye ihtiyacın var?
terdon

@ tatlı Ben komut satırında NBSP yazmak ve olsun echo a␣bama sonuçta ortaya çıkan çıkış hattı çıktı echo a bgerçek NBSP ile bir özelliği olması isterdim . Bu nedenle, bunun readline seviyesinde yapılması gerektiğini düşünüyorum (yani, komut satırı düzenleyicisi her zaman görünür karakter görüntüler, ancak terminal emülatörü, editör ekranı ve çıktı ekranı arasındaki farkı bilemez ve bu nedenle terminal emülatörü, görsel olarak görsel değiştirme yapamaz ).
Mikko Rantalainen

1
Readline seviyesinde çözmek gerçekten güzel, ama aynı sorunu terminalde vim / emacs / etc'de bir kabuk betiği yazarken de vurabilirsiniz. Belki de tek NBSP karakteri de dahil olmak üzere dize eşleşmelerini vurgulamak için gnome terminali için kavram yamasının çalışma kanıtı için bugzilla.gnome.org/show_bug.cgi?id=788673 adresine bakın . (Evet, herhangi bir kaynak kodunu değiştirmek istemediğini söylediğini biliyorum ...)
egmont

1
Başka bir yaklaşım, yazı tipi düzeyinde, NBSP'nin glifinin boş olmadığı özel bir yazı tipi ve bazı fontconfig yapılandırmasıyla ele almaktır. Bu, yalnızca terminal için değil, grafik editörler için de işe yarar. Yine bir başka yaklaşım da, normal yer açmak için klavye düzenini değiştirmek ve nadiren NBSP'ye girmek için başka bir yöntem kullanmaktır.
egmont

Yanıtlar:


9

Bu readlineseviye iki farklı şekilde yapılabilir.

Yöntem 1

Aşağıdakini .inputrc(için yapılandırma dosyası readline) içine koyun :

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map NBSP to regular space (left part has NBSP in quotes, right part has space)
" ":" "

Eğer markdown yukarıdakileri karıştırırsa, yorumda açıklandığı gibi NBSP'yi kolonun sol tarafındaki tırnak içine almanız gerekir. Bu, normal akışlı giriş akışında NBSP oluşumunu eşleştirir.

Yöntem 2

Aşağıdakileri yerleştirin .inputrc:

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map "pipe + NBSP" to "pipe + regular space" (left part has NBSP in quotes)
"| ":"| "
set keyseq-timeout 250

Fikir, {pipe ardından NBSP} anahtar sırasını {pipe ardından space} ile eşlemektir. Bu, diziyi 250 ms içinde yazarsanız çalışır (yukarıda yapılandırılabilir). Ancak, zaman aşımı bitene kadar, boru sembolü tek başına yazmak hiçbir şey üretmez. Ve diziyi çok yavaş yazarsanız, düzeltme uygulanmaz. Ayrıca zaman aşımının genel olduğunu unutmayın, bu nedenle başka bir dizi kullanmak istiyorsanız, en uzun diziyi yazabilmek için zaman aşımını ayarlamanız gerekir. (Okuma çizgisi kitaplığı, karakterlerin yazılmasına izin verecek kadar akıllı değildir ve daha sonra karakter dizisi yapılandırmayla eşleştikten sonra görünür karakterleri değiştirir.)


0

Bu sorunla ilgili mükemmel bir makale var:

grepHata mesajları ile birincil endişe ve NBSP execkomutunu kullanarak daha görünür bir şey değiştirmeye çalışıyorum . Yine de sözdizimi aşağı pat yok:

exec 2> >(tr $'\xa0' $'\x43' >&2) 

Fikir, bu komutu açarak ~/.bashrcotomatik olarak yüklenecek şekilde yerleştirmektir gnome-terminal. Ama dediğim gibi henüz çalışmıyor ...


1
Bu sadece hata mesajlarıyla ilgilenir. Komut satırını düzenlerken problemi yakalamayı tercih ederim, çünkü böyle bir şey yazıyor olabilirim perl -i -npe 's/MARKER/4 KB/'ve yanlışlıkla 4ve arasında bir NBSP kaydırıyorum K. Hata! Sorun bir dosyaya kaydediliyor ancak hata almıyorum ve yazdığım komut satırı mükemmel görünüyor.
Mikko Rantalainen
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.