`echon` untuk` echomsg`

8

The echondan echohlperintah yang sangat berguna untuk keluaran baris teks dengan beberapa kelompok puncak dalam baris yang sama. Ini dapat digunakan untuk misalnya membuat pesan status yang bagus untuk plugin.

Dalam sebuah plugin yang sedang saya kerjakan, saya menggunakan metode yang tepat untuk menghasilkan pesan status berwarna. Namun, terkadang saya ingin menambahkan pesan-pesan ini ke message-historydalam cara yang mirip dengan apa yang Anda dapatkan echomsg. Apakah ini entah bagaimana mungkin? Saya tidak percaya ada fungsi intrinsik untuk ini, tetapi mungkin orang dapat menambahkan fungsionalitas dengan skrip vim?

Karl Yngve Lervåg
sumber
1
Saya tidak mengerti apa bedanya? Dari membaca halaman bantuan, echondan echomsgbekerja sama, kecuali itu echomsgmenambah pesan ke riwayat? Anda menyebutkan "Saya telah mencoba beberapa waktu sekarang" , Anda harus memberi tahu kami apa sebenarnya yang sudah Anda coba, apa yang Anda harapkan terjadi, dan apa yang sebenarnya terjadi. Dengan begitu kami dapat mencoba dan memperbaiki masalah yang Anda alami (jika ada) atau menjelaskan beberapa kesalahpahaman yang mungkin Anda miliki.
Martin Tournoij
Saya minta maaf karena tidak jelas. Saya telah memperbarui pertanyaan agar lebih jelas, khususnya karena saya ingin echonfungsionalitas dikombinasikan dengan menambahkan pesan ke riwayat.
Karl Yngve Lervåg

Jawaban:

9

Ini saat ini tidak memungkinkan di Vim.

Secara internal, :echomsgdiimplementasikan sebagai :execute, kecuali ketika dipanggil sebagai :echomsghasil eksekusi ditampilkan dengan atribut yang terakhir :echohldan disimpan ke daftar pesan ( src/eval.cfungsi referensi ex_echohldan ex_execute), yang merupakan cara Anda mendapatkan warna pada pesan yang disimpan.

Riwayat pesan yang sebenarnya adalah kumpulan (daftar yang ditautkan) string dengan atribut, dan disimpan dan diambil src/message.c. Setiap string adalah pesan (terdiri dari satu atau lebih baris), dan atribut menentukan, antara lain, grup sorotan yang akan digunakan untuk tampilan. Karena itu, setiap pesan harus disorot secara keseluruhan (grup sorotan tunggal), dan tidak lebih dari satu pesan yang berada di baris yang sama. ( src/message.cstruktur msg_histdan fungsi referensi ex_messages)

Saya tidak dapat menemukan jalan keluarnya (saya berpikir untuk menggunakan :echohldan :echonmenampilkan pesan, tetapi menyimpan pesan sederhana dalam histori. Sayangnya, kemampuan untuk menambah riwayat tanpa juga menampilkan pesan tampaknya tidak terkena eks -command) tanpa memodifikasi kode sumber Vim.

John O'M.
sumber
1
Saya telah memperbarui pertanyaan sehingga tujuannya lebih jelas. Saya pikir Anda juga bisa memperbarui jawabannya sedikit setelah pembaruan saya (tapi itu terserah Anda). Saya yakin jawaban Anda cukup untuk ditandai "diterima", meskipun saya masih berharap beberapa ide bagus untuk "meretas" fungsionalitas dengan skrip vim.
Karl Yngve Lervåg