Vim: İmleci son konumuna getir


252

(G) Vim'de imleci önceki konumuna getirmek (normal moddayken) mümkün müdür? Önceki imleç konumları listesinde ileri geri dönecek bir şey ideal olacaktır. Ama aynı zamanda sadece son konuma geçmek yeterli olacaktır ( cd -dizinlerle bash gibi bir şey ).

İşte küçük bir gösteri:

line |1| <- cursor position
line 2
line 3
line 4

Ve varsayalım 2j, şimdi şöyle:

line 1
line 2
line |3| <- cursor position
line 4

Şimdi 2kilk pozisyona ve muhtemelen önceki pozisyonlara geri dönmek için bir şeye basmak istiyorum .

Yanıtlar:


410

En hızlı yol şunlardan birini vurmaktır:

''

(iki kesme işareti) veya:

``

(iki geri tepme). Aradaki farkın, backtick'in çizgi üzerinde aynı yere gitmesi ve kesme işaretinin çizginin başına gitmesidir. İngiltere klavyesinde kesme işareti daha erişilebilir, bu yüzden bunu kullanma eğilimindeyim. Bunun gibi birçok yararlı işaret var, bakın :help mark-motions.

Diğer bazı hareketler için ( 2jsanmıyorum), bir dizi hareket arasında ileri geri gezinmenizi sağlayan atlama listesi de var. CtrlOve CtrlIbu gezinmeyi yapın, ancak :help jump-motionsdaha fazla bilgi için bkz .


3
aslında bunların hiçbiri beklediğim gibi davranmıyor ama sanırım başka bir şey yok.
Idan K

1
@Idan K - `` (çift backtick) size tam olarak ne istediğinizi vermiyor? ("Tarih" yönü hariç).
Dan

3
@Dan: Yukarıdaki örnekte denersem bu davranışı görüyorum: 1. satırda duruyorum, sonra jüst üste iki kez basıyorum (şimdi 3. satırdayım) sonra çift backtick'e basmak bana satır 1'e ulaşıyor ve bekliyorum 2. satıra geçmek için
Idan K

2
Sanırım taşımak zorunda (2j ya da bir şey), sonra düzenlemek (ya da metni değiştirmek için herhangi bir eylem yapmak) sonra bir önceki konuma geri gitmek için '' kullanın. "2j" yi kullanmak mantıklı değil, hiçbir şey yapmamak ve önceki pozisyona geri dönmek mantıklı değil
Asenar

8
@IdanK Atlama listesi yalnızca gerçek bir "atlama" kullandığınızda güncellenir (yani önceki imleç konumu kaydedilir), yani (sanırım) hareketler dışında herhangi bir hareket komutu i j k l. (Yardım belgelerinden tam liste "'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file.) Hayır, bu "geri almaz" 2jveya benzeri olmaz, ancak hemen hemen her şey için işe yarayacaktır. Bu mantıklı çünkü 2jet al. zaten basit inversiyonlara ( 2kvb.) sahipken, diğerleri yoktur.
Kyle Strand

61

Önceki düzenleme konumlarınız listesinde ileri ve geri gitmek için g;ve g,tuşlarını da kullanabilirsiniz .

ABD Dışı Klavyelerde

İsviçre ve Almanca klavye düzenlerimde, ;uygunsuz bir şekilde yazmak için Shifttuşun kullanılması gerekir . Bundan ötürü, tanımlanan g-için daha uygun diğer adı olarak g;içinde $MYVIMRC:

" Map g- as an alias for g;
nnoremap g- g;

Bunu çok sevdiğim halde, sadece bir dosyadaki değişiklikler arasında atlayacak. Buffer 1'i düzenlerseniz, buffer 2'yi düzenlerseniz, buffer 1'e geri atlamaz
thouliha

39

Neden kimse DrAl'ın cevabındaki sorunu çözemedi ? Bu yazının orijinal sorununu çözmez ''veya ``çözmez! Bu iki komut 2jen azından benim için bir imleç hareketi için işe yaramayacak . Yeni başlayanlar için vim daha karışık hale getirecek.

Davranışı ''ya ``ve CtrlIya CtrlOatlama listesinde dayanmaktadır. 2jBu yüzden bu komut olmaz iş için atlama listesine pozisyon değişiklikleri kaydetmek olmaz 2j.

''veya ``son konum ile mevcut konum arasında geçiş yapabilirsiniz. CtrlIve CtrlOatlama listesi geçmişinde çalışın.

g;ve g,aynı zamanda çok sık kullanılan düzenleme konumlarında gezinmek.


1
Bunu işaret ettiğiniz için teşekkürler! Acaba, böyle durumlar için ne işe 2jyarar?

33

Doğrudan yardım (: yardım atlama):

: ju [mps] Atlama listesini yazdır (bir hareket komutu değil). {Vi içinde değil} {| atlama listesi | özellik}

                          *jumplist*

Atlamalar bir atlama listesinde hatırlanır. CTRL-O ve CTRL-I komutuyla eski atlamalardan önce imleç konumlarına gidebilir ve tekrar geri dönebilirsiniz. Böylece listede yukarı ve aşağı hareket edebilirsiniz. Her pencere için ayrı bir atlama listesi vardır. Maksimum giriş sayısı 100 olarak sabitlenmiştir. {| | Atlama listesi | özellik}

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.