cat
Bir terminaldeki bir kabuk isteminde çalıştırdığınızda , cat
stdin'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 cat
yazmazsı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\015
ancak, b\012
( b
ve 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()
, stty
komutu 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 (
^H
veya ^?
genellikle): önceki karakteri sil
- kill (
^U
genellikle): 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 ( cat
yukarı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 emacs
ve vi
tamamen farklı anahtar ciltleme ve çalışma modu ile en popüler görsel metin editörleriydi. İçinde vi
metin 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 ( ^b
karakteri 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 ( emacs
veya 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. ksh
Muhtemelen 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
( tcsh
başlangıçta sadece emacs
anahtar bağlama, vi
mod daha sonra eklendi) ve daha sonra bash
ve zsh
90'lı yılların başında.
İçeri iki mod arasında geçiş bash
, zsh
ya ksh
birlikte set -o vi
ya set -o emacs
ve birlikte bindkey -e
ya bindkey -v
içinde tcsh
ya zsh
.
POSIX aslında belirten vi
modu değil emacs
için mod sh
(hikaye o vardır Richard Stallman belirterek POSIX'e itiraz emacs
modu içinsh
).
İçin varsayılan mod bash
, kamu malı ait varyantları ksh
(pdksh, mksh, oksh), tcsh
ve zsh
(gerçi emacs modu ise zsh
, bu kadar vi
senin eğer $EDITOR
is vi
AT & T ise,) ksh
, bu kadar aptal olmadıkça modu $EDITOR
veya $VISUAL
bahseder vi
ya emacs
.
ksh
Ayrıca daha sonra farklı ele alınan gmacs
Gosling kullanıcılarını barındıracak bir mod ekledi .emacs
Ctrl+T
Şimdi ele alınması ^W
halinde emacs
veya tcsh
emacs modu muhtemelen eskidir werase
gerç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
, tcsh
ya info
yazarken 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.