VIM Süper Hızlı Gezinme


91

Diğer editörleri kullanırken özlediğim tek şey fareyle yerimi bulmak. Gözlerimle dosyadaki belirli bir alana ve farenin hareketiyle ve oradayım bir tıklama ile bakabiliyorum. VIM ile jjjjjkkkkkkjjjjjhhhh ... neredeyse orada hhhhh oh bok 3 karakter ile kaçırdım, lll.

İşaretler yapmayı öğreniyorum ve harika bir yer imi eklentisi buldum, işaretçiler oluşturup yok edebilirim <f3>ve maalesef dosya kapatıldığında işaretler unutulur.

Dosyaları nasıl süper geziniyorsunuz? 5j7k4j5h ve benzerlerini de yapabileceğimi biliyorum, ancak gözlerimi okuyabilen ve imleci gerçekten ihtiyacım olan yere koyan bir eklenti olmalı ..

Ayrıca belirli bir terimi aramak için /% kullanmayı öğrendim. Yardımcı olur, ancak eşleşen tüm karakterler belge boyunca vurgulanır.


Hepsi harika cevaplar, hala konu üzerindeyken nG (satıra git) f% (aradığımın ilk karakterini bul) gibi bir şey deneyebileceğimi düşündüm ya da önerdiği gibi ileri gitmek için w'yi kullan sonraki kelimeye.
Helmut Granda

Yanıtlar:


173

Deneyin $ vimtutor, başlamak için bilmeniz gereken her şeyi size öğretecektir.

hjkl buzdağının tepesinin görünen kısmı ve en azından benim durumumda çok nadiren kullanılıyor.

wWEeve BbgegEhepsi kelime kelime hareket etmeye izin verir:

  • wve eilerleyin Wve Eboşlukları ve noktalama işaretlerini hesaba katın

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bve gegeriye gidin Bve gEboşluk ve noktalama işaretlerini hesaba katın

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTBelirli bir karakter için ulaşılabilecek için kullanılan bir satır üzerinde ve ;,aynı yönde, bu hareket tekrar kullanılır ;ve karşı yön için de ,:

  • fmBir sonraki mileri atlar , Fgeri gider

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmBir sonraki mileri atlamadan ÖNCE atlar , Tgeri gider

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? mevcut imleç konumundan bir modelin ilk geçtiği yere atlamak için kullanılır:

  • /pattern ileri gider

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern geriye gider

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ satırın ilk ve son karakterine atlamak için kullanılır.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ satırın ilk ve son yazdırılabilir karakterine atlamak için kullanılır.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Tekli ve birleşik ()[]{}, tümceciğe göre veya paragrafa göre veya kod bloğuna göre kod bloğunu taşımak için kullanılır.

<C-b>ve <C-f>ekranda ileri ve geri gitmek için kullanılır.

<C-u>ve <C-d>yarım ekran ileri ve geri kaydırmak için kullanılır.

H, MVe Lsırasıyla görüntü alanının üst, orta, alt imleci.

zt, zzVe zbsırası ile, görüntü alanının üst, orta, alt imlecin altındaki hat hareket ettirin.

Ve bunun gibi.

:help motion.txt aklınızı başınızdan alacak.


17
Bunu genellikle yapmam ama bu yorum sadece size bunun harika bir cevap olduğunu söylemek içindir!
jojo

Bazı nedenlerden dolayı, daha önce hiç H, M veya L kullanmamıştım, harika ipuçları!
Chris

Bunu eklemek ]}ve [{(2 tuş vuruşu) bir kapsamın sonuna veya başlangıcına atlamak (örneğin, tanımlayan biri{ ... }
Matthew Woo

3
Bu hala OP'nin sorusuna cevap vermiyor how to jump to a line he's seeing like using a mouse. Her zaman bahsettiğiniz tüm anahtar bağlantılarını biliyorum ve kullanıyorum. Ancak yine de büyük bir mesafeden atlarken bir fareyi işaret etmek kadar verimli değil.
Penghe Geng

evet H, M, L'yi hatırlamak kolay: Yüksek, Orta, Düşük;) @Chris
nils petersohn

25

vim'in hareket komutunun yanı sıra, EasyMotion adlı bir vim eklentisinin gezinmek için oldukça yararlı olduğunu düşünüyorum, vimperator veya pentadactyl'e aşina iseniz, EasyMotion sadece ipucu modunu vim'e geri getiriyor. işte animasyonlu bir demo ve işte video eğitimi. Umarım size yardımcı olur.


Easymotion'ın avantajı, ekranda herhangi bir yere sadece 3 tuşa basarak gidebilmenizdir.
Xavier T.

+1: EasyMotion gerçekten Vim'in hareketinin jetpack'i. (bu arada, PreciseJump da. Aslında, EasyMotion, PreciseJump'ın oğlu)
Dmitry Frank

2
EasyMotion'ın yazarı demodaki bu süper harika durum satırını nasıl elde etti?
Cyrille

1
'Süper harika durum satırı', 'Powerline' adlı bir eklentidir. Burada: vim.org/scripts/script.php?script_id=3881
DEzra

animasyonlu demo url'sini günceller misiniz lütfen? artık çalışmıyor
brauliobo

20

Vim içinde hareket etmenin milyonlarca yolu var, bu onun gerçekten güçlü alanlarından biri. Kullandığım {ve }yukarı taşımak ve bu yönde bir sonraki boş satıra aşağı bir sürü. %eşleşen bir paranteze (herhangi bir türden) gidip gelmek için kullanışlıdır. Wve Bbir "kelime" ile ileri geri hareket edin.

Bu gözden değerli olabilir etrafında Moving Vim kılavuzun bölümünde.


4
Muhtemelen ayrıca bahsetmeye değer, Ctl + U ve Ctl + D'yi sırasıyla kullanarak yukarı ve aşağı sayfalandırmaktır.
Nick

10

vim'in fare desteği var! bunu bir deneyin (.vimrc dosyanızda):

set mouse=a

not : bir ekran kullanıcısı olarak, ayrıca

set ttymouse=xterm2

bunun işe yaraması için.


4
Bilmekte fayda var, ancak yine de fareye ihtiyaç duymadan mükemmel hızlı gezinme arayışına devam edeceğim.
Helmut Granda

9

şahsen şunları kullanmayı tercih ederim:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position


5

Bunun dışında {, }, (, ), <number>cb, <number>cB, <number>cWve %, böyle gezinme teknikleri kullanın:

  • ciw, diw( ciW, diW). vb. imlecin altındaki kelimeyi hızlı bir şekilde düzenlemek / silmek için (boşluk olmayan karakterler dahil)
  • ci(, ci"( ca(, ca"), vb. parantezlerin, tırnak işaretlerinin (parantezler, tırnaklar dahil) içini hızlıca düzenlemek için. Aynısı için de geçerlidir d.
  • Bunları global olarak (dosyalar arasında) ve kalıcı olarak (arabellek kapatıldığında) ayarlamak için BÜYÜK harflerle işaretler. Örneğin, komutla (veya sütuna uymak için) kullanılabilecek mAküresel işaret oluşturacaktır .A'A`A
  • gf imleç altındaki dosyaya hızlıca gitmek için
  • f, t( F, T) karakterden önce sağdaki (sol) karaktere geçmek için ( ;tekrarlamak için kullanın ) Bunlar özellikle dve ckomutları için kullanışlıdır ( .tekrarlamak için kullanın ).
  • ^]etikete ^Tgitmek ve geri gitmek için.

Ve hareket etmenin birçok yolu :)

Daha fazla bilgi için bunu kontrol edin: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Ray kullanıcıları için çok kullanışlı bir rails-vim eklentisi var, onu da kontrol etmek isteyebilirsiniz.


3

Bu ana navigasyon komutları öğrenmek için iyi bir yerdir, vim gücü / hızı bazı eylem yani birlikte hareketin birleşiminden gelir cw-> değişim kelimesi, d10j- Ayrıca vb aşağı> 10 satırları silin bu ve bu ilginç okur bulunmaktadır.


2

Sen edebilirsiniz :set nohlsearcharama karakterlerin vurgulamayı kapatmak için.

Ben de ctag kullanarak geziniyorum.


github.com/richoH/dotfiles/blob/master/vimrc Orada başka yararlı şeyler de bulabilirsiniz.
richo

İpucu için teşekkürler, vimrc'nize bakıyordum ve notunuzu, e-posta veya belge yazarken 80 karaktere ulaştığınızda satırı vurgulamak için ayarladığınız yerde buldum. VIM'de neden bir e-posta yazarsınız? Kişisel kullanımınız için bir dokümanı anlayabiliyorum ancak bir e-postadan emin değilim.
Helmut Granda

E-postamın büyük çoğunluğunu okumak ve yazmak için mutt + vim kullanıyorum. Ayrıca vim'de çok sayıda web içeriği yazmak için tüm metin eklentisini kullanıyorum. E-postalar için kelime kaydırmayı açtım, ancak bağlantılar vb. İçin doğru biçimlendirmediysem veya iç içe geçmiş alıntılar çok uzun sürüyorsa bir hatırlatıcı olması yararlı olabilir.
richo

0

Aklımda süper hızlı gezinme olan bir eklenti yazdım, buna hareketsiz deniyor:

https://github.com/anschnapp/move-less

( h j k l-Keys) ile kaydırarak delik dosyasını rahatça aramanıza izin verir . Delik alanını kaydırırken imleç konumunuzu değiştirmezsiniz (katlama hilesine bağlı olarak). Aramanızı iptal ederseniz, tam başladığınız yerde olursunuz.

Süper hızlı gezinme için amaç, ekrandaki hedef konumu elde etmek için eklentimi kullanmak ve ardından easymotion aracılığıyla doğru konuma atlamaktır (zaten başka bir cevaptan tavsiye edilmiştir):

https://github.com/easymotion/vim-easymotion

Her iki birleştirirseniz bile atlama tarihin ilerleyişini sürebilir ve size kökeni ve basit yoluyla hedef hedef diğerine geçebilir <c-o>ve <c-i>.

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.