Làm thế nào để tôi làm lại (tức là Phục hồi hoàn tác) trong Vim?


697

Trong Vim, tôi đã hoàn tác quá nhiều. Làm thế nào để tôi hoàn tác điều này (nghĩa là làm lại)?


106
vì tôi đã thu thập được 2 phiếu gần, tôi nghĩ rằng đây là vì biên tập viên lập trình viên.
flybywire

28
Tôi đồng ý, đây là liên quan đến lập trình đó là một câu hỏi thực sự.
DigitalRoss

41
Một số người ở đây đi khắp nơi và đánh dấu mọi câu hỏi của Vim là "thuộc về SU" mặc dù cộng đồng từ lâu đã quyết định rằng Vim thuộc về SO, nó là một công cụ lập trình.
Brian Carper

@Brian: Bạn có liên kết đến tài liệu nơi đạt được sự đồng thuận này không?
quá nhiều php

12
meta.stackexchange.com/questions/20251/, nhưng tôi nhớ điều này sẽ xảy ra vào năm ngoái. Vim / Emacs là IDE. Ngoài ra, các ngôn ngữ được sử dụng trong các tệp cấu hình cho cả hai đều là ngôn ngữ kịch bản hoàn chỉnh Turing, do đó, hành động thiết lập Vim chính là lập trình để bắt đầu.
Brian Carper

Câu trả lời:


907

Ctrl+r


2
Tôi chỉ muốn ném plugin undoTree ra khỏi đó, siêu tuyệt vời cho những lần bạn dường như tự làm phiền mình với một loạt các bản undos và redos.
Jake Người bán

3
Nếu tôi đang đọc về vi, thì ngón tay của tôi chỉ tự hành động. Các lệnh vi không hoạt động trên stackoverflow. :-)
ciscogambo

2
Lưu ý cho người dùng Mac: Ctrl + r trong thiết bị đầu cuối Mac sẽ hủy hoại ngày của bạn trong vim. Không biết tổ hợp phím thích hợp trong thiết bị đầu cuối Mac để hoàn tác, nhưng chắc chắn đó KHÔNG phải là Ctrl + r!
tpartee

@tpartee Tôi chỉ sử dụng Ctrl + r trong vim trong ứng dụng Terminal của macOS - không có vấn đề gì ở đây.
Jase

3
Có lẽ @tpartee có nghĩa là Cmd + rlàm mọi thứ rối tung lên? Nó chắc chắn làm một cái gì đó kỳ lạ; nhưng Ctrl + rchỉ hoạt động tốt với tôi (Mac + tmux + vim)
lùn

133

Ngoài ra hãy kiểm tra :undolist, cung cấp nhiều đường dẫn trong lịch sử hoàn tác. Điều này rất hữu ích nếu bạn vô tình gõ một cái gì đó sau khi hoàn tác quá nhiều.


22
@amindfv: lấy số từ :undolistvà gõ :undo 178(nói) để tua lại bước 178.
Peter

Có cách nào để hiển thị chính xác những gì sẽ được hoàn tác :undolist?
csharpfolk

2
@csharpfolk Sử dụng plugin undotree ( github.com/mbbill/undotree )

54

Sử dụng :earlier/ :later. Để làm lại mọi thứ bạn chỉ cần làm

later 9999999d

(giả định rằng bạn lần đầu tiên thay đổi nội dung các tập tin tối đa là 9.999.999 ngày trước), hoặc, nếu bạn còn nhớ sự khác biệt giữa hiện tại hoàn tác nhà nước và cần một, sử dụng Nh, Nmhoặc Nstrong nhiều giờ, phút và giây tương ứng. + :later N<CR><=> Ng+:later Nfđể ghi tệp.


1
:laterđã làm việc cho tôi trong vi(không phải vim - đã tìm kiếm "vi" trên google nhưng tất cả các kết quả là cho "vim"), cảm ơn!
Luc

@Luc Hầu như ở mọi nơi bạn có vilệnh, nó là một liên kết tượng trưng đến một tệp thực thi vim hoặc một bản sao của nó. Không hoàn toàn ở khắp mọi nơi mặc dù.
ZyX

@ZyX tôi ước điều đó là sự thật. Tôi chỉ sử dụng vi sau khi bash ném a vim: command not found. Điều tiếp theo tôi làm là alias vim=vivì tôi gõ nó rất tự động, tuy nhiên nó vẫn là vi cũ. Ngoài ra, làm lại (ctrl + r) sẽ hoạt động đúng nếu vi là bí danh cho vim.
Luc

2
9999999d là 27395 năm trước. Tôi giả sử tính năng hoàn tác không được triển khai trong vi hồi đó. Bạn có thể muốn tiết kiệm cho mình một số nỗ lực gõ toàn diện và sử dụng một số hợp lý. 9999d sửa lỗi đến khoảng 27 năm, 999d đến 2,7 năm. Tôi đoán trong hầu hết các trường hợp là đủ ...
ChristophK

45

Tài liệu Vim

<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

Đầu tiên nhấn Escphím để thoát khỏi chế độ chỉnh sửa.

Sau đó,

Đối với hoàn tác , sử dụng ukhóa nhiều lần bạn muốn hoàn tác.

Để làm lại , sử dụng phím Ctrl+r


11

Tham khảo phần "hoàn tác" và "làm lại" trong tài liệu Vim .

: red [o] (Làm lại một thay đổi đã được hoàn tác) và {Count} Ctrl+ r(Làm lại {đếm} thay đổi đã hoàn tác) đều ổn.

Ngoài ra, {Count} trước đó (chuyển sang trạng thái văn bản cũ hơn {Count} lần) luôn có thể thay thế cho việc hoàn tác và làm lại.


5

CTRL+r

"R" là chữ thường.


9
Trên thực tế, điều đó không quan trọng - bảng điều khiển truyền thống không có sự phân biệt giữa ^r^R, và Vim tuân theo điều đó.
ephemient

@ephemient: đồng ý. Trong MS-DOS, bạn thậm chí không thể gõ một chữ thường ^X(nơi Xcó thể là bất kỳ chữ cái nào).
nyuszika7h

Trong Vim, Ctrl-shift-R (ctrl có chữ hoa R) là chế độ thay thế.
Paul Stelian

5

Sử dụng VsVim cho Visual Studio?

Tôi đã bắt gặp điều này khi thử nghiệm với VsVim, cung cấp các ràng buộc cho các lệnh Vim trong Visual Studio .

Tôi biết về Ctrlrchính Vim, nhưng ràng buộc cụ thể này không hoạt động trong VsVim (ít nhất là không phải trong thiết lập của tôi?).

Những gì không hoạt động tuy nhiên, là lệnh :red. Đây là một chút rắc rối hơn so với ở trên, nhưng nó vẫn ổn khi bạn thực sự cần nó.


Bị từ chối vì câu hỏi đang hỏi cụ thể về vim, không phải Visual Studio.
John Von Neumann

3
@JohnVonNeumann Điều này liên quan đến Vim, hoặc ít nhất là các ràng buộc vim, chỉ trong bối cảnh của VS. Rốt cuộc, đó là điều đưa tôi đến câu hỏi này. Việc trừng phạt ai đó vì đã thêm một chút thông tin có vẻ hơi khắc nghiệt và chưa được giải quyết vì bạn không nghĩ, ngay cả khi nó có thể mở rộng ra một chút ngoài phạm vi của OP?
Kjartan

2

Thực tế mà nói, :undolistrất khó sử dụng và việc theo dõi các thay đổi của Vim :earlier:laterthời gian chỉ có thể sử dụng được cho các bản sửa lỗi hạt.

Do đó, tôi sử dụng một trình cắm kết hợp các tính năng này để cung cấp một cây trực quan của các bản hoàn tác có thể duyệt được, được gọi là Drake Gundo.

Rõ ràng, đây là thứ chỉ được sử dụng khi bạn cần một bản sửa lỗi chi tiết hoặc bạn không chắc chắn về trạng thái chính xác của tài liệu bạn muốn quay lại. Xem: Gundo. Vẽ đồ thị cây Vim của bạn theo phong cách

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.