Bagaimana cara menonaktifkan pengguliran horizontal?

37

Saya memiliki beberapa karakter tersembunyi di buffer dan pengguliran horizontal membunuh penyelarasan waktu besar.

Apakah ada cara bagaimana menonaktifkannya? Saya tidak dapat menemukan opsi yang relevan.

demo bergulir horizontal yang buruk

Edit: Demo ditambahkan. Anda dapat melihat vim mendasarkan offset gulir pada bagian file yang tidak ditutup, oleh karena itu aligment rusak.

Enuy
sumber
6
Anda tidak dapat menonaktifkannya, tetapi Anda dapat:set wrap
EvergreenTree
8
@Enuy, maksud saya adalah bahwa garis sebenarnya lebih panjang dari lebar jendela, tetapi beberapa teks (kode warna bash-like) disembunyikan. Jadi, Vim berpikir itu sudah mencapai tepi jendela, tetapi secara visual belum. Saya akan mengatakan ini memenuhi syarat sebagai bug.
tommcdo
8
@ talkcdo Ya, saya mengerti maksud Anda. Ada masalah serupa dengan garis pembungkus ketika hanya bagian yang disembunyikan di akhir baris yang menjadi penyebab pembungkus dan mendapat WONTFIX dari Bram: code.google.com/p/vim/issues/detail?id=260
Enuy
3
Itu sebabnya saya mencari solusi alternatif - untuk menonaktifkan pengguliran horizontal sekaligus.
Enuy
3
Yang paling dekat yang bisa saya pikirkan adalah jika Anda berada di terminal, Anda dapat menggunakan <c-s>untuk menangguhkan terminal sehingga layar tidak memperbarui. Anda kemudian dapat secara buta melakukan perubahan dan kembali ke awal baris dan tekan <c-q>untuk melanjutkan. Opsi lain yang mungkin tidak membantu: memastikan bahwa jumlah karakter tersembunyi yang sama ada di antara setiap karakter yang terlihat atau memperlebar jendela.
Matt Boehm

Jawaban:

2

Cara menonaktifkan pengguliran horizontal

Saya telah menulis solusi yang menonaktifkan pengguliran horizontal, (dengan melepas saran @ ЯрославРахматуллин ), tetapi saya tidak berpikir Anda akan menyukainya:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

Ini mencegah pengguliran ke kanan dengan metode yang sangat tepat dengan hanya menggulir kembali. *

* Karena saya tidak tahu seberapa jauh Anda menggulir ke kanan atau berapa lama garis Anda, saya menggulir jumlah "setengah" sewenang-wenang dari 99 lebar layar setengah. Perhatikan juga bahwa saya tidak repot-repot memeriksa apakah Anda benar-benar telah menggulir ke kanan sebelum menggulir "kembali" ke kiri. Jika Anda benar-benar berniat untuk menggunakan solusi ini, Anda mungkin ingin mengetuk sesuatu dengan membandingkan nilai-nilai getcurpos(), 'sidescroll'dan 'columns'.

Mengapa Anda tidak mau melakukannya

Alasan Anda tidak akan menggunakan ini adalah bahwa yang mendasari masalah gulir adalah masalah lain: Vim tidak akan membiarkan Anda memindahkan kursor "dari layar". Oleh karena itu, jika Anda menggulir ke kiri sedemikian rupa sehingga kursor akan mati layar setelah gulir, Vim membantu membawa kursor bersamanya dan memindahkannya ke kiri.

Tetapi karena perhitungan yang digunakan untuk apakah kursor ada di layar sama dengan yang digunakan untuk memutuskan apakah akan menggulir masalah asli, efek bersihnya adalah dengan adanya "solusi" ini di tempat, jika Anda mencoba untuk memindahkan kursor ke kanan dalam situasi yang biasanya menyebabkan gulir ke samping, sekarang kursor menolak untuk bergerak sama sekali. **

** Untuk sedikit lebih tepat, tergantung pada posisi saat ini dan gerakan, kursor dapat bergerak ke kanan; itu tidak akan bergerak melewati posisi di mana sebuah scroll biasanya muncul.

Pilihan lain?

Jadi saya khawatir solusi yang Anda rencanakan tidak akan berhasil. Jika Anda ingin solusi yang bisa diterapkan untuk masalah umum, itu perlu diimplementasikan dalam kode sumber Vim.

Seperti yang sudah Anda catat , ini tidak mungkin tiba dalam waktu dekat, jadi saya khawatir Anda sebaiknya mencari solusi untuk contoh spesifik masalah yang ditampilkan di gif Anda adalah mengajukan petisi kepada pembuat plugin untuk berhenti menggunakan concealsepenuhnya dan sebagai gantinya hapus teks tersembunyi dari buffer sepenuhnya.

Berdasarkan output yang tidak dikenali dan disebutkan vim-plugin-AnsiEscdalam dokumentasi ini mungkin sesuatu yang mungkin bagi mereka untuk menerapkan, tetapi sulit untuk mengatakan dengan pasti tanpa pengetahuan tentang bagaimana fungsi plugin.

Rich
sumber
0

Jika Anda memiliki cara untuk mengedit file, Anda mungkin ingin membungkus pengaturan warna dengan \[dan \], seperti yang dijelaskan di sini :

[...] Apa yang telah dilakukan adalah untuk melampirkan '\ 033 [1; 33m' yang memulai warna kuning di '[' dan ']' yang memberi tahu shell "segala sesuatu di antara kurung persegi yang terlepas, termasuk kurung itu sendiri, adalah karakter non-cetak [...]

Jika tidak, seluruh kode warna dianggap sebagai karakter, dan karenanya dapat diperhitungkan sebagai gulir horizontal.

Saya tidak yakin ini masalahnya, tetapi melihat sumber kalender (dengan syntax off) dan perilaku saat ini, itu membuat saya berpikir tentang itu.

padawin
sumber
Masalahnya bukan warna, tetapi karakter yang disembunyikan oleh concealfitur (lihat diskusi di komentar).
Kaya
Ya saya mengerti. Mungkin ada sesuatu yang saya tidak pahami dengan baik, tapi saya punya masalah serupa di bash dengan PS1 menggunakan karakter warna (fakta bahwa mereka adalah warna tidak masalah), dan terminal tidak kembali dengan benar di baris baru di tempat yang bagus. tempat, karena sedang menghitung karakter untuk warna sebagai karakter yang efektif, sedangkan mereka harus diabaikan, karena mereka tidak terlihat. Animasi ini mengingatkan saya pada masalah ini (di mana pagination horizontal dilakukan "terlalu cepat", seolah-olah itu berdasarkan pada jumlah karakter dalam baris, yang adalah apa yang disebutkan dalam tautan dalam jawaban saya).
padawin
Dua masalah serupa, saya setuju. Tetapi perilaku yang dijelaskan dalam pertanyaan ini terjadi karena cara Vim menghitung karakter (bukan terminal) sehingga saran yang Anda buat di paragraf pertama tidak akan membantu di sini, saya khawatir.
Kaya
0

EDIT: Ini adalah bug yang dikenal, ditutup "tidak akan diperbaiki": https://github.com/vim/vim/issues/260

Jawaban asli:

Vim saya tidak menggulir secara horizontal sampai kursor menyentuh tepi layar.

Apakah Anda menggunakan sidescrolloff?

Saya tidak tahu tentang menonaktifkan pengguliran horizontal sepenuhnya, tetapi pengaturan ini harus membuatnya menunggu sampai kursor keluar dari tepi:

:set sidescrolloff=0
JasonWoof
sumber
Masalahnya ada bahkan dengan 'sidescrolloff=0'karena Vim percaya kursor telah keluar dari tepi: itu mendasarkan perhitungannya pada teks yang tidak disembunyikan, bukan teks yang terlihat.
Kaya
Oh, itu benar-benar buggy. Saya menemukan laporan bug tentang ini dan menambahkannya ke jawaban saya. Pemelihara vim tidak ingin memperbaikinya.
JasonWoof
Bukan perbaikan untuk bug ini ... tapi mungkin Anda bisa menerapkan pewarnaan kalender Anda dengan teks biasa di buffer dan prop_type_add () dan prop_add () untuk warna / dll.
JasonWoof
Yup, itu mengecewakan, tapi laporan bug itu adalah alasan OP menulis pertanyaan ini untuk mencari solusinya !
Kaya