Tôi có thể hoàn tác nhiều lần trong nvi và / hoặc vi gốc không?


13

Đôi khi, tôi đang sử dụng hệ thống không có Vim và sử dụng mặc định nvi(hệ thống BSD) hoặc bản gốc vi(Arch Linux).

Có khá nhiều sự khác biệt, nhưng không ít phiền toái lớn nhất là tôi có thể hoàn tác chỉ hoạt động cuối cùng của tôi. Nhấn ulần thứ hai làm việc là một "làm lại".

Có một số cách để làm việc này?

Câu trả lời:


16

Từ nvi(1):

 u       Undo the last change made to the file.  If repeated, the u command
         alternates between these two states.  The . command, when used
         immediately after u, causes the change log to be rolled forward or
         backward, depending on the action of the u command.

Vì vậy, nhấn u, và sau đó tiếp tục nhấn .để hoàn tác nhiều hơn; Nếu bạn nhấn ulại, nó sẽ 'đảo ngược' và nhấn .sẽ là làm lại.

Tôi chưa bao giờ biết về điều này cho đến ngày hôm qua; và nghĩ rằng đó là một tính năng mới, nhưng có vẻ như nó đã hoạt động như thế này kể từ ít nhất là 1,79 từ năm 1996 .

Điều này không hoạt động trong vi ban đầu ; trong đó hoàn tác được ghi lại là:

   u      Undoes the last change made to the current buffer.  If repeated,
          will alternate  between  these  two  states,  thus  is  its  own
          inverse.  When  used after an insert which inserted text on more
          than one line, the lines are saved in the numeric named  buffers
          (3.5).

Đó thực sự là một cách phức tạp để nói rằng nhấn umột lần nữa sẽ làm lại những thay đổi của bạn.

Đó cũng là những gì Vim :help undonói (và tại sao tôi cho rằng nó cũng sẽ không hoạt động nvi):

 u                       Undo [count] changes.  {Vi: only one level}

1

Điều gần nhất mà bản gốc viphải thực hiện nhiều lần hoàn tác (ngoài ra Ucó thể hoàn nguyên nhiều thay đổi trong một dòng) là các thanh ghi được đánh số, giữ chín thay đổi hoặc xóa gần đây nhất.

Nếu bạn đặt từ một thanh ghi được đánh số, các lệnh chấm tiếp theo sẽ tăng thanh ghi đó khi nó lặp lại lệnh.

Ví dụ: với văn bản sau, với dòng con trỏ được chỉ báo bằng >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

lệnh dd..sẽ dẫn đến:

  aaaa
> eeee

Nếu bạn gõ "1P, vi sẽ đặt phần xóa gần đây nhất từ ​​thanh ghi "1:

  aaaa
> dddd
  eeee

Đánh .sẽ đặt nội dung của thanh ghi gần đây nhất tiếp theo, bằng cách thực hiện "2Pvà nhấn .lại sẽ đặt nội dung của thanh ghi "3.

Vì vậy, trong ngắn hạn, "P..sẽ đặt lại tất cả văn bản bạn đã xóa, để lại cho bạn

  aaaa
> bbbb
  cccc
  dddd
  eeee

Không rực rỡ, nhưng tốt hơn là không có gì! Hữu ích hơn, bạn có thể sử dụng nó ở đầu hoặc cuối bộ đệm để nhanh chóng kiểm tra những gì trong sổ đăng ký được đánh số của bạn. Sau đó, bạn có thể dễ dàng xóa những gì bạn không cần.

Nó được ghi lại trong vim dưới :help redo-register.


-1

Sử dụng vi ban đầu, nhấn [n] u để quay lại n bước. Để dần dần quay lại từng bước ...

  • nhấn [n] u để quay lại n bước
  • sau đó nhấn [n] u để làm lại n bước
  • sau đó nhấn [n + 1] u để quay lại các bước [n + 1]
  • Vân vân

1
Tôi có một cái gì đó gần với vi ban đầu và dường như nó không quay trở lại n bước.
muru

Đã đồng ý. Vi ban đầu chỉ có thể hoàn nguyên một thay đổi duy nhất với uhoặc khôi phục một dòng duy nhất trước khi bạn bắt đầu chỉnh sửa nó U.
Antony
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.