`echon` cho` echomsg`


8

Các lệnh echonechohlrất hữu ích để xuất các dòng văn bản có nhiều nhóm tô sáng trong cùng một dòng. Điều này có thể được sử dụng để ví dụ tạo thông điệp trạng thái đẹp cho plugin.

Trong một plugin tôi đang làm việc, tôi đang sử dụng phương pháp chính xác này để xuất các thông báo trạng thái màu. Tuy nhiên, đôi khi tôi muốn thêm các tin nhắn này message-historytheo cách tương tự với những gì bạn nhận được echomsg. Đây có phải là cách nào đó có thể? Tôi không tin có bất kỳ chức năng nội tại nào cho việc này, nhưng có lẽ người ta có thể thêm chức năng với tập lệnh vim?


1
Tôi không hiểu sự khác biệt là gì? Từ việc đọc các trang trợ giúp echonechomsglàm việc như nhau, ngoại trừ việc echomsgthêm thông điệp vào lịch sử? Bạn đã đề cập "Tôi đã cố gắng một thời gian rồi" , bạn nên cho chúng tôi biết chính xác những gì bạn đã cố gắng, những gì bạn dự kiến ​​sẽ xảy ra và những gì đã xảy ra. Bằng cách đó, chúng tôi có thể thử và khắc phục sự cố bạn gặp phải (nếu có) hoặc giải thích một số quan niệm sai lầm mà bạn có thể gặp phải.
Martin Tournoij

Tôi xin lỗi vì không rõ ràng. Tôi đã cập nhật câu hỏi để nó rõ ràng hơn, đặc biệt là tôi muốn echonchức năng kết hợp với việc thêm thông điệp vào lịch sử.
Karl Yngve Lervåg

Câu trả lời:


9

Điều này hiện không thể có trong Vim.

Trong nội bộ, :echomsgđược triển khai như :execute, ngoại trừ khi được gọi là :echomsgkết quả của việc thực thi được hiển thị với thuộc tính cuối cùng :echohlvà được lưu vào danh sách thông báo ( src/eval.cchức năng tham chiếu ex_echohlex_execute), đó là cách bạn nhận được bất kỳ màu nào trên tin nhắn đã lưu.

Lịch sử tin nhắn thực tế là một tập hợp (danh sách được liên kết) của các chuỗi với các thuộc tính, và được lưu trữ và truy xuất src/message.c. Mỗi chuỗi là một thông điệp (bao gồm một hoặc nhiều dòng) và thuộc tính xác định, trong số những thứ khác, nhóm tô sáng sẽ sử dụng để hiển thị. Do đó, mỗi tin nhắn phải được tô sáng toàn bộ (một nhóm đánh dấu đơn) và không quá một tin nhắn có thể nằm trên cùng một dòng. ( src/message.ccấu trúc tham chiếu msg_histvà chức năng ex_messages)

Tôi không thể tìm ra cách nào khác (tôi đã nghĩ đến việc sử dụng :echohl:echonhiển thị một tin nhắn, nhưng lưu trữ một tin nhắn đơn giản trong lịch sử. Thật không may, khả năng thêm vào lịch sử mà không hiển thị thông báo dường như không được hiển thị với bất kỳ người cũ nào -commands) mà không sửa đổi mã nguồn Vim.


1
Tôi đã cập nhật câu hỏi để ý định rõ ràng hơn. Tôi nghĩ rằng bạn cũng có thể cập nhật câu trả lời một chút sau khi cập nhật của tôi (nhưng điều đó tùy thuộc vào bạn). Tôi tin rằng câu trả lời của bạn là đủ để được đánh dấu "chấp nhận", mặc dù tôi vẫn hy vọng một số ý tưởng tốt để "hack" chức năng với tập lệnh vim.
Karl Yngve Lervåg
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.