İlk olarak, biraz tarih. Eski günlerde, bir terminale bir metin yazdığınızda , her tuş uygulamaya bir karakter gönderdi. Terminalin bağlı olduğu makineler daha güçlü hale geldikçe, terminaller , basılmayan ancak bir tür işlevi olan bazı özel karakterler gönderecek olan bir kontrol anahtarında standardize edildi. Sonunda muzaffer karakter kümesi, 32'si kontrol karakteri olan 128 karaktere sahip ASCII idi . Ctrl10xxxxx₂ (ikili gösterim) yazılı bir harf veya başka bir sembolle birlikte basılması , kodu 00xxxxx₂ olan kontrol karakterini gönderir , örneğin Ctrl+ [27₁₀ = 0011011₂ karakter numarasını gönderir , çünkü [
91₁₀ = 1011011₂'dir.
Terminallerdeki birkaç fonksiyon tuşu kontrol karakteri göndermiştir:
- Backspace=
Ctrl-H
(BS = Boşluk) ¹
- Tab=
Ctrl-I
(HT = Yatay Sekme)
- Linefeed=
Ctrl-J
(LF = Satır Beslemesi) (birkaç terminalde bu anahtara sahipti)
- Returnveya Enter=
Ctrl-M
(CR = Satır Başı)
- Escape=
Ctrl-[
(ESC = Kaçış)
Terminallerde daha fazla fonksiyon tuşu bulunduğunda, hepsini temsil etmek için yeterli kontrol karakteri yoktu. Böylece karakter dizileri gönderdiler ve evrensel kural, bu karakter dizilerinin kaçış karakteriyle başlaması Ctrl-[
.
Zaman geçtikçe, donanım terminalleri daha nadir ve daha nadir hale geldi; Günümüzde klavye ve uygulama arasında birçok çeviri seviyesi vardır . Mevcut karakter sayısındaki ve belirli tuş kombinasyonları ile belirli kontrol karakterleri arasındaki kodlanmış yazışmalardaki sınırlama artık geçerli değil. Bununla birlikte, uygulamalar mevcut terminallerle uyumlu kalmıştır ve terminaller mevcut uygulamalarla uyumlu kalmıştır; bu da bir şeyleri değiştirmeyi zorlaştırmaktadır.
Bu nedenle, bugün bile, Unix benzeri sistemlerde, bir terminal emülatöründe çalışan uygulamalar Ctrl-I
, kullanıcı Tabtuşa bastığında karakter Ctrl-[
, kullanıcı bastığında karakter Escvb. Alır. Vim bir Unix terminalinde çalışıyorsa, birbirinden ayırt edemez. <Esc>
ve <Ctrl-[>
terminal aynı bilgiyi gönderdiği için.
Diğer ortamlarda çalışan Vim bu sınırlamaya sahip değildir, bu nedenle prensipte farklı bilgiler göndermeleri mümkün olacaktır. Vim'in bir çok yerde Ctrl-[
temsil etmek için karakteri kullandığı ve <Esc>
değiştirmenin pratik olmadığını; bunun yerine Ctrl+ [farklı bir giriş olayı göndermek için yapılabilir.
Ben ayırt etme arasında yaptığı Vim kendisi herhangi bir sürümü farkında değilim Escve Ctrl+ [(şimdiye kadar herhangi kullandıklarımıza gibi ama değil). Gvim, biri için, bir bahçe çeşidi terminali taklit ediyor gibi görünüyor .
İronik olarak, en iyi bahis bir terminal emülatöründe çalışan Vim olabilir. Bazı terminal emülatörleri, tuşlar ve anahtarlıklar tarafından gönderilen kaçış dizilerini özelleştirmenize izin verir. Böylece Ctrl+ [için ␛ ( Ctrl-[
) karakterini değil, bazı kaçış dizilerini göndermesini ayarlayabilirsiniz . Unix benzeri sistemler için “referans” terminal emülatörü olan Xterm, bu iki planı desteklemektedir. Örneğin:
- EscTüm yapılandırmalarda gönderir
␛
ve Tabgönderir ␉
.
- İle
?.VT100.modifyOtherKeys: 0
(varsayılan) ya da ?.VT100.modifyOtherKeys: 1
, Ctrl+ [gönderir ␛
ve Ctrl+ Igönderir ␉
. ?.VT100.modifyOtherKeys: 1
yalnızca ASCII karakterine sahip olmayan meta kombinasyonları ve kontrol kombinasyonlarını etkiler.
- İle
?.VT100.modifyOtherKeys: 2
ve ?.VT100.formatOtherKeys: 0
(öntanımlı), Ctrl+ [gönderir ␛[27;5;91~
ve Ctrl+ Igönderir ␛[27;5;105~
.
- İle
?.VT100.modifyOtherKeys: 2
ve ?.VT100.formatOtherKeys: 1
, Ctrl+ [gönderir ␛[91;5u
ve Ctrl+ Igönderir ␛[105;5u
.
Xterm'i başlatırken (ve iki şema arasında seçim yapmak için) modifyOtherKeys
kaynağı ayarlayarak destek açılabilir formatOtherKeys
veya uygulama tarafından dinamik olarak açılıp kapatılabilir.
Vim'in bildiğim yerleşik bir desteği yok. Bu kaçış dizileri için kendi ciltlerinizi yazabilirsiniz. Vim'i, modifyOtherKeys
değiştirilmiş bir terminal tanımını besleyerek terminali otomatik olarak modda ayarlamak mümkün olabilir , ancak bunu yapmak bu cevabın kapsamı dışındadır.
Neovim , değişkenlerden biri için yerleşik desteğe sahiptir . Anladığım kadarıyla, eğer terminal destekliyorsa desteği açmıyor, kullanıcının yapması gerekiyor.
¹ Günümüzde giderek daha yaygın olarak, Backspace127 karakterini göndermektedir.
Esc
veya tuşuna bastığınızda uygulamaya aynı bilgileri gönderir;C-[
bu nedenle şansınız kalmaz, ancak Vim'in GUI sürümüyle veya terminalinizi yeniden yapılandırarak bir şeyler yapabilirsiniz.