Làm thế nào để chia sẻ bổ sung kiểm tra chính tả vim giữa nhiều máy?


9

Tôi sử dụng tính năng kiểm tra chính tả của vim. Cho rằng tôi làm việc với nhiều thuật ngữ kỹ thuật và lệnh LaTeX, tôi có xu hướng thêm nhiều từ đó vào từ điển cá nhân của mình ~/.vim/spell/en.utf-8.add.

Tôi muốn chia sẻ tệp này trên nhiều máy, để khi tôi thêm một từ vào tệp trên một máy, nó cũng được thêm vào các máy khác và tôi không cần thêm nó một lần trên mỗi máy. Tôi đã thử phiên bản ~/.vim/spell/en.utf-8.addtrong git, nhưng điều này dường như không hoạt động: vim không nhận các điều khoản mới. Tôi nghi ngờ rằng vim cũng cần tệp en.utf-8.add.splđể được chỉnh sửa bằng cách nào đó, nhưng vì tệp này là nhị phân, phiên bản có thể sẽ dẫn đến xung đột.

Có ai ở đây có một giải pháp thỏa đáng để có các bổ sung từ điển kiểm tra chính tả vim như một phần của cấu hình của họ và đồng bộ hóa chúng giữa tất cả các máy của họ không?

Câu trả lời:


13

Vim sử dụng spltệp để thực hiện kiểm tra và spltệp được tạo từ addtệp. Chúng tôi có thể suy đoán xem liệu spltệp có thể di động trên các máy và phiên bản Vim khác nhau hay không, nhưng sẽ dễ dàng hơn (và an toàn hơn) để tạo lại tệp khi cần. Bây giờ, spltệp được tạo lại tự động khi bạn thêm từ vào từ điển cục bộ của mình từ bên trong Vim, nhưng bạn phải chạy mkspellđể tạo lại nếu bạn chỉnh sửa addtệp trực tiếp.

Với ý nghĩ đó, bạn có thể làm một cái gì đó như thế này: đồng bộ hóa các addtập tin bằng bất cứ phương tiện (với git, rsync, NFS, hoặc bất cứ điều gì), và thêm các lệnh để bạn vimrctrên tất cả các máy:

for d in glob('~/.vim/spell/*.add', 1, 1)
    if filereadable(d) && (!filereadable(d . '.spl') || getftime(d) > getftime(d . '.spl'))
        exec 'mkspell! ' . fnameescape(d)
    endif
endfor

Điều này sẽ tạo lại spltệp khi khởi động Vim bất cứ khi nào addtệp tương ứng mới hơn nó.


3
Rực rỡ, cảm ơn! Tôi đã thêm silenttrước execđó để không bị spam khi khởi động bởi thông tin tiến trình của lệnh (và không nhận được "Nhấn ENTER hoặc gõ lệnh để tiếp tục").
a3nm

2
@ a3nm Đó là vấn đề ưu tiên. Như một sysadmin cấp cao đã giải thích cho tôi nhiều năm trước, bị spam với thông báo "ok" là một dấu hiệu mọi thứ hoạt động tốt. :)
Sato Katsura

1
Nhân tiện, nếu bạn cũng đang sử dụng thiết lập này, có lẽ bạn muốn tự động hóa việc xử lý các xung đột git. Tôi đã giải thích cách thực hiện điều đó tại đây: a3nm.net/blog/git_auto_conflicts.html
a3nm

1
@Cbhihe: Bạn đã hoàn toàn bỏ lỡ quan điểm. glob()là một hàm Vim dựng sẵn (như tên cho thấy) thực hiện tương đương với tên đường dẫn Bash. Nghĩa là, glob()chấp nhận một biểu thức toàn cục và trả về một danh sách hoặc chuỗi tất cả các tên đường khớp với biểu thức đó trên hệ thống tệp cục bộ. Biểu thức Glob giống như các biểu thức thông thường, chỉ đơn giản và ít mạnh mẽ hơn. Gõ :h globtrong Vim để biết chi tiết khủng khiếp.
Cecil Curry

4

Tôi đã tạo một plugin Vim cho việc này. Nó tự động tìm đường dẫn đến các thư mục chính tả và sau đó gọi mkspellbất kỳ danh sách từ nào nó tìm thấy khi khởi động để tạo lại các tệp chính tả. Nó cũng tạo .gitignore.gitattributescác tệp trong các thư mục chính tả để loại trừ các tệp chính tả nhị phân và sử dụng trình điều khiển hợp nhất của Git để tránh xung đột khi hợp nhất các tệp chính tả từ hai máy khác nhau. Cảm ơn Sato Katsura cho mkspellví dụ.

https://github.com/micarmst/vim-spellsync


0

Tôi đồng bộ thư mục .vim của mình với các máy bằng Dropbox. Bất cứ khi nào tôi thực hiện thay đổi cấu hình của mình, tôi sẽ ném nó trở lại Dropbox và kéo nó xuống trên các máy khác của tôi.

Tôi có các lệnh được đặt trong tệp .bashrc để tôi có thể lưu một số thao tác gõ. Cài đặt Vim của tôi không quá phức tạp, vì vậy việc đồng bộ hóa khá nhanh khi tôi thực hiện thay đổi. Không chắc chắn cách nó xử lý một thư mục .vim đặc biệt lớn.


4
Cảm ơn đề nghị này! Tuy nhiên, Dropbox là phần mềm độc quyền, vì vậy nó không muốn sử dụng nó. (Nó buộc tôi phải lo lắng nhiều hơn về an ninh của nó, và nó không cung cấp đảm bảo tính bảo mật của những gì tôi lưu trữ trong đó.)
a3nm

2
Tránh "dropbox". Sử dụng gitphiên bản thay thế.
Cbhihe
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.