Son düzenlememin konumuna nasıl atlarım?


68

Sık sık büyük bir dosyanın ortasındaki değişiklikleri yapıyorum, bir ggşeyi kontrol etmek için en üste atlamak için kullanıyorum ve sonra düzenlemekte olduğum bir yere işaret koymayı unuttuğumu fark ediyorum. Son değiştirilen çizginin konumuna atlamanın yerleşik bir yolu var mı?

Yanıtlar:


84

`.Komut son değişim getirecektir.

`Bir işaretine gider ve .otomatik son değişikliğin yapıldığı pozisyona ayarlanmış bir "özel" işaretidir. Daha :help `.fazla bilgi için bakınız .

``Son atlayışınızı yapmadan önce sizi imlecin bulunduğu yere geri getirecek olan da var . Bkz :`` daha fazla bilgi için yardım .

Bir başka yararlı işaret `^; Bu, imlecin ekleme modu durdurulduğunda en son kez olduğu konumdur. Bakın :help `^.

Bkz :help mark-motions(otomatik olarak ayarlanır diğer bazı "özel" işaretleri dahil) işaretlerini kullanma hakkında biraz daha genel bilgi için.


7
Değişiklik listesindeki konumlar arasında geçiş yapmak için g;ve g,tuşlarını da kullanabilirsiniz . Bkz :h g;ve:h g,
Peter Rincker

3
Ayrıca (backtick) 'yerine (kesme) kullanabilirsiniz `.
Sparhawk

21

İşte size verilen senaryoya uyan başka bir yaklaşım, ve hemen öncekinden atlayacağınız yere gg(son değiştirilen satıra değil) atlayacaktır .

kullanım CtrlO

Tuşuna bastığınızda gg, eski imleç konumunuz atlama listesine basılır . Kimden :help jumplist:

Sıçramalar bir atlama listesinde hatırlanır. CTRL-OVe CTRL-I komutu ile daha yaşlı atlamalardan önce imleç konumlarına gidebilir ve tekrar geri dönebilirsiniz. Böylece listede aşağı ve yukarı hareket edebilirsiniz. Her pencere için ayrı bir atlama listesi var. Maksimum giriş sayısı 100 olarak belirlenir.

[...]

Bir atlama komutu kullanırsanız, geçerli satır numarası atlama listesinin sonuna eklenir. Aynı satır zaten atlama listesinde ise, kaldırılır. Sonuç olarak, tekrarlarken CTRL-Osadece bir kez eski konumlara dönersiniz.

Bu, +jumplistözellik ile Vim (vi değil) kullanmanızı gerektirir . Eğer :echo has('jumplist')baskılar 1, o zaman bunu kullanabilirsiniz.


19

Dnetserr'ın cevabına ve Peter Rincker'in yorumuna eklemek için Vim, değişikliklerin bir listesini tutar ve bununla ilgili bazı komutlar vardır.

:changes

değişiklikleri nerede listeleyeceklerini ve nerede olduklarını göstereceklerdir. Örneğin:

change line  col text
    2     8   17 #include <stdio.h>
    1     3    0 #include "stm32f407.auto.h"
>

>Değişiklik yığınında olduğunuz şovların bulunduğu satır , jump list ( :jumps) veya tag stack ( :tags) gibi. Ayrıca atlama listesi ve etiket yığını gibi, bu listeyi de geçebilirsiniz.

Normal modda, hareketler vardır g;bir önceki değişiklik konuma gitmek ve g,bir sonrakine gitmek için. Ayrıca, değişiklikten önceki g;veya g,listeden bu değişime gitmek için yapılan değişikliği de yazabilirsiniz . Yukarıda, 2g;beni stdio.h içeren değişimin gerçekleştiği yere götürür.

Yığın ortasındayken :changes, göreceli mesafeleri göstermek için güncellemelerdeki sayılar . Örneğin:

change line  col text
    1     8   17 #include <stdio.h>
>   0     3    0 #include "stm32f407.auto.h"
    1    10    4 other

Bu geri birini (gidebilir gösterir 1g;ya da sadece g;) veya ileri bir ( 1g,ya da sadece g,).

Bu, elde etmek istediğiniz değişiklik aslında birkaç değişiklik önce gerçekleştiyse, bu harika

Bunun dezavantajı normal bir hareket gibi görünmemesidir. Örneğin, yapamaz dg;ise, önceki değişim konumuna imlecin silmek d'.ve d'^hareketleri olarak işi yapmak.


15

g; önceden düzenlenmiş satıra gidecektir.


3
Daha yeni bir düzenleme konumuna gitmek için g ((virgül)) de kullanabilirsiniz.
James,

5

Vi'deki geri alma komutu, son komut geri alındığında bir yeniden yapma işlevi göreceğinden, en uuson düzenlediğim yere geri dönmek için bir araç olarak kullandım .

nocompatibleSet ile Vim kullanıyorsanız (çoğu insanın yaptığı gibi), geri almak ve geri almak için uardından kullanmak istersiniz CTRL+R. Aksi takdirde uuVi.


Bu eğer :set nocompatiblekullanılmaz.
muru

2
Benim vim(ile nocompatible) ile iki undos yapar uu, ama ben kullanmak uve CTRL+raynı etki için.
Shahbaz

Bu cevabın, Aix / HPUX / Solaris / diğer Unix çeşitlerinde hünerli olmamanız durumunda, vi ile de çalışması avantajlıdır.
Guntram Blohm,
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.