Bisakah saya membatalkan beberapa kali dalam nvi dan / atau vi asli?


13

Terkadang saya menggunakan sistem tanpa Vim, dan menggunakan default nvi(sistem BSD) atau yang asli vi(Arch Linux).

Ada beberapa perbedaan, tetapi gangguan terbesar adalah bahwa saya hanya dapat membatalkan operasi terakhir saya. Menekan ukerja kedua kali adalah "redo".

Apakah ada cara untuk membuatnya bekerja?

Jawaban:


16

Dari 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.

Jadi tekan u, lalu terus tekan .untuk membatalkan lagi; Jika Anda menekan ulagi, itu akan 'membalikkan' arah dan menekan .akan menjadi redo.

Saya tidak pernah tahu tentang ini sampai kemarin; dan berpikir itu entah bagaimana fitur baru, tetapi sepertinya sudah berfungsi seperti ini sejak setidaknya nvi 1,79 dari 1996 .

Ini tidak berfungsi dalam vi asli ; tempat pembatalan didokumentasikan sebagai:

   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).

Yang benar-benar cara yang rumit untuk mengatakan bahwa menekan ulagi akan mengulangi perubahan Anda.

Yang juga menurut Vim :help undo(dan mengapa saya berasumsi itu juga tidak akan berhasil nvi):

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

1

Hal yang paling dekat dengan dokumen asli viuntuk membatalkan beberapa (selain dari Uyang dapat mengembalikan beberapa perubahan dalam satu baris) adalah register bernomor, yang menampung sembilan perubahan atau penghapusan terbaru.

Jika Anda meletakkan dari register bernomor, perintah dot berikutnya akan menambah register itu ketika mengulangi perintah.

Misalnya dengan teks berikut, dengan garis kursor ditunjukkan dengan >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

perintah dd..akan menghasilkan:

  aaaa
> eeee

Jika Anda mengetik "1P, vi akan menghapus penghapusan terbaru dari register "1:

  aaaa
> dddd
  eeee

Memukul .akan memasukkan konten register terbaru berikutnya, dengan melakukan "2P, dan memukul .lagi akan memasukkan konten register "3.

Jadi, singkatnya, "P..akan mengembalikan semua teks yang Anda hapus, meninggalkan Anda dengan

  aaaa
> bbbb
  cccc
  dddd
  eeee

Tidak brilian, tapi lebih baik daripada tidak sama sekali! Lebih berguna Anda dapat menggunakannya di awal atau akhir buffer untuk dengan cepat memeriksa apa yang ada di register bernomor Anda. Maka Anda dapat dengan mudah menghapus apa yang tidak Anda butuhkan.

Ini didokumentasikan dalam vim di bawah :help redo-register.


-1

Menggunakan vi asli, tekan [n] u untuk kembali n langkah. Untuk semakin mundur selangkah demi selangkah ...

  • tekan [n] u untuk kembali n langkah
  • lalu tekan [n] u untuk mengulangi langkah
  • lalu tekan [n + 1] u untuk kembali ke langkah [n + 1]
  • dll

1
Saya memiliki sesuatu yang dekat dengan vi asli , dan sepertinya tidak kembali n langkah.
muru

Sepakat. Original Vi dapat mengembalikan hanya satu perubahan dengan u, atau mengembalikan satu baris ke bagaimana sebelum Anda mulai mengeditnya U.
Antony
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.