catBir terminaldeki bir kabuk isteminde çalıştırdığınızda , catstdin'den okuduğu stdout'a yazması gerektiğini ve basarsanız terminal sürücüsünün yankılandığını agörürsünüz a, ama şunu catyazmazsınız a(görüyorsunuz). sadece biri a, terminal sürücüsü tarafından yankılandı).
Yazarsanız Ancak a Backspace b Enter, görmüyor musun catçıktısı alınması a\010b\015ancak, b\012( bve yeni satır).
Bunu sebebi ise, terminal sürücü (biz değil gibi terminal emülatörü içinde, çekirdekteki yazılım söz ediyoruz xterm) uygular çok temel bir çizgi editörü içinde kanonik mod. Terminal sürücüsü ioctl(), sttykomutu kullanırken olduğu gibi sistem çağrıları kullanılarak yapılandırılabilir . Örneğin, kanonik moddan çıkmak için yapabilirsiniz stty -icanon. Yaparsan:
stty -icanon; cat
Ardından, hem echo(ile devre dışı bırakmış olabilirsiniz stty -echo) hem de catçıktısını aynı anda görürsünüz .
Bu editör çizgi editörüdür. Diğer bir deyişle, kullanıcı basıldığında terminal cihazını okuyan uygulamaya gönderilinceye kadar bir satır metin düzenlemek içindir Enter.
Bu editörün düzenleme yetenekleri çok sınırlıdır. Çoğu uygulamada, ayrıca yapılandırılabilen sadece 4 düzenleme tuşu (aslında karakterler) bulunmaktadır stty:
- sil (
^Hveya ^?genellikle): önceki karakteri sil
- kill (
^Ugenellikle): boş (öldür) şimdiye kadar girilen satır
- werase (
^W): önceki sözcüğü siler
- lnext (
^V): bir sonraki karakteri tam anlamıyla girin (yukarıdakilerin özel anlamını iptal edin)
Eski günlerde, terminal sürücüsü çizgi editörünün meraklısı yeteneklerle genişletileceği düşünülmüştü. Bu nedenle, ilk mermilerin hiçbirinde komut satırı düzenleme yetenekleri yoktur ( catyukarıda yaptığımız gibi çalıştığımız zaman kabuk isteminde aynı satır düzenleme yeteneklerini elde edersiniz ).
Bununla birlikte, bu gerçekten hiç olmadı, belki de bunun nedeni, çekirdeklerde uygulanmaması gerektiğini açıkça ortaya koyan bazı tuş basmalarında aynı karakterleri göndermeyen farklı uçbirimlerin karışıklığıydı.
Böylece bazı mermiler terminal sürücüsünün kurallı modunu düşürmeye ve kendi satır düzenleyicisini uygulamaya başladı. O zamanlar emacsve vitamamen farklı anahtar ciltleme ve çalışma modu ile en popüler görsel metin editörleriydi. İçinde vimetin girmek için bir, düzenleme için de bir modunuz vardır. Bölümünde emacs, her zaman metin moduna girersiniz, ancak düzenleme tuş kombinasyonlarına basılarak yapılır ( ^bkarakteri geriye doğru hareket ettirmek gibi ).
O sırada mermilerin kendi farklı kilit bağlarıyla gelmelerine gerek yoktu. Bu, insanların farklı bir şeyler öğrenmeleri için hayal kırıklığına neden olabilirdi. Bununla birlikte, diğerinden bir ( emacsveya vi) stil seçmek , diğer düzenleyicinin kullanıcılarını yabancılaştırmanın kesin bir yolu olabilirdi .
Https://www.usenix.org/legacy/publications/library/proceedings/vhll/full_papers/korn.ksh.a'ya göre :
Ksh'ın popüler satır içi düzenleme özellikleri (vi ve emacs modu) Bell Laboratories'deki yazılım geliştiricileri tarafından oluşturuldu; Pat Sullivan'ın vi satırı düzenleme modu ve Mike Veach tarafından emacs satırı düzenleme modu. Her biri, bu özellikleri eklemek için Bourne kabuğunu bağımsız olarak değiştirdi ve her ikisi de, ksh'ı sadece kendi satır içi düzenleyicisine sahipse ksh kullanmak isteyen organizasyonlardaydı. Başlangıçta ksh'a komut satırı düzenleme ekleme fikri, satır düzenlemenin terminal sürücüye taşınması umuduyla reddedildi. Bununla birlikte, bunun yakında gerçekleşmesi muhtemel olmadığı anlaşıldığında, her iki satır düzenleme modu da ksh ile birleştirildi ve isteğe bağlı olarak yapıldı, böylece terminal arayüzünün bir parçası olarak düzenleme sağlayan sistemlerde devre dışı bırakılabilirler.
Bunun yerine, hem ikisi hem de kullanıcıların ikisi arasında seçim yapmaları için bir arayüz oluşturdular. kshMuhtemelen 80'lerin başlarında ilk olarak (yukarıda gösterildiği gibi Bourne kabuğuna bir vi modu ve bir emacs modu eklemek için ayrı olarak yeniden yazılmış kod) yeniden kullanıldı ve ardından tcsh( tcshbaşlangıçta sadece emacsanahtar bağlama, vimod daha sonra eklendi) ve daha sonra bashve zsh90'lı yılların başında.
İçeri iki mod arasında geçiş bash, zshya kshbirlikte set -o viya set -o emacsve birlikte bindkey -eya bindkey -viçinde tcshya zsh.
POSIX aslında belirten vimodu değil emacsiçin mod sh(hikaye o vardır Richard Stallman belirterek POSIX'e itiraz emacsmodu içinsh ).
İçin varsayılan mod bash, kamu malı ait varyantları ksh(pdksh, mksh, oksh), tcshve zsh(gerçi emacs modu ise zsh, bu kadar visenin eğer $EDITORis viAT & T ise,) ksh, bu kadar aptal olmadıkça modu $EDITORveya $VISUALbahseder viya emacs.
kshAyrıca daha sonra farklı ele alınan gmacsGosling kullanıcılarını barındıracak bir mod ekledi .emacsCtrl+T
Şimdi ele alınması ^Whalinde emacsveya tcshemacs modu muhtemelen eskidir werasegerçekten bunun için onları suçlayamam ve yaklaşık ifadem böylece terminal hattı editörü karakteri "çıkış yapan ..." yanıltıcı olarak görülebilir. Ben şeyler gibi zaman rahatsız edici bulmak bu sadece var emacs, tcshya infoyazarken her şey farklı davranabilir Ctrl-W. Bazı uygulamalar siz yazarken pencerelerini kapatmaya başladığında bunu daha rahatsız edici bulduğumu hayal edebilirsiniz Ctrl-W.