"Vim'de asla ok tuşlarını kullanmayın!"
Bunu rastgele bir konuşmacıdan duydum ama nedenini sorma şansım olmadı. Ayrıca, ok tuşlarını kullanmazsanız, imleci Insert modunda nasıl hareket ettirebilirsiniz ?
"Vim'de asla ok tuşlarını kullanmayın!"
Bunu rastgele bir konuşmacıdan duydum ama nedenini sorma şansım olmadı. Ayrıca, ok tuşlarını kullanmazsanız, imleci Insert modunda nasıl hareket ettirebilirsiniz ?
Yanıtlar:
Ok tuşlarını kullanmak kötü bir alışkanlık olarak kabul edilir, çünkü ok tuşlarını kullanıyorsanız büyük olasılıkla vim'in pek çok güzel özelliğini kaçırıyorsunuzdur.
İnsanlar ilk önce vim kullanmaya başladığında, bunlar geleneksel metin düzenleme gibi olduğundan, ekleme modunda kalma eğilimindedir. Ancak vim'de etkili olabilmek için, aslında metin girerken yalnızca ekleme modunda olmalısınız. İmleci hareket ettirmek istiyorsanız normal modda olmalısınız. Varsayılan olarak hemen hemen normal modda olmalısınız.
Normal modda hareket etmek için bir milyon kısayol vardır. Bir seferde hjkl
bir boşlukta dolaşmak için kullanabilirsiniz veya kelimeler, paragraflar vb. İle hareket edebilirsiniz. Normal moddaysanız, ok tuşlarını kullanmaya hjkl
devam ettikleri yerine, bunun anlamı yoktur .
Yön tuşlarını kullanıyorsanız, vim "yanlış" kullanıyor olmanızın bir tavrı var. Gerçek şu ki, vim'in gerçekten dik bir öğrenme eğrisi var, bu yüzden öğrenirken aklı başında tutanları yapın. Vim'i ilk kullanmaya başladığımda her şeyi "yanlış" şekilde yaptım ve daha çok Vim'in emirlerini öğrendiğimde alışkanlıkları kırma konusunda herhangi bir problem yaşamadım.
Örnek olarak, ilk başladığımda metni tırnak içinde değiştirmek istediğimi söyleyin:
String mystring = "I want to change this";
Ekleme moduna girer, ok tuşlarını kullanarak dizenin sonuna gider, dizge bitene kadar geri tuşuna basıp yeni metni girerdim.
Çok daha iyi bir yol imleci dizgenin herhangi bir yerine koymaktır (normal mod), sonra düğmesine basın ci". Bu olacak change
in
"
. Tırnaklar arasındaki her şeyi silecek ve yeni metni girebilmem için sizi ekleme moduna geçirecektir.
ci<
ve ci)
aynı zamanda da çalışın ve elinizi klavyeden fareye götürmeniz gerekmez. Eğer parantezin başlangıcına gitmek ve ardından içerik f(ci(
çalışmalarını değiştirmek istiyorsanız .
/want
"istemek" kelimesini kullanmak için enter tuşuna basabilirsiniz ci"
.
hjkl
): haritalama up
ve down
birbirinden dikey ayırt edilemeyen 2 tuşlarına, sol ve sağ anahtarlardan ..... o var dursun trajik ideolojik kör kibir gösteri.
Kısacası, navigasyon arayüzü olarak tuşları Vim
kullanır hjkl
, çünkü bu tuşlar oklarla işaretlenmiş olan eski "ADM-3A" terminalinin kalıntısıdır.
Yana
vim
türetilirvi
, aynı hjkl anahtarları kullanmaktadır.
Ok tuşlarının harf temelli değiştirilmesi , ellerinizi standart yazma yapılandırmasından çekmeden metinde gezinmenizi sağlar . Bu tartışmalı bir şekilde ok tuşlarına basmak için elinizi hareket ettirmekten daha verimli ve hızlıdır. Referans 2'de belirtildiği gibi (kaynaklara bakın) bu, bunun avantajlarının sonu değil: VIM'in, ellerinizi hareket ettirmeden erişebileceğiniz birçok başka kısayol var.
Sorunuzun 2 bölümüne çok ayrıntılı ve doğru cevaplar var: ok tuşlarının değiştirilmesi konusunda hızlı ve özet bir şekilde cevap verdim, ancak sorunuz için lütfen aşağıda listelenen kaynaklara bakın.
hjkl
ekleme modunda çalışmaz, peki bu sorunun cevabı nasıl?
hjkl
Vim'de kullanabilmeniz gerçeği, neden birisinin neden ok tuşlarını kullanmaması gerektiğini söylemez, tıpkı bisikletimi çalışmak için sürdüğüm gibi, neden birinin bana asla dürtmemi söylemeyeceğini açıklamıyor.
Bu aptal mantra, genellikle ikinci sıradaki omurga gibi olan dokunma daktiloları veya havalı görünmek isteyen dokunma daktiloları tarafından tekrarlanır. Dokunma daktiloları olmayan kişiler için, ana satır o kadar da özel değildir ve oklara ulaşmak için sağ eli hafifçe hareket ettirmek sorun değildir.
Dikkate alınması gereken önemli olan, bu mantrayı tekrar edenlerin yerine kullanmayı önerdikleri kişilerdir.
Çoğu zaman kullanmakta ısrar ediyorlar hjkl
.
Bu tuşların yalnızca, vi'nin yazarının kullandığı klavyenin fiziksel ok tuşlarına sahip olmadığı ve bu nedenle ok tuşlarına karşı herhangi bir argümanın sadece rasyonelleştirme hjkl
olduğu için kullanıldığını açıklarsak, yine de oklardan daha az iyidir. Evet, hjkl
okları kullanmanın tek faydası , sağ elin küçük hareketini oklardan oklara doğru atlamanızdır. Bu faydanın zahmete değip değmeyeceği, sizin çağrınız.
Ancak sağ elin hareketi, sadece okları kullanmanın neden yetersiz kaldığına bağlı değildir. Verimsizdir, çünkü metni karakter dizisi ve satır satır hareket ettirmek için kısıtlar , metin düzenlemek için gereken hareketin büyük kısmı daha geniş bir alana sahiptir.
Sağ oku 13 kez vurmak verimsiz ve sıkıcıdır. Öyle mi olduğunu çekiç daha iyi l
anahtar 13 defa? Hayır. Aynı derecede aptalca.
Hedefinize ulaşana kadar sağ oku basılı tutmak daha az sıkıcı olmakla birlikte, hataya açıktır ve sonunda gerekli ve deterministik olmayan yavaşlamalar nedeniyle neredeyse 13 vuruş kadar verimsizdir. Öyle mi olduğunu daha iyi tutmak için l
tuşa basıldığında? Hayır tabii değil.
Neyse ki çoğu GUI araç Ctrl+Right
takımı, bir sonraki paragrafa veya her neyse, tek tek kelime hareket etmemize veya EOL'ye atlamamıza izin veren böyle kombinasyonlar sağlar. Bu kısayollar, tek oklardan çok daha hızlı ve daha akıllıca gezinmemize yardımcı olur. Aynı şey var hjkl
mı? Hayır yapmıyoruz. İstersek bir sayım kullanabiliriz, fakat kim her hareket için karakter saymak ister? Yapma 14k
yardımıyla relativenumber
büyük bir ama ne yatay hareketlerle ilgili? Büyük hareketler için, hjkl
aslında değiştiriciler + oklardan daha kötüdür. Ve tahmin et ne oldu? Büyük hareketler en çok ihtiyacımız olan şey.
Ama biz şanslı pisliktir, bizim favori editörü hem oklar etrafında daireler çalıştırmak hareketleri onlarca sahiptir ve hjkl
: bBeEwW/?*#{}()
vb vb. Bu komutlar şunlardır ölçülemeyecek fazla güçlendirici hjkl
ve size kullanılırsa çok daha mantıklı ve sezgisel çoğunlukla Ctrl+Right
ve arkadaşlar.
Geçiş <Right><Right><Right><Right><Right><Right><Right><Right><Right>
için lllllllll
bile veya 9l
gülünç anlamsızdır.
'Dan' a <Right><Right><Right><Right><Right><Right><Right><Right><Right>
geçmek <C-Right>
çok daha iyi. Oradan, geçiş w
kolay ve hızlıdır. Oklarına gerek yok <nop>
!
Bu komutlar daha kullanışlı, daha güçlü ve daha sezgiselse hjkl
, neden bu kadar çok blogcu ve yorumcu okları değiştirmek için ısrar ediyor hjkl
?
Sahibim. Fikrim yok.
Sonuç olarak, hjkl
araç kayışımızdaki yerlerini aldık çünkü her zaman 2 karakter veya satır hareket etmeliyiz, ancak ormanı gizleyen ağaçtan daha sık görülürler. Oklara karşı vaaz veren kişilere karşı dikkatli olun: sizin için sakladıkları şeyler hiç iyi olmayabilir.
hjkl
olduğunu yararsız ama hjkl
yararlıdır.
Diğerleri, imleci hareket ettirmenin başka yollarının neden tercih edildiğini açıkladılar, ancak soruyu cevaplamaları için çok az şey söylendi, neden ok tuşlarını kullanmak kötü bir fikir olarak kabul ediliyor?
Bence asıl sebep (ve buna biraz hitap eden @Squeezy), VT100 gibi terminallerin günlerinde, ok tuşlarının , çalışan program tarafından yorumlanan bir kaçış dizisi ürettiğini düşünüyorum. (Ok tuşları ASCII'de gösterilmediğinden, ok tuşlarının yazılmasının "özel" bir şekilde iletilmesi gerekir.) Kaçış dizisi tipik olarak bir şeydi
ESC [ A
Terminalinizin, bağlantınızın ve imleç modunun özelliklerine bağlı olarak . Eğer kabuğunuz veya programınız terminal için uygun şekilde yapılandırılmadıysa, çıkış sırasını bir ok tuşu olarak anlamazlar.
Üniversitedeyken, VT100 terminalleri aracılığıyla Ultrix'e giriş yapmak, vi 'da insert modundayken bir ok basarsam, ESC
"insert modundan çık" olarak yorumlanırdı ve ardından [ A
normal mod komutları olarak yorumlanırdı. . Açıkçası, kullanıcının istediği veya beklediği şey değil!
Günümüzde, özellikle GUI ortamlarında, terminallerin ve ok tuşlarının kullanımı daha güçlü görünmektedir. Ancak SSH veya Telnet üzerinden vim kullanırken de aynı sorunlar ortaya çıkıyor.
Ok tuşlarını kullanarak kaşların üzerine bastırılır, çünkü QWERTY düzenini kullanırken parmaklarınızı yuvadan ve Dvorak veya başka bir düzeni kullanırken karakter panelinden (?) Hareket ettirmeye zorlar.
Ok tuşları bir sorun sergiliyor - 1200 baud modem gibi, yavaş bağlantılarda zaten biliniyordu. Ok, benzer bir ESC dizisine çevrilir ESC a
. Şimdi, ESC ile bir süre arasında geçen zaman çok uzadığında, bir BEL (veya bir flaş görüyor) ve ardından ekleme modunu duyuyorsunuz. Bu hjkl
tuşlarla görünmez .
ESC [ A
neyi kastediyorsunuz?
ESC [ A
bir DEC VT-100 terminalidir (ANSI terminali, DEC VT-100'ün güçlü bir şekilde türeviydi) okudur. IIRC, ESC A
ADM-3A oku veya muhtemelen DEC VT-52 oku idi. Nokta aynı kalır, ancak ESC
ok tuşunun bir parçası olarak gönderilen karakter ESC
elle yazılanla kolayca karıştırılmıştır .
İkinci soruya gelince:
[I] ok tuşlarını kullanmazsanız, imleci Insert modunda nasıl hareket ettirebilirsiniz?
Usta olan ve bu nedenle ok tuşlarını küçümseyen biri için "mod" kavramı da aynı şekilde mevcut değildir.
Ana olmayan bir sokma modunu kullanarak yeni bir metin değil, tüm uç veya değiştirme ekler komutları gibi bir işlem kodu ile başlayabilir i
, o
ya da cw
bu yük metin ardından ve sona erdirilir ESC
. Komutların bir sözdizimi vardır ve bu nedenle makine komutların sözdizimini kabul etme durumlarında geçiş yapar, ancak master'ın editör modelinde, bunlar bir moda yol açmaz. Çırakların naif olarak "mod" dediği şey, ustanın bitmemiş bir komuta halidir, ustanın önlediği en iğrenç bir durumdur.
Master farkettiğinde, bir ekleme veya değiştirme komutunun ortasında, o metin imleç tarafından gösterilen bir sonraki karakter konumundan başka bir yere eklenmeli veya silinmelidir; hareket komutları ( hjkl
daha güçlü bir yolun açıkça uygulanamadığı durumlarda düşüklere başvurmak ).
Ayrıca, master nadiren bir komut bırakılmayacak şekilde dikkati dağıldığından, efendi nadiren, eğer olsa, ESC
"sadece durumunda" yayınlanan fazladan bir girişin yapılmasından dolayı bip sesi çıkarmasına neden olur .
(Bununla birlikte, ağ geciktiğinde veya makine kapatıldığında, ana cihaz ESC
, tıpkı diğer herkes gibi, öfkeyle ve art arda anahtar yapar.)
vi
insert komut girişi bir mod ise, o zaman dürüst olmak gerekirse, diğer tüm editörlerde bu tür modları tanımlamamız ve modal olarak adlandırmamız gerekir. Örneğin, Emacs'ta Ctrl-X'e bastığımızda, örneğin bu "modun" dışında çalışmayan belgeyi kaydetmek için Ctrl-S'ye basmanın mümkün olduğu bir "modda "yız.
Evet, yukarıda belirtilen sebeplerin birçoğu vi
, başlangıçta kullanılmak üzere yazılmıştır hjkl
, ancak " asla " oldukça büyük bir ifadedir.
vim
İstediğim gibi davranmak için (ve kullandığım diğer araçları) değiştirme eğilimindeyim . Bu, makinemde harika çalışıyor, ancak yerleşik bir geliştirici olarak, desteklediğim makinelerde ne olduğunu her zaman seçemiyorum. Sadece arada hjkl
sırada gezinme olan daha eski makinelerle karşılaşıyorum vi
. Alışkanlığımı tekrar alıp geçene kadar kontrol dosyalarının dosyama bir iki saniye daha eklenmesini sağlıyorum hjkl
.
Buraya varabilmemin tek geçerli nedeni "Vim'de asla ok tuşlarını kullanma!" Böylece ok tuşlarını kullanamayan makineleri kullanabilirsiniz. " Asla " demek için oldukça zayıf bir sebep gibi geliyor .
ok tuşlarını kullanmazsanız, imleci Insert modunda nasıl hareket ettirebilirsiniz?
Ben arrowkeys kullanarak insanları vazgeçirmek başlıca nedeni açıkça olduğu çünkü bu size ekleme modunda iken hareket sağlar.
Yeni gelenler için vim öğrenmedeki en tuhaf sorunlardan biri, vim'in geri alma komutunun , son tuşa basmak yerine son eylemi geri alarak işlemesidir . Arkadaşlarımın çoğu, her zaman ekleme modunda kalmaya devam ediyor, çünkü onu bırakmak için hiçbir sebep yok. Bana "Nasıl geri alabilirim?" Diye sordukları zaman. "Komut modundan gelen u harfini vur" ile cevap veriyorum, vim tüm dosyayı temizlediğinde sinirli oluyorlar.
“Vim işleri doğru yapamazsa oldukça değersiz bir metin editörüdür.”
Nasıl yapılacağını öğrenmeden önce bir araç kullanmak zor.
Vim, nasıl kullanılacağını öğrendikten sonra faydalı olur. Vim'in gücü, "o şeyi tekrar yap" ya da "o şeyi geri al" ya da "bilinçli kas hafızası aracılığıyla" bu makro kısayol tuşuna bastığımda o şeyi yap "deme şeklindedir. Eğer "o şey" olur "bütün dosyayı baştan sona yazın", kabul ediyorum, vim hiç de kullanışlı değil.
Bu nedenle, yalnızca içeri girdiğinizde metin girmeniz gerekir insert mode
. Ok tuşlarından kaçınmak, daha iyi bir vim kullanıcısı olmanıza yardımcı olmak için bulduğumuz bir yoldur.
Kbox'ta ssh arka plan programı çalıştıran Android cihazıma bağlandığında vim çalıştırmak bazılarını rahatlık bölgemden çıkarmamı sağladı. Cihazdaki Anroid Terminal Emulator, özel tuş kombinasyonlarını (ctrl + neyse) değiştirmek için ses seviyesi düğmelerini kullandığından, normal olarak klavyede kullanacağım bazı tuşlar bu durumda çalışmaz.
Örneğin, Ekle tuşu bu ortamda çalışmadığından, ben de I
ekleme moduna geçmek için kullanıyorum . Genellikle insert modundan kaçmak için kullandığım Esc tuşu çalışmaz, bu yüzden ctrl + [
kaçmak için kullanıyorum. Ev ve Son tuşları alışkın olduğum gibi çalışmıyor. Bunun yerine , bir çizginin başına veya sonuna ulaşmak için daha önce hiç uğraşmadığım 0
ve $
kısayollara güveniyorum .
Her neyse, ok tuşları hala benim durumumda her zamanki gibi çalışıyor, ancak minimalist klavye kısayollarının orada olduğunu bilmek güzel.
İşte benim 2 ¢.
Kendini rahat hissettiğin şeyi yap. Farklı düzenleyiciler kullanıyorsanız, ok tuşlarını tutarlılık için kullanmak daha kolay olabilir.
Öte yandan, vi (ve vim) 'in belki de dışında herhangi bir özel anahtara ihtiyaç duymaması kesinlikle mükemmeldir. Muhtemelen bir terminal olarak işlev görmek için eski bir IBM selektifi kesmek olabilir.
Dikkat edilmesi gereken diğer şey, ok tuşlarının beklendiği gibi çalışmayabilir. Çalışmadıkları terminalleri kullandım. Vim'de tam olarak nasıl uygulandıklarından emin değilim ama tek tip olmadığından eminim. Sivilceli hafızam bile vim makroları olarak uygulandıkları bir uygulamayı hatırlıyor gibi görünüyor.
Geliştirilmiş metin editörleriyle oyunun adı “aceleyle hareket etmek” ve boşa harcanan / tekrarlanan hareketi azaltmak gibi görünüyor. Orada bazı sen (klavye boyutlarına bağlı) ok tuşlarına harf tuşları hareket kaybolan zaman ve daha geri eve satıra. Fakat sol elinizle ESC tuşuna basarsanız pembemsi veya yüzük parmağı değiştirme modları bir akışkan hareket haline gelir ve bir düzenleme oturumu boyunca bir hız kazancı olur.
Ve bu, sorunuzun ikinci bölümünün anahtarıdır, sol tarafınızla ESC'ye basarak ekleme modundan çıkın ve sağınızla hjkl ile hareket edin. Sonunda bunu bir ritmi atlamadan yapabileceksiniz.
Bu, burada bahsedilen bazı şeyleri deneyene kadar Vim ile hiçbir zaman yer almadığım , en önemlisi " Verimli: kısayol eşlemeleri " bölümü olmak.