Lỗi chính tả tự động


19

Tôi đã bật kiểm tra chính tả với

:set spell spelllang=en_us

Bây giờ tôi có thể sửa lỗi chính tả của một từ bằng cách gõ 1z=(nghĩa là chọn 1sửa lỗi chính tả st ( z=)).

Làm cách nào tôi có thể làm cho từ này tự động chạy trên từ trước đó bất cứ khi nào tôi nhập khoảng trắng mà không có bất kỳ độ trễ nào? Nó cũng cố gắng "sửa" các từ đã viết đúng chính tả (đó là lý do tại sao tôi không thể làm gì đó giống như vậy inoremap <space> <esc>mmb1z=`ma<space>), vì vậy tôi chỉ muốn sửa từng từ tôi gõ nếu nó viết sai chính tả .

Có cách nào để tự động sửa các từ sai chính tả trong Vim không?



1
@ArturoVolpe Đó dường như là một câu trả lời hợp pháp cho câu hỏi.
bsmith89

bạn có thể kết hợp lỗi trước đó [[s 'trong bản tóm tắt không? Tôi sẽ thêm vào như một câu trả lời nhưng không biết làm thế nào để làm lại bản tóm tắt vì vậy tôi sẽ để lại cho người khác.
Nick J Adams

Câu trả lời:


8

Tôi khuyên bạn không nên tự động sửa từng từ bị đánh dấu sai, vì hai lý do.

  • Đầu tiên, bạn sẽ nhận được rất nhiều thông tin sai về những thứ bạn định nhập, đặc biệt là bằng văn bản kỹ thuật hơn. Bạn chắc chắn có thể (và có lẽ nên) thêm hai từ điển này để chúng được nhận ra và đề xuất. Tuy nhiên, nếu bạn không nhận thấy rằng chúng được tự động sửa, chúng có thể chuyển sang phiên bản cuối cùng của tài liệu, hoặc tệ hơn, nếu bạn đang viết mã hoặc tệp cấu hình (ví dụ: thay đổi xminđể minlàm cho biểu đồ trông hoàn toàn sai rồi). Nhận xét cũng có thể trở nên kỳ lạ (ví dụ: tôi đã thay đổi "Nhãn và hướng dẫn vô hiệu" thành "Hướng dẫn nhãn và vô hiệu hóa", thay đổi nghĩa (a) từ cụm danh từ thành mệnh lệnh và (b) thành nghĩa hoàn toàn khác. )
  • Thứ hai, tính năng tự động sửa lỗi khá kém đối với các từ ngắn. Theo kinh nghiệm của tôi, nó có xu hướng hoàn thành từ gần nhất, với, ví dụ, với các từ có ba chữ cái, có thể hoàn toàn khác với ý của bạn. Nếu bạn có ý nghĩa để gõ của nhưng vô tình gõ fo , nó sẽ được sửa chữa để vài -không những gì bạn muốn! Một lần nữa, những thứ này có thể khó bị bắt trong các phiên bản chữ thảo.

Với ý nghĩ đó, tôi nghĩ mục tiêu thực sự của bạn là có thể nhanh chóng nhận ra và sửa các lỗi đánh máy.

Tôi sử dụng các ánh xạ sau để thực hiện điều này:

" 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>

Khi tôi nhập văn bản cơ thể, mọi từ sai chính tả sẽ được gạch chân, theo các cài đặt tô sáng của tôi. Nếu tôi thấy từ đó tương đối dài và nó là một lỗi đánh máy đơn giản, thì tôi có thể hình dung nó spellcó thể sẽ sửa nó một cách chính xác, vì vậy tôi nhấn <C-L>và tiếp tục gõ. Nếu đó là một từ ngắn hơn hoặc tôi dự đoán rằng nó sẽ hiểu sai, tôi có thể tự bấm <C-K>và điều chỉnh nó. Cuối cùng, nếu spellbất ngờ sửa lỗi sai, tôi đã thiết lập một điểm đánh dấu hoàn tác <C-G>u, vì vậy tôi chỉ có thể <Esc>ucWthay đổi bằng tay Điều này giúp cho công việc rất nhanh chóng trong hầu hết thời gian.


Tự động sửa từng từ là một ý tưởng tuyệt vời .
Giàu

2

Tình cờ, tôi đã viết một plugin thực hiện chính xác điều này. Nó được gọi là Vim You, Tự động sửa!

Sau khi cài đặt, hãy gõ :EnableAutocorrectđể bật nó trong bất kỳ bộ đệm nào và bạn sẽ sớm thấy rằng việc xóa sẹo của wchargein là không có cơ sở.


Lưu ý nhận xét của bạn về câu trả lời của wchargein bị gắn cờ là thô lỗ, tôi đã chỉnh sửa nó để xóa "Poppycock!" và gạt cờ. Không phải là một vấn đề lớn, chỉ là FYI.
Martin Tournoij

@MartinTournoij Không sao đâu. Nhiều người trên reddit cũng không có trò đùa . :) (Tuy nhiên, cảm ơn vì đã ngẩng cao đầu.)
Rich

mr Rich gói nào tôi muốn cài đặt và gõ: EnableAutoC chính xác tôi không hiểu
MP Creations

@MPCreations Bạn có sử dụng trình quản lý plugin không?
Giàu

@MPCreations Có thể hãy xem câu trả lời cho vi.stackexchange.com/questions/613/ mẹo nếu bạn không biết cách cài đặt plugin
Rich
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.