แก้ไขข้อผิดพลาดการสะกดอัตโนมัติ


19

ฉันเปิดใช้งานการตรวจการสะกดด้วย

:set spell spelllang=en_us

ตอนนี้ฉันสามารถแก้ไขการสะกดคำด้วยการพิมพ์1z=(นั่นคือเลือก1การแก้ไขตัวสะกดเซนต์z=) ( )

ฉันจะทำให้คำนี้ทำงานโดยอัตโนมัติกับคำก่อนหน้าเมื่อใดก็ตามที่ฉันพิมพ์เว้นวรรคโดยไม่มีความล่าช้าใด ๆ นอกจากนี้ยังพยายามที่จะคำว่า "แก้ไข" ที่สะกดถูกต้องแล้ว (ซึ่งเป็นเหตุผลที่ฉันไม่สามารถทำสิ่งที่ชอบinoremap <space> <esc>mmb1z=`ma<space>) ดังนั้นฉันเพียงต้องการที่จะแก้ไขทุกคำที่ฉันประเภทถ้ามันสะกดผิด

มีวิธีการแก้ไขคำที่สะกดผิดใน Vim โดยอัตโนมัติหรือไม่?



1
@ArturoVolpe ดูเหมือนว่าคำตอบที่ถูกต้องสำหรับคำถาม
bsmith89

คุณสามารถรวมข้อผิดพลาดก่อนหน้า '[s' ในการแมปใหม่ได้หรือไม่? ฉันจะเพิ่มเป็นคำตอบ แต่ไม่ทราบวิธีการทำการแมปดังนั้นฉันจะปล่อยให้คนอื่น
Nick J Adams

คำตอบ:


8

ฉันขอแนะนำให้แก้ไขโดยอัตโนมัติทุกคำที่มีการทำเครื่องหมายผิดด้วยเหตุผลสองประการ

  • ก่อนอื่นคุณจะได้รับผลบวกผิด ๆ มากมายในสิ่งที่คุณต้องการพิมพ์โดยเฉพาะอย่างยิ่งในการเขียนเชิงเทคนิค แน่นอนคุณสามารถ (และบางทีควร) เพิ่มทั้งสองพจนานุกรมของคุณเพื่อให้พวกเขาได้รับการยอมรับและแนะนำ แต่ถ้าคุณทำไม่ได้แจ้งให้ทราบว่าพวกเขากำลัง autocorrected พวกเขาอาจลื่นผ่านไปเป็นรุ่นสุดท้ายของเอกสารหรือแย่ลงถ้าคุณเขียนโค้ดกำลังหรือการตั้งค่าไฟล์ (เช่นการเปลี่ยนxminไปminจะทำให้ดูกราฟโดยสิ้นเชิง ไม่ถูกต้อง). ความคิดเห็นอาจกลายเป็นเรื่องแปลก (เช่นฉันได้เปลี่ยนคำสั่ง "ป้ายกำกับและคำสั่งเป็นโมฆะ" เป็น "ป้ายกำกับและคำสั่งลบล้าง" ซึ่งเปลี่ยนความหมาย (a) จากวลีคำนามเป็นคำสั่งและ (b) หมายถึงบางสิ่งที่แตกต่างอย่างสิ้นเชิง )
  • ข้อที่สองการแก้ไขอัตโนมัติไม่ดีพอสำหรับคำสั้น ๆ จากประสบการณ์ของฉันมันมีแนวโน้มที่จะทำตามคำที่ใกล้เคียงที่สุดซึ่งด้วยเช่นคำสามตัวอักษรอาจแตกต่างอย่างสิ้นเชิงกับสิ่งที่คุณหมายถึง ถ้าคุณหมายถึงการพิมพ์ของแต่บังเอิญพิมพ์สำหรับมันจะได้รับการแก้ไขเพื่อไม่กี่ -Not สิ่งที่คุณต้องการ! อีกครั้งเหล่านี้อาจเป็นเรื่องยากที่จะจับในการแก้ไขคร่าวๆ

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

ฉันใช้การแม็พต่อไปนี้เพื่อทำสิ่งนี้:

" Go back to last misspelled word and pick first suggestion.
inoremap <C-L> <C-G>u<Esc>[s1z=`]a<C-G>u

" Select last misspelled word (typing will edit).
nnoremap <C-K> <Esc>[sve<C-G>
inoremap <C-K> <Esc>[sve<C-G>
snoremap <C-K> <Esc>b[sviw<C-G>

เมื่อฉันพิมพ์ข้อความเนื้อหาคำที่สะกดผิดจะถูกขีดเส้นใต้ตามการตั้งค่าการไฮไลต์ของฉัน ถ้าฉันเห็นว่าคำนี้ค่อนข้างยาวและมันก็เป็นตัวพิมพ์ที่เรียบง่ายฉันสามารถคิดได้ว่าspellจะแก้ไขได้อย่างถูกต้องดังนั้นฉันจึงกด<C-L>และพิมพ์ต่อไป ถ้ามันเป็นคำที่สั้นกว่านี้หรือฉันคาดว่ามันจะผิดฉันก็สามารถกด<C-K>และปรับมันเอง ท้ายที่สุดถ้าspellแก้ไขสิ่งผิดปกติโดยไม่คาดคิดฉันได้ตั้งเครื่องหมายเลิกทำด้วย<C-G>uดังนั้นฉันสามารถ<Esc>ucWเปลี่ยนมันได้ด้วยตนเองสิ่งนี้ทำให้เวิร์กโฟลว์รวดเร็วมากเกือบตลอดเวลา


แก้ไขทุกคำโดยอัตโนมัติเป็นความคิดที่ดี
รวย

2

โดยบังเอิญฉันได้เขียนปลั๊กอินที่ทำสิ่งนี้อย่างแน่นอน มันเรียกว่าเป็นกลุ่มคุณแก้ไขอัตโนมัติ!

หลังจากติดตั้งแล้วให้พิมพ์:EnableAutocorrectเพื่อเปิดในบัฟเฟอร์ใด ๆ และคุณจะเห็นว่าscaremongering ของ wcharginนั้นไม่มีมูลความจริง


สังเกตความคิดเห็นของคุณเกี่ยวกับคำตอบของ wchargin ว่าถูกทำเครื่องหมายว่าเป็นเรื่องหยาบคายฉันได้แก้ไขเพื่อลบ "Poppycock!" และไล่ออกธง ไม่ใช่เรื่องใหญ่เพียงแค่ FYI
Martin Tournoij

@MartinTournoij ไม่เป็นไร ผู้คนจำนวนมากเมื่อ Reddit ยังไม่ได้รับเรื่องตลก :) (ขอบคุณสำหรับหัวขึ้น.)
Rich

นาย Rich ฉันต้องการติดตั้งและพิมพ์แพคเกจใด: EnableAutoCorrect ฉันไม่เข้าใจ
MP Creations

@MPCreations คุณใช้โปรแกรมจัดการปลั๊กอินหรือไม่?
รวย

@MPCreations อาจจะดูคำตอบของvi.stackexchange.com/questions/613/…ถ้าคุณไม่รู้วิธีติดตั้งปลั๊กอิน
Rich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.