Làm thế nào tôi có thể làm cho vim ngừng chia tách các từ của tôi thành khối?


8

Người dùng ngôn ngữ tiếng Anh có thể không gặp rắc rối này, nhưng vim khá ngu ngốc khi nói đến các biểu thức thông thường. Trong trường hợp của tôi, hầu hết các chữ cái trong bảng chữ cái tiếng Thổ Nhĩ Kỳ bên ngoài bảng chữ cái EN dường như không đủ điều kiện làm ký tự từ.

Đưa ra một tài liệu có chứa một từ tiếng Thổ Nhĩ Kỳ:

gerçekleşiyor

Biểu thức tìm kiếm

/ger\wek

Sọ sẽ không phù hợp với sự bắt đầu của từ. Vì lý do gì ç không phải là một nhân vật từ.

Điều này trở nên điên rồ khi các plugin sử dụng \wnhư một phần của tiết mục biểu hiện thông thường. Một trường hợp điển hình là neocompcache(mà tôi sử dụng thay neocompletevì vì nó tương thích với Neovim). Đặt quy tắc kết hợp bổ sung cho một số cú pháp ngôn ngữ, tự động hoàn thành chỉ xảy ra trong các đoạn có kích thước từ. Khi tôi viết một lượng lớn văn xuôi Thổ Nhĩ Kỳ, thực sự sẽ rất hữu ích khi tự động hoàn thành chức năng, nhưng với hầu hết các từ bị chia thành các phần nhỏ hơn với các ký tự Thổ Nhĩ Kỳ bị bỏ qua thì nó vô dụng.

Làm thế nào tôi có thể thuyết phục vim (tốt nhất là neovim nếu có vấn đề) để chấp nhận một phạm vi lớn hơn của các ký tự là ký tự "từ"?


Bạn đang sử dụng mã hóa và mã hóa tập tin nào?
cxw

@cxw utf-8trên bảng. Và có nó được thiết lập trong cả hai cài đặt.
Caleb

1
Bạn đã gắn thẻ câu hỏi này là neovim . Tôi sẽ đề nghị bạn mở một vấn đề trong trình theo dõi vấn đề NeoVim, nếu chưa có vấn đề nào. Điều này có thể sẽ không được khắc phục trong thời gian ngắn, nhưng sẽ giảm xuống ... Bạn cũng có thể thử đăng một tin nhắn cho vim_dev về điều này, nhưng tôi nghi ngờ mọi người sẽ đồng ý rằng cần phải làm gì đó, sau đó không có gì thay đổi.
Martin Tournoij

Câu trả lời:


5

\wrõ ràng là tay ngắn cho [0-9A-Za-z_]. Sử dụng \kthay thế nếu bạn muốn khớp các ký tự Unicode ngoài phạm vi đó. Ví dụ, /ger\kektrận đấu gerçekleşiyor.

Nhân tiện, neocomplete nhận thức được điều này nhưng cố ý không sử dụng \k(theo mặc định) vì những lo ngại về hiệu suất. Bạn có thể thay đổi g:neocomplete#keyword_patternscài đặt của neocomplete . Xem thêm:

https://github.com/Shougo/neocomplete.vim/issues/207


4

Có vẻ như không có cách nào dễ dàng để xác định lại \w. Xem, ví dụ, Vim regex khớp với các ký tự unicode là từ không phải là từTừ khớp có chứa các ký tự nằm ngoài a-zA-Z .

Tuy nhiên, bạn có thể sử dụng phạm vi tùy chỉnh nếu bạn không nhớ việc thử lại thường xuyên (ha) : [a-zA-Z\%u00c7-\%u015f]. Điều đó cũng không may phù hợp với nhiều nhân vật không phải người Thổ Nhĩ Kỳ, nhưng nếu những nhân vật đó không xuất hiện trong văn bản của bạn, điều đó có thể ổn.


1
Thật không may, tôi không kiểm soát được tất cả những nơi mà các biểu thức thông thường như vậy được sử dụng. Bất kỳ số lượng plugin nào cũng sử dụng \wvà do đó tất cả chúng đều rơi xuống khi nói đến điều này. Thay vì vá từng cái một (nếu tôi thậm chí có thể theo dõi thủ phạm), tôi sẽ dễ dàng hơn để vá vim để nó \whoạt động. Bah
Caleb
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.