ฉันจะยกเลิกการเปลี่ยนแปลงที่ฉันอาจทำหรือไม่ได้ทำอย่างปลอดภัยได้อย่างไร


12

บ่อยครั้งที่ฉันทำผิดพลาดในการพิมพ์โดยเน้นหน้าต่างผิด (และทำเช่นนั้นสองสามครั้งด้วยตัวตรวจสอบสิทธิ์ USB) ในโปรแกรมที่เปิดใช้งานปุ่มลัดจำนวนมาก (Gmail, VLC, Vim) สิ่งนี้มักจะเกิดขึ้นโดยไม่ได้ตั้งใจจากการแก้ไขที่ไม่ต้องการ

บางครั้งฉันสามารถติดตามขั้นตอนของฉันและจดจำสิ่งที่ฉันพิมพ์เพื่อซ่อมแซมการเปลี่ยนแปลงหรือคืนค่าการตั้งค่าใด ๆ ที่ฉัน tweaked ถ้าฉันจับตัวเองก่อน น่าเสียดายที่มันไม่ได้เป็นอย่างนั้นเสมอไป

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


1
คุณกำลังมองหาการกระทำ "ย้อนกลับ"? :e!จะทำอย่างนั้น
แจสเปอร์

1
ฉันคิดว่า:e!จะไม่ดีถ้าคุณไม่ได้บันทึกตั้งแต่สถานะถูกต้องล่าสุดและuอาจไม่เพียงพอหากคุณพิมพ์สิ่งต่าง ๆ (หากคุณพิมพ์date monthเช่นนั้นคุณจะต้องลบแท็กตั้งเครื่องหมายและทำการค้นหาซึ่งจะค่อนข้างสับสนในการยกเลิกการทำผ่านu)
wchargin

1
@WChargin ไม่ได้พูดเกี่ยวกับการuเป็นส่วนหนึ่งของซีเควนซ์ดำเนินการเลิกทำบางอย่างที่อยู่ตรงกลาง
yo '

คำตอบ:


14

วิงวอน

:undolist

เพื่อดูว่าเมื่อคุณทำการเปลี่ยนแปลงชุดล่าสุด ถ้ามันบอกว่ามีการเปลี่ยนแปลงบางอย่างเช่น "3 วินาทีก่อน" และคุณรู้ว่าคุณเปลี่ยนมันโดยเจตนาเท่านั้นพูดเมื่อนาทีที่แล้วจากนั้นก็ดำเนินการ

:earlier 10s

เพื่อเปลี่ยนกลับเป็นสถานะที่ต้องการ มิฉะนั้นหากไม่มีการเปลี่ยนแปลงล่าสุดคุณไม่ต้องทำอะไรเลย


อ้างอิงเพิ่มเติม: :help undo-tree .


4

หากต้องการใช้คำถามใหม่อีกครั้งคุณกำลังมองหาวิธีดูหรือรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงที่คุณทำกับไฟล์จากนั้นใช้คุณลักษณะเลิกทำ อาจมีวิธีอื่นหรือแม้กระทั่งปลั๊กอินที่สนับสนุนสิ่งนี้ แต่ฉันจะอธิบายสิ่งที่ฉันใช้เพื่อจุดประสงค์เดียวกัน

คุณรวมคุณสมบัติ vim ที่มีอยู่เพื่อทำให้เสร็จ ตัวอย่างเช่นคุณสามารถกำหนดฟังก์ชั่นเช่น:

" Function: View changes after the last save
function! s:DiffSinceSave()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  exe "normal! ]c"
endfunction
com! DiffSaved call s:DiffSinceSave()

จากนั้นคุณสามารถเรียกได้ในภายหลังและแมปปุ่มทางลัด

" Map key to function: View changes after the last save
nnoremap <leader>? :DiffSaved<CR>

จะเป็นการเปิดมุมมอง diff ที่อิงกับหน้าต่างซึ่งจะแสดงการเปลี่ยนแปลงที่คุณทำนับตั้งแต่การบันทึกครั้งล่าสุด หลังจากคุณระบุการเปลี่ยนแปลงที่ทำแล้วคุณสามารถออกจากมุมมองนั้นและใช้คุณสมบัติ vim อื่น ๆ เช่นเลิกทำและเลิกทำแผนผังเป็นต้นหรือแม้แต่ปลั๊กอินเพื่อเปลี่ยนกลับเป็นสถานะก่อนหน้า

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

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


3

มันดูเหมือนว่าฉันคำตอบที่ง่ายในการนี้คือการกดจนกว่าคุณจะยกเลิกการเปลี่ยนแปลงที่คุณต้องการที่จะเก็บจากนั้นกดuCtrl-R


0

เช่นเดียวกับ @superjer ฉันกดuไปเรื่อย ๆ จนกระทั่ง[+]เครื่องหมายสีแดงในสถานะของฉันหายไป

set statusline=%f\ %#Error#%m%##

มันอาจจะดีถ้ามีกุญแจในการยกเลิกโดยอัตโนมัติกลับสู่สถานะที่ไม่ได้แก้ไขล่าสุด แต่:e!ก็เป็นทางออกที่ดีเช่นกัน Vim วันนี้จะทำการเปลี่ยนแปลง "ยกเลิก" ของคุณในประวัติการเลิกทำ
joeytwiddle

5
:earlier 1fคำสั่งที่ 1fหมายถึง "1 ก่อนหน้านี้สถานะที่บันทึกไว้" ดังนั้นจึงจะกลับไปครั้งก่อนหน้านี้ที่คุณบันทึกไฟล์ หากมีการแก้ไขบัฟเฟอร์แล้วจะยกเลิกการแก้ไขทั้งหมด หากบัฟเฟอร์ไม่ได้รับการแก้ไข (เช่นปัจจุบันอยู่ในสถานะบันทึก) จากนั้นจะไปยังครั้งก่อนหน้าที่คุณบันทึกไฟล์
jamessan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.