Vim'de nasıl yeniden yapabilirim (yani “geri al”)?


697

Vim'de çok fazla geri aldım. Bunu nasıl geri alabilirim (yani, yinele)?


106
zaten 2 yakın oy topladığım için, vim bir programcının editörü olduğu için buraya ait olduğunu düşünüyorum.
flybywire

28
Katılıyorum, bu programlama ile ilgili ve gerçek bir soru.
DigitalRoss

41
Buralarda birileri etrafta dolaşıyor ve toplumun uzun zaman önce Vim'in SO'ya ait olduğuna karar vermesine rağmen, bir programlama aracı olan her Vim sorusunu "SU'ya ait" olarak işaretliyor.
Brian Carper

@Brian: Bu fikir birliğine varılan belgeye bir bağlantınız var mı?
Çok fazla php

12
meta.stackexchange.com/questions/20251/… ama geçen sene bir ara geldiğini hatırlıyorum. Vim / Emac'ler IDE'lerdir. Ayrıca, yapılandırma dosyalarında her ikisi için de kullanılan diller Turing-komple komut dilidir, bu nedenle Vim'i kurma eylemi başlangıçta programlamadır.
Brian Carper

Yanıtlar:


907

Ctrl+r


2
Ben sadece undoTree eklentisini dışarı atmak istiyorum, görünüşte bir geri alma ve redos telaşıyla kendinizi vidaladığınız zamanlar için harika.
Jake Sellers

3
Eğer vi hakkında okuyorsam, o zaman parmaklarım kendi başlarına hareket ederler. Vi komutları yığın akışı üzerinde çalışmaz. :-)
ciscogambo

2
Mac kullanıcıları için not: Bir Mac terminalindeki Ctrl + r, vim'de gününüzü mahveder. Geri almak için Mac terminalinde uygun tuş kombinasyonunu bilmiyorum, ama kesinlikle Ctrl + r DEĞİL!
tpartee

@tpartee Sadece macOS Terminal uygulaması altında vim Ctrl + r kullandım - burada sorun yok.
Jase

3
Belki @parparte Cmd + rişleri mahvetmek demekti ? Kesinlikle garip bir şey yapıyor; ama Ctrl + rsadece benim için iyi çalıştı (Mac + tmux + vim)
dwanderson

133

Ayrıca :undolist, geri alma geçmişi boyunca birden fazla yol sunan göz atın. Çok fazla geri aldıktan sonra yanlışlıkla bir şey yazarsanız bu yararlıdır.


22
@ amindfv: 178 numaralı adıma geri almak için numarayı alın :undolistve yazın :undo 178(deyin).
Peter

Tam olarak neyin geri alınacağını göstermenin bir yolu var :undolistmı?
csharpfolk

2
@csharpfolk Undotree eklentisini kullanın ( github.com/mbbill/undotree )

54

:earlier/ Kullanın :later. Yapmanız gereken her şeyi yeniden yapmak için

later 9999999d

Geçerli geri alma durumu ve gerekli bir kullanım arasındaki farkı hatırlarsan, (önce 9999999 gün önce en fazla dosyayı düzenleyen varsayarak) ya Nh, Nmya Nssaat, dakika ve saniye sırasıyla. + :later N<CR><=> Ng+ve :later Nfdosya yazma işlemleri için.


1
:laterbenim için çalıştı vi(vim değil - Google'da "vi" arandı, ancak tüm sonuçlar "vim" içindir), teşekkürler!
Luc

@Luc Komuta sahip olduğunuz hemen hemen her yerde vibir vim yürütülebilir dosyası veya bir kopyası için bir sembolik bağlantıdır. Tamamen her yerde olmasa da.
ZyX

@ZyX Keşke bu doğruydu. Vi'yı sadece bash atar a vim: command not found. Yaptığım bir sonraki şey, alias vim=vibunu otomatik olarak yazdığım için, ancak yine de düz eski vi. Ayrıca, vo için bir takma ad olsaydı, yinele (ctrl + r) düzgün çalışırdı.
Luc

2
9999999d 27395 yıl önce. Geri alma özelliğinin vi'de o zamana kadar uygulanmadığını varsayalım. Kendinize kapsamlı bir yazma çabası kaydetmek ve makul bir sayı kullanmak isteyebilirsiniz. 9999d, yaklaşık 27 yıl, 999d ila 2.7 yıl arasındadır. Sanırım çoğu durumda bu yeterli ...
ChristophK

45

Vim belgeleri

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}


14

Önce Escdüzenleme modundan çıkmak için tuşuna basın .

Sonra,

İçin geri alma , kullanım uanahtar defalarca gibi geri almak istiyor.

İçin kokan , kullanım Ctrl+ rtuşu


11

Bakınız "Geri alma" ve Vim belgenin "redo" parçası .

: red [o] (Geri alınan bir değişikliği yeniden yap) ve {count} Ctrl+ r(geri alınan değişiklikleri [tekrarla {count}) her ikisi de uygundur.

Ayrıca : before {count} (eski metin durumuna {count} kez git) her zaman geri alma ve yineleme işlemlerinin yerine geçebilir.


5

CTRL+r

"R" küçük harftir.


9
Aslında önemli değil - geleneksel konsollar ile ^rve arasında bir ayrım yoktur ^Rve Vim bunu takip eder.
ephemient

@ephemient: kabul etti. MS-DOS'ta küçük harf bile yazamazsınız ^X(burada Xherhangi bir harf olabilir).
nyuszika7h

Vim'de, Ctrl-shift-R (büyük R harfli ctrl) değiştirme modudur.
Paul Stelian

5

Visual Studio için VsVim mi kullanıyorsunuz?

Visual Studio'da Vim komutları için bağlamalar sağlayan VsVim ile deneme yaparken buna rastladım .

CtrlrVim kendisi hakkında biliyorum , ama bu özel bağlama VsVim (en azından benim kurulum?) Çalışmıyor.

Ne yapar ancak işi, komut :red. Bu, yukarıdakilerden biraz daha fazla güçlük, ancak gerçekten ihtiyacınız olduğunda hala iyi.


Soru Visual Studio değil, özellikle vim hakkında sorduğu için indirildi.
John Von Neumann

3
@JohnVonNeumann Bu olup en vim bağları de sadece VS bağlamında, um ile ilişkili ya da Ne de olsa beni bu soruya getiren şey bu. Biraz daha fazla bilgi eklemek için birini cezalandırmak biraz sert ve saygısız görünüyor, belki de OP'nin kapsamının biraz ötesinde genişlese bile düşünmüyor musunuz?
Kjartan

2

Pratik olarak, :undolistkullanımı zordur ve Vim'lerin :earlierve :laterdeğişikliklerin zaman takibi sadece rota-tahıl düzeltmeleri için kullanılabilir.

Bu göz önüne alındığında, “Gundo” adı verilen göz atılabilir bir geri alma ağacı sağlamak için bu özellikleri birleştiren bir eklentiye başvuruyorum.

Açıkçası, bu sadece ince taneli bir düzeltmeye ihtiyacınız olduğunda veya geri dönmek istediğiniz belgenin tam durumundan emin değilseniz kullanacağınız bir şeydir. Bakınız: Gündoğan. Vim undo ağacınızı şık bir şekilde çizin

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.