Pertanyaan cara membuat visual visual hanya mem-flash garis atas / bawah?


Sudah menggunakan Vim selama bertahun-tahun sekarang dan sepanjang waktu ini saya baru saja menerimanya bright and distracting the visual bell adalah. Baru-baru ini seseorang menunjukkan padaku Emacs visual bell, yang hanya mem-flash garis atas dan bawah layar. Apakah ada yang tahu cara mereproduksi perilaku ini di Vim?

Dan jika saat ini tidak dapat dikonfigurasi, apakah ada yang tahu betapa sulitnya menambal itu? aku punya beberapa C pengalaman tetapi tidak ada keakraban dengan codebase.


32
2017-12-16 08:34


asal


Jawaban:


Vim dan versi

Masalah besar dengan pertanyaan Anda adalah, bahwa pertanyaan ini tergantung pada versi vim. Dengan versi vim saya maksud bukan versi (7.3 ...), tetapi lebih banyak lagi jika Anda menggunakan MacVim, gVim, edisi terminal, dll. Versi ini penting, karena parameter t_vb (tipe :set t_vb? untuk mendapatkannya) berbeda untuk versi vim yang berbeda, tetapi saya menulisnya nanti.

Saya menggunakan Ubuntu. Di terminal saya, saya bahkan tidak dapat menghasilkan kilatan visual (mungkin Ubuntu hanya mengabaikannya, setidaknya itulah yang terjadi pada bel normal: Program ini membunyikan lonceng!). gVim berbeda, bel visual bekerja di sana. Hal yang sama terjadi dengan Emacs. Lonceng visual (garis atas dan bawah, seperti yang Anda gambarkan) bekerja sangat baik dalam versi X. Versi terminal hanya tenang.

pengaturan t_vb

Seperti yang dicurigai beberapa orang, param t_vb bertanggung jawab atas lonceng visual dalam vim. Tetapi terlihat berbeda di terminal:

t_vb=^[[?5h$<100/>^[[?5l

dan gVim:

t_vb=^[|f

Jadi saya pikir itu akan berbeda untuk MacVim juga.

By the way: Jika Anda memodifikasi lonceng Anda harus menghasilkan ^[ dengan <C-V> diikuti oleh <ESC>. Jangan menyalin string di atas, mereka tidak akan berfungsi.

t_vb hanyalah sebuah string yang dikirim ke terminal (atau gvim). Anda juga bisa mendefinisikan t_vb = abcd, yang akan secara temporer mengeluarkan abcd pada kursor Anda. Ini hanya sihir tampilan, kilatan terjadi karena karakter melarikan diri. Tidak ada cara untuk berkomunikasi dengan vim. Namun Anda dapat memodifikasi seluruh tampilan vim (menghapus garis, menambahkan garis, dll). Tetapi jika tampilan digambar ulang, semuanya akan hilang. Masalah utama dengan tugas ini adalah bahwa urutan pelarian tidak memiliki urutan tidur. Anda dapat mencoba memasukkan garis dengan warna putih dan menghapusnya, tetapi ini hanya cara untuk berpuasa (saya mencobanya).

Perilaku yang digambarkan hanyalah kasus untuk gVim. Tapi saya pikir sisanya mungkin akan berperilaku sangat mirip. Namun, jika terminal / terminal pseudo Anda mendukung urutan pelarian yang hanya menyoroti sejumlah garis tertentu, Anda akan dapat melakukan apa yang Anda inginkan.

Saya mungkin mengecewakan Anda, tetapi saya tidak berpikir ada cara untuk mendapatkan perilaku yang Anda inginkan, tanpa memodifikasi sumber vim (atau memodifikasi perangkat lunak terminal, yang saya pasti tidak akan merekomendasikan).

Modifikasi kode sumber asli

Jika Anda ingin mengedit perilaku lonceng visual sesuka Anda, Anda selalu dapat mengedit file C. Saya tidak akan merekomendasikannya, tapi itu jelas bukan tidak mungkin. Anda bisa mulai di sini:

http://code.google.com/p/vim/source/browse/src/misc1.c#3433

Hapus "out_str (T_VB);" dan masukkan sesuatu seperti ini (pseudo code):

invert(fist_line)
invert(last_line)
sleep(100 ms)
invert(fist_line)
invert(last_line)

Tidur bisa menyebalkan. Tapi ini hanya cara termudah (Tidak ada pengatur waktu, dll.). Masalahnya adalah menemukan fungsi terbalik seperti itu. Saya akan mencoba mencari sebuah perintah yang mengeksekusi vim-script dan kemudian mencoba untuk menemukan perintah vim yang sesuai. Saya yakin itu mungkin.


3
2018-03-25 21:50