En çok kullanılan vim komutları / tuş vuruşları nelerdir?


112

Ben Textmate'ten MacVim'e geçmeye çalışan bir Ruby programcısıyım ve VIM'de yapabileceğiniz şeylerin ve onlar için tüm tuş basışlarının devasa listelerinde gezinirken sorun yaşıyorum. "Metin eklemek için 'I' veya karakterden sonra metin eklemek için 'a' veya satırın sonuna metin eklemek için 'A' veya ..." Tahmin edemiyorum herkes metinde gezinmek için 20 farklı tuşa, metin eklemeye başlamak için 10 veya daha fazla tuşa ve görsel olarak bir iç bloğu seçmenin 18 yolunu kullanır. Yoksa sen mi !?

İdeal hile sayfam, en çok kullanılan 30-40 tuşa basma veya herkesin günlük olarak kod yazmak için kullandığı komutların yanı sıra, rubyistlerin günlük olarak kullandığı mutlak temel eklentiler ve onlar için en çok kullanılan 10 komut olacaktır. Teorik olarak, ben buna sahip ve bir kez ben, Textmate olduğum gibi VIM yetkin olarak olma başlatmak sonra beni yapacak başka VIM komutları binlerce öğrenme başlayabilirsiniz daha verimli.

Yoksa VIM'i tamamen yanlış bir şekilde mi öğreniyorum?


9
Cafepress.com/geekcheat.11507711 için zorunlu referans .
geekosaur

1
"Ruby" yi kaldırmak ve "klavye kısayolları" eklemek için yeniden etiketlendi. Daha uygun görünüyor.

"Vim'i tamamen yanlış yoldan mı öğreniyorum?" - nah, sadece bazı temel bilgilerle başlamanız gerekiyor ve bir yıl sonra hala daha fazla komut öğrenmeye devam edeceğinizi unutmayın. Belki bir gün gerçekten tüm komutları kullanacaksınız! Ama kimse hepsini ilk günden kullanmıyor.
Cascabel

Yanıtlar:


306

İşte düzenli olarak kullandığım komutlarla bir kez yazdığım bir ipucu sayfası:

Referanslar

Genel

  • Neredeyse tüm komutların başında tekrar sayımı için bir sayı gelebilir. Örneğin. 5dd 5 satırı sil
  • <Esc> sizi herhangi bir moddan çıkarır ve komut moduna geri döndürür
  • Önünde gelen komutlar : ekranın altındaki komut satırında yürütülür
  • : herhangi bir komutla yardım

Navigasyon

  • İmleç hareketi: ← hjk l →
  • Sözcüklerle:
    • w sonraki kelime (noktalama ile); W sonraki kelime (boşluklarla)
    • b geri kelime (noktalama ile); B geri kelime (boşluklarla)
    • e son kelime (noktalama ile); E son sözcüğü (boşluklarla)
  • Satırla:
    • 0 satır başlangıcı; ^ ilk boşluk olmayan
    • $ satır sonu
  • Paragrafa göre:
    • { önceki boş satır; } sonraki boş satır
  • Dosyaya göre:
    • gg dosyanın başlangıcı; G dosya sonu
    • 123G belirli hat numarasına gider
  • İşaretçiye göre:
    • mx set işareti x ; x işaretlemek gidin x
    • '. son düzenlemenin konumuna git
    • '' Atlama önceki son noktaya geri dönmek
  • Kaydırma:
    • ^ F tam ekran ileri; ^ B geriye doğru tam ekran
    • ^ D yarım ekran; ^ U yarım ekran yukarı
    • ^ E bir satır yukarı kaydırın; ^ Y bir satır aşağı kaydır
    • zz merkez imleç çizgisi

düzenleme

  • u geri; ^ R yeniden yap
  • . son düzenleme komutunu tekrarla

ekleme

Tüm ekleme komutları, <Esc>komut moduna dönmek için ile sonlandırılır .

  • i imleçteki metin eklemek; Ben satırın başında metin eklemek
  • imleçten sonra bir metin ekleme; Bir hattın sonundan sonra ekleme metni
  • o aşağıdaki yeni satırı açın; O yukarıda yeni satır aç

Değiştirme

  • r tek karakteri değiştirin; R birden çok karakteri değiştirir
  • s tek karakteri değiştir
  • cw kelimeyi değiştir; C satırın sonuna kadar değişir; cc tüm satırı değiştir
  • c<motion> metni hareket yönünde değiştirir
  • ci ( parantez içinde değiştirin ( daha fazla örnek için metin nesnesi seçimine bakın )

Silme

  • x karakteri sil
  • dw kelimeyi sil; D satırın sonuna kadar sil; dd tüm satırı sil
  • d<motion> , hareket yönünde siler

Kes ve yapıştır

  • yy satırı yapıştırma tamponuna kopyala; dd çizgiyi yapıştırma tamponuna kes
  • p imleç çizgisinin altına tamponu yapıştır; P imleç çizgisinin üstüne tamponu yapıştır
  • xp iki karakteri değiştirir ( bir karakteri silmek için x , sonra imleç konumundan sonra geri koymak için p )

Bloklar

  • v görsel blok akışı; V görsel blok çizgisi; ^ V görsel blok sütunu
    • çoğu hareket komutu bloğu yeni imleç konumuna genişletir
    • o imleci bloğun diğer ucuna taşır
  • d veya x bloğu yapıştırma tamponuna kes
  • y bloğu yapıştırma tamponuna kopyala
  • > girinti bloğu; < girintisiz blok
  • gv son görsel bloğu yeniden seç

global

  • % s / deneme / bar / g yerine "çubuğu" ile "foo" tüm oluşumlarını
    • %, dosyadaki her satırı gösteren bir aralıktır
    • / g, sadece birincisi yerine bir satırdaki tüm oluşumları değiştiren bir bayraktır

Aranıyor

  • / ileriye doğru ara; ? geriye doğru ara
  • * imleç altındaki kelimeyi ileri arama; # imlecin altındaki kelimeyi geriye doğru ara
  • n aynı yönde bir sonraki maç; N ters yönde sonraki maç
  • fx sonraki karaktere doğru x ; Fx önceki karaktere geriye doğru x
  • ; aynı karaktere tekrar aynı yönde ilerleyin; , ters yönde aynı karaktere tekrar git

Dosyalar

  • : w dosyayı diske yaz
  • : wname dosyayı diske olarak yazname
  • ZZ dosyayı diske yaz ve çık
  • : n yeni bir dosyayı düzenleyin; : n! mevcut değişiklikleri kaydetmeden yeni bir dosyayı düzenle
  • : q bir dosyayı düzenlemekten çıkın; : q! değişiklikleri kaydetmeden düzenlemeden çık
  • : e aynı dosyayı yeniden düzenleyin (vim dışında değiştirilirse)
  • : e. dizin gezgini

pencereler

  • ^ Wn yeni pencere
  • ^ Bir sonraki pencereye aşağı Wj ; ^ Wk önceki pencereye kadar
  • ^ W_ mevcut pencereyi büyüt ; ^ W = tüm pencereleri eşit boyutta yap
  • ^ W + pencere boyutunu büyüt; ^ W- pencere boyutunu küçült

Kaynak Gezinme

  • eşleşen parantez / köşeli ayraç / ayraç veya dil modülü yüklüyse dil bloğuna % atlama
  • gd imleç altındaki yerel sembolün tanımına gider; ^ O önceki pozisyona dönüş
  • ^] genel sembolün tanımına atla ( tagsdosya gerektirir ); ^ T önceki pozisyona dönüş (keyfi pozisyon yığını korunur)
  • ^ N (ekleme modunda) otomatik kelime tamamlama

Yerel değişiklikleri göster

Vim, kaynak kontrolünde temel sürümden değiştirilen satırları vurgulamayı kolaylaştıran bazı özelliklere sahiptir. Bunu kolaylaştıran küçük bir vim betiği oluşturdum: http://github.com/ghewgill/vim-scmdiff


1
+1 Nispeten minimal olsa da, kendimi herhangi bir pencere komutu kullanmadığımı veya ok tuşları / pageup / pagedown / home / end ve gg / G dışında bir şeyle gezinmediğimi itiraf etmeliyim. Oh, ve satır numarası navigasyonu için ayrıca 123 (komut modu) kullanabilirsiniz.

2
Güzel kopya kâğıdı. Ben eklemek istiyorum w ^ w ^ , pencereler arasında geçiş yapmak x: yerine ZZ , tutarlılık için tx iletmek önce karakter ve Tx geriye.
romainl

Bunun sadece kullandığım şeyin temelleri olduğunu unutmamalıyım . Bu listeyi diğer insanlara vim öğretmek için bir araç olarak oluşturdum. Diğer birçok komutu daha seyrek kullanıyorum ve ayrıca vim'i daha etkili kullanmama yardımcı olmak için çeşitli takma adlar ve makrolar oluşturdum.
Greg Hewgill

2
EscAnahtardan (ve RSI?) Kaçınmak istiyorsanız, kullanabilirsiniz ^[. ^cda çalışır (ancak kısaltmaları genişletmez). Kaynak: vim.wikia.com/wiki/Avoid_the_escape_key
Lian

22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Bu, VIM öğrenmek için şimdiye kadarki en harika şey.


Bunu daha önce hiç görmedim, komutların ne yaptığını öğrendikten sonra çok güzel bir referans.
amccormack

3
Yine de, qwerty klavyeniz yoksa, "grafik" kısmı işe yaramaz.
romainl

5
Bir bağlantı göndermenin (şimdiden ölüme gönderilmiş olan) bu kadar dikkat çekmesi beni şaşırtıyor, diğer posterlerin koyduğu ekstra millere giderken bu kadar dikkat çekmiyor ...
Lieven Keersmaekers

Vim gönderilerinde açık kazanan: stackoverflow.com/questions/1218390/…
Justin Thomas


4

Vim'in yerleşik eğitiminden geçtiniz mi? Değilse, komut satırına bırakın ve yazın vimtutor. İlk komutları öğrenmenin harika bir yolu.

Vim'in inanılmaz bir esnekliği ve gücü var ve çoğu vim kullanıcısı gibiyseniz, birçok yeni komut öğrenecek ve eskileri unutacak ve sonra onları yeniden öğreneceksiniz. Yerleşik yardım iyidir ve yeni şeyler öğrenmek için periyodik taramaya değer.

İnternette vim için birkaç iyi SSS ve hile sayfası var. Ben arama öneriyoruz vim + faqve vim + cheatsheet. Cheat-Sheets.org # vim , Vim Tips wiki gibi iyi bir kaynaktır .


Bunu yeni öğrendim ve şükürler olsun ki bir Mac'e yüklenmiş olarak geliyor. Şimdi deniyor (1'de…)
Clinton

Uzun zamandır vim kullanıyorum ve bir makineye kurduğum ilk şeylerden biri. MacVim , Mac OS'de çok güzel. Vim'i kullandığım çoğu Linux kutusunda kaynaktan derleme eğilimindeyim, çünkü çoğu dağıtım güncel değil veya dil desteği doğru ayarlanmadı. Bir şey ayarlamam gerektiğinde ~/.vimrc, ~/.gvimrcve ~/.vimdizinimin güncel bir sürümünü bir tar-ball içinde tutuyorum. Bunu kopyalamak ve dosyaları çıkarmak, Windows, Mac ve Linux'ta dakikalar içinde tüm normal komutlarım ve renk şemalarımla vim çalıştırmamı sağlıyor.
The Tin Man

3

Ne çoğu insan bunu belki gibi, çıplak temelleri ile başlar ise i, yw, yy, ve p. Ok tuşlarını dolaşmak, fareyle metin seçmek, menüleri kullanmak vb. İçin kullanmaya devam edebilirsiniz. Sonra bir şey sizi yavaşlattığında, bunu yapmanın daha hızlı yolunu ararsınız ve yavaş yavaş daha fazla komut eklersiniz. Bir süre için her gün yeni bir komut öğrenebilirsiniz, ardından haftada bir komuta geçecektir. Bir ay içinde oldukça üretken hissedeceksiniz. Bir yıl sonra oldukça sağlam bir repertuarınız olacak ve 2-3 yıl sonra parmaklarınızın ne yazdığını bilinçli olarak bile düşünmeyeceksiniz ve birileri için hecelemeniz gerekirse garip görünecek. 1993'te vi öğrendim ve hala yılda 2 veya 3 yeni komut alıyorum.


3

@Greg Hewgill'in hile sayfası çok iyi. Birkaç ay önce TextMate'ten geçişime başladım. Şimdi TM ile olduğum kadar üretkenim ve Vim'in gücüne sürekli hayret ediyorum.

İşte nasıl değiştim . Belki senin için yararlı olabilir.

Grosso modo, radikal bir geçiş yapmanın iyi bir fikir olduğunu düşünmüyorum. Vim çok farklı ve aşamalı olarak gitmek en iyisidir.

Ve alt sorunuzu cevaplamak için, evet, iaIAoOekleme moduna girmek için her gün kullanıyorum . İlk başta kesinlikle tuhaf görünüyor ama bir süre sonra gerçekten düşünmüyorsunuz.

Programlamayla ilgili tüm görevler için inanılmaz derecede yararlı olan bazı komutlar:

  • rve Rkarakterleri değiştirmek için
  • <C-a>ve <C-x>sayıları artırmak ve azaltmak için
  • citHTML etiketinin içeriğini değiştirmek ve onun türevleri ( cat, dit, dat, ci(, vb)
  • <C-x><C-o>(eşleştirildi ,,) için her şeyi tamamlama
  • ile görsel blok seçimi <C-v>
  • ve bunun gibi…

Vim yöntemine alıştığınızda, başka bir düzenleyicide veya metin alanında metni düzenlerken her zaman vurmamak oveya xher zaman gerçekten zorlaşır .


2

Herkesin metinde gezinmek için 20 farklı tuşa basmayı, metin eklemeye başlamak için 10 veya daha fazla tuşu ve görsel olarak bir iç bloğu seçmek için 18 yolu kullandığını hayal edemiyorum. Yoksa sen mi !?

Yaparım.

Teorik olarak, buna sahip olduğumda ve Textmate'te olduğum kadar VIM konusunda yetkin olmaya başladığımda, beni daha verimli hale getirecek diğer binlerce VIM komutunu öğrenmeye başlayabilirim.

Bunu yapmanın doğru yolu bu. Temel komutlarla başlayın ve ardından üretkenliğinizi artıran komutları seçin. Verimliliğimi vim ile nasıl artıracağıma dair ipuçları için bu blogu takip etmeyi seviyorum.


2

tuxfiles.org'da oldukça iyi bir kopya kağıdı var. Sanırım komutları öğrenmenin birkaç noktası var:

  • Hile sayfasını düzenli olarak okuyun. Hepsini kullanma veya tüm tuşları hatırlama konusunda endişelenmeyin, sadece komutun var olduğunu bilin. Komutu arayın ve kendinizi tekrar eden bir şey yaparken bulduğunuzda kullanın.
  • Kendinizi düzenli olarak bir şeyler yaparken bulursanız (belirli bir karakterden sonraki tüm satırı silmek gibi d$), bunun için bir komut bulup bulamayacağınızı görmek için hızlı bir google aramasına gidin.
  • Yararlı bulacağınızı düşündüğünüz komutları yazın ve bu listeyi kodunuzu yazarken görebileceğiniz bir yerde tutun. Bir şeyin yazdırılmasına karşı çıkıyorum ve bunun yerine, bir seferde yalnızca birkaç komut için post it notlarını kullanmaya teşvik ediyorum.
  • Mümkünse, diğer programcıların vim'i kullandıklarını izleyin ve ilginç bir şey yaparken gördüklerinde hangi komutları kullandıklarını sorun.

Bu ipuçlarının yanı sıra, anlamanız gereken bazı temel kavramlar var.

  • vim, aynı işlevi temsil etmek için aynı karakteri kullanacaktır. Örneğin, bir karakter kullanımından sonra bir satırı silmek için d$. Belirli bir karakter kullanımından sonra bir satırı vurgulamak için v$. Bu nedenle $, imlecinizin şu anda bulunduğu yerden satırın sonuna kadar bir şeyler yapacağınızı gösterir.
  • ugeri alınır ve ctrl+ryinelenir.
  • bir komutun önüne bir sayı koymak onu tekrar tekrar çalıştıracaktır. 3ddimlecinizin bulunduğu satırı ve onu izleyen iki satırı silecek, benzer şekilde 3yyimlecinizin bulunduğu satırı ve onu izleyen iki satırı kopyalayacaktır.
  • tamponlar kullanmak gezinmek için anlamak :lstamponlarını listelemek için, ve :bn, :bponlara dolaşmak için.
  • bulunan öğretici okumak:help Bu muhtemelen ve kullanımı yoluyla öğreneceksiniz komutların kalanını 'ipleri öğrenmek' için en iyi yoldur.

2

Vim'i en son düzenlenen dosyayla son düzenlenen satırda açmak için.

alias vil="vim  +\"'\"0"

1

Vim ile Verimli Düzenleme'ye gidin ve başlamak için neye ihtiyacınız olduğunu öğrenin. Bu sayfadaki her şey başlamak için gerekli değildir, bu yüzden istediğinizi kiraz seçin.

Oradan, her şey için vim kullanın. "hjkl", "y" ve "p", en verimli yol olmasa bile size uzun bir yol katacaktır. Etkili bir şekilde (veya hiç) yapmanın sihirli anahtarını bilmediğiniz bir görevle karşılaştığınızda ve kendinizi birkaç kereden fazla yaparken bulduğunuzda, gidin ona bakın. Yavaş yavaş ikinci doğa haline gelecektir.

Birçok ay önce vim'i ürkütücü buldum (sonunda "m" harfi bulunmadığı zamanlarda), ancak verimli olması için sadece bir haftalık sabit kullanım sürüyordu. Hala işlerin yapılmasını sağlayan en hızlı düzenleyici buluyorum.


"Vim ile Verimli Düzenleme" bağlantısı artık yok. Robertames.com/files/vim-editing.html
Damian Powell
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.