ฉันสามารถยกเลิกหลาย ๆ ครั้งใน nvi และ / หรือ vi เดิมได้หรือไม่


13

บางครั้งฉันอยู่ในระบบที่ไม่มี Vim และใช้ค่าเริ่มต้นnvi(ระบบ BSD) หรือดั้งเดิมvi(Arch Linux)

ค่อนข้างมีความแตกต่างน้อยมี แต่แกล้งใหญ่ที่สุดคือว่าผมสามารถยกเลิก เฉพาะการดำเนินงานที่ผ่านมาของฉัน การกดuครั้งที่สองทำงานเป็น "ทำซ้ำ"

มีวิธีการทำงานนี้หรือไม่?

คำตอบ:


16

จาก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.

ดังนั้นกดuแล้ว.ยกเลิกต่อไปเรื่อย ๆ หากคุณกดuอีกครั้งมันจะกลับทิศทางและการกด.จะเป็นการทำซ้ำ

ฉันไม่เคยรู้เรื่องนี้มาก่อนจนกระทั่งเมื่อวานนี้ และคิดว่ามันเป็นอย่างใดคุณลักษณะใหม่ แต่ดูเหมือนว่าจะมีการทำงานเช่นนี้อย่างน้อยตั้งแต่ NVI 1.79 จาก 1996

นี้ไม่ได้ทำงานในvi เดิม ; ที่เลิกทำมีการบันทึกไว้เป็น:

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

ซึ่งเป็นวิธีที่ซับซ้อนในการบอกว่าการกดuอีกครั้งจะทำซ้ำการเปลี่ยนแปลงของคุณ

ซึ่งเป็นสิ่งที่ Vim :help undoพูด (และทำไมฉันจึงสันนิษฐานว่ามันไม่ทำงานด้วยnvi):

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

1

สิ่งที่ใกล้เคียงที่สุดที่ต้นฉบับviจะต้องเลิกทำหลายครั้ง (นอกเหนือจากUที่สามารถย้อนกลับการเปลี่ยนแปลงหลายอย่างภายในบรรทัดเดียว) คือการลงทะเบียนหมายเลขซึ่งเก็บการเปลี่ยนแปลงหรือการลบล่าสุดเก้าครั้ง

หากคุณใส่จากการลงทะเบียนที่มีหมายเลขคำสั่ง dot ที่ตามมาจะเพิ่มขึ้นที่การลงทะเบียนเมื่อมันซ้ำคำสั่ง

เช่นกับข้อความต่อไปนี้กับสายเคอร์เซอร์แสดงด้วย>,

  aaaa
> bbbb
  cccc
  dddd
  eeee

คำสั่งdd..จะส่งผลให้:

  aaaa
> eeee

หากคุณพิมพ์แล้ว"1Pvi จะทำการลบล่าสุดจากการลงทะเบียน"1:

  aaaa
> dddd
  eeee

กดปุ่ม.จะใส่เนื้อหาของการลงทะเบียนต่อไปล่าสุดโดยการทำ"2Pและการกดปุ่มอีกครั้งจะนำเนื้อหาของการลงทะเบียน."3

ดังนั้นในระยะสั้น"P..จะนำข้อความที่คุณลบทิ้งไปทิ้งไว้ด้วย

  aaaa
> bbbb
  cccc
  dddd
  eeee

ไม่สดใส แต่ก็ดีกว่าไม่มีอะไรเลย! มีประโยชน์มากขึ้นคุณสามารถใช้ที่จุดเริ่มต้นหรือจุดสิ้นสุดของบัฟเฟอร์เพื่อตรวจสอบสิ่งที่อยู่ในการลงทะเบียนหมายเลขของคุณอย่างรวดเร็ว จากนั้นคุณสามารถลบสิ่งที่คุณไม่ต้องการได้อย่างง่ายดาย

:help redo-registerเป็นเอกสารในภายใต้กลุ่ม


-1

ใช้ vi ต้นฉบับกด [n] u เพื่อย้อนกลับขั้นตอนที่ n หากต้องการย้อนกลับไปทีละขั้นตอน ...

  • กดปุ่ม [n] คุณเพื่อย้อนกลับไปขั้นตอน
  • จากนั้นกด [n] u เพื่อทำซ้ำขั้นตอน
  • จากนั้นกด [n + 1] u เพื่อย้อนกลับ [n + 1] ขั้นตอน
  • ฯลฯ

1
ฉันมีบางสิ่งบางอย่างใกล้เคียงกับ vi ต้นฉบับและดูเหมือนจะไม่ย้อนกลับไปอีกก้าว
muru

ตกลง ต้นฉบับ Vi สามารถเปลี่ยนเพียงการเปลี่ยนแปลงเดียวกับหรือเรียกคืนบรรทัดเดียวกับวิธีการที่มันเป็นก่อนที่คุณจะเริ่มต้นการแก้ไขด้วยu U
แอนโทนี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.