Neden ESC, imleci tekrar vim içinde hareket ettiriyor?


62

Vim'de, ESCkomut moduna geri dönmek için vurduğumda , imleç bir karakter sola hareket eder. Umduğum şey bu değildir, zaman zaman lo noktaya geri dönmek için, belki bir karakteri silmek için hemen vururum .

Bu davranış için bir sebep var mı? Bu, kaçırdığım bir kullanım şekli için uygun mu?


1
Bunu şimdiye dek hiç farketmemiştim ... ve her gün vim kullanıyorum. Neden olduğunu bilmiyorum ama cevapları duymakla ilgileniyorum.
gabe.

5
ekleme moduna geri dönerken ekleme için 'i' yerine ekleme için 'a' tuşuna basabilirsiniz. Daha sonra kaçıştan önce bulunduğunuz konuma geri döneceksiniz.
penguin359

Yanıtlar:


40

Ekleme modunda, imleç karakterler arasında veya ilk veya son karakterden önce. Normal modda, imleç bir karakterin üzerindedir (yeni satırlar bu amaç için karakter değildir). Bu, biraz alışılmadık: En editörler hep karakterler arasındaki imleci koydu ve çoğu komutlar karakteri üzerinde etkili olması sonrasında (değil, açık konuşmak gerekirse, altında ) imleç. Bu belki de kısmen GUI'lerden önce metin terminallerinin imleci bir karakter üzerinde gösterdiği gerçeğinden (altı çizili veya blok, belki de yanıp sönen) kaynaklanmaktadır. Bu soyutlama insert modunda başarısız olur, çünkü bu bir pozisyon daha gerektirir (tellere karşı çitler).

Modlar arasında geçiş yapmak için imleci yarım karakter hareket ettirmek gerekir. iSol komut hamle, o bitti karakterden önce imleci koymak. aKomut doğru hareket eder. Ekleme modundan çıkmak (tuşuna basarak Esc), imleci sola hareket ettirir (satırın başındaysa, bunun yerine doğru hareket eder).

Sanırım Escdavranış bir anlam ifade ediyor. Genellikle, satırın sonuna yazıyorsunuz ve Escsadece sola gidebiliyorsunuz. Yani genel davranış en yaygın davranıştır.

İmlecin altındaki karakteri son ilginç karakter olarak ve insert komutunu düşünün a. a Escİmleci hareket ettirmeden tekrar edebilirsiniz, ancak boş olmayan bir çizginin başlangıcında başlarsanız, bir pozisyona çarpmanız yeterlidir.


21

Görsel olarak, gvim'de daha anlamlı olur:

Düzenlerken imleciniz karakterlerin arasındadır:
görüntü tanımını buraya girin

Normal moddayken, son karakterin en üstündedir:
görüntü tanımını buraya girin

Yani bu gerçekten sadece olmaktan, bir karakter geri gitmez arasında r ve solmanın üzerinde r


1
Süper resim. Dürüst olmak gerekirse, kampa gidiyorum, mnormal moda döndüğünde karakterin vurgulanmaya devam etmesi gerektiğini söylüyor ...
Steven Lu

Hata. resim bağlantıları şimdi öldü.
Steven Lu,

1
görüntü bağlantıları şimdi öldü.
Steven Lu

1
Evet, resimlerinizi manuel olarak barındırmak, sadece bu sitedeki markdown editöründeki aracı kullanmaktan daha fazla iş ve daha az güvenilirdir.
Steven Lu

1
Onlarla yine her şey yolunda mı? Bu yazdıklarını "İmleç" ve metninizi "j" bahseder
poige

15

Bu davranış burada yanıtlandığı şekilde düzenlenebilir , ancak bir saniye için neler olup bittiğini düşünün ve durun. Ekleme modundayken, aslında bir karakterin üzerinde değil, bunlar arasında. Bir şey eklediğinizde, imleç eklediklerinizin sonuna atlar, böylece eklenen sonraki şey bundan sonra olur. Şimdi bir mektup yazdıysanız, o zaman bir şey yapmak istediğinizi düşünün. Vuruş Esc, imleci doğrudan eklediğiniz son karakterin üzerine getirir. Bunu yapmasaydı, aslında oldukça garip olurdu.

Muhtemelen düşündüğünüz durum, normal moddaymış gibi hareket eden ekleme modundayken ve sonra değişme durumudur. Bu durumda imleç bir karakter geriye gidiyor gibi görünmektedir, ancak eğer böyle düşünürseniz ekleme modunda olduğunuzu gösterir ve yaptığınız en son şey eklemek DEĞİLDİR. Belki normal modda daha fazla zaman geçirmelisin?


15
Bu bana mantıklı gelmiyor. Tekrarlanan ive ESCbasılan tuşların geriye dönük davranışını nasıl açıklarsınız?
Warren Young,

4
Ekleme kipine girme, bir şey yerleştirme, daha sonra bırakma adil bir sınav değildir. Bir şey eklemezseniz neden ekleme modunda olmalısınız? Bir şey yerleştirirseniz, normal moda geri dönmek, seçtiğiniz karakterde sizi bırakır. Çok sezgisel.
Caleb,

4
Bu "adil" değil, açıklayıcı güçle ilgili. Eğer işlem teoriniz bütün davranışları açıklamıyorsa, ya eksiktir ya da vi'nin davranışı tutarsızdır. Vi'nin her yönden mükemmel ve bu nedenle tutarlı olduğuna inanmayı tercih ederim. :)
Warren Young,

9
Ve "geriye doğru yürüme" davranış @Warren iardından ESCbir fonksiyonudur ive tamamen bağımsızdır ESC; özellikle, vurduğunuzda i, vim'den “tanımlanana göre bir karakterden önce bir karakter ekle” anlamına gelen ve “bundan sonra bir karakter ekleyen” bir karakter girmenizi istersiniz a.
Kromey

3
Genel olarak, her değişiklikten sonra, o değişikliği bıraktığımda, o değişiklikten bitirdim ve bir sonraki yapmak istediğim muhtemelen farklı bir değişiklik yapmayı içerecek. Bu yüzden, benim için, ekleme modunu bıraktıktan sonra (nasıl girersem gireyim), imleci bir sonraki karakterde tutmayı tercih ederim, bu yüzden bir sonraki değişikliğe hazırım, sadece ne olduğumu değiştirmeye hazır olmak yerine sokulur.
Kyle Strand

6

Tür Alt+ Lkomut moduna dönmek için.

Herhangi bir remapping veya vim config değişikliği gerektirmez. Çoğu terminal emülatöründe Alt+ bunu KEYgönderdiği için çalışır (xterm'de ~ / .Xdefaults dosyanıza bir satır eklemeniz gerekebilir ). Bu davranış, kutu + + ' dan çıkan diğer çalışma modu kombinasyonlarını bile "oluşturmanıza" olanak tanır .EscKEYXterm*metaSendsEscape: trueAltSBackspace

Bu arada, imleci az önce yazdığınız karakterin üzerine getirmek çok rahatsız edici olabilir. Örneğin, Escdwaz önce eklediğiniz metni izleyen sözcüğü silmez.


Bahsettiğiniz rahatsızlık kaçıştan önce her zaman insert modunda bir boşluk yazarak önlenebilir. Ardından, ekleme modundan çıkan imleç boşluğun üzerine Esc d egetirilir ve öndeki sözcüğü silmek için yazabilirsiniz . Varsayılan davranışa geri döndüm çünkü kafamda kodlanmış diğer davranışları değiştirdiğini hissettim.
mljrg

4

İşte benim çözümüm.

Bu konuda wikia sayfasında sunulan çözümün daha kısa versiyonudur .

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

Burada da +1, kullanıcı aslında bu davranışı değiştirmenin bir yolunu sormasa da, wiki sayfasını gösterdiği için.
Kyle Strand

Birçok eklentinin varsayılan (biraz sezgisel olmayan) davranışa bağlı olduğunu Vim'in içine yeterince kazarsanız, bazı şeylerin rastgele bir şekilde tek bir karakteri yemek yediğini veya dolaştığını görürseniz, bunun neden olabileceğini unutmayın. Bu otomatik komutu kendim kullanmıyorum; Yine de iyi çalışıyor.
Steven Lu
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.