Jak wyłączyć przewijanie w poziomie
Napisałem rozwiązanie, które wyłącza przewijanie w poziomie (poprzez riffowanie sugestii @ ЯрославРахматуллин ), ale nie sądzę, że ci się spodoba:
augroup NoScrollPlease
autocmd!
autocmd CursorMoved * norm!99zH
augroup END
Zapobiega to przewijaniu w prawo dzięki niewiarygodnie precyzyjnej metodzie ponownego przewijania do tyłu. *
* Ponieważ nie wiem, jak daleko przewinąłeś w prawo ani jak długie są twoje linie, przewijam dowolnie „daleko” 99 99 szerokości ekranu. Zauważ też, że nie zawracam sobie głowy sprawdzeniem, czy przewinąłeś w prawo przed przewinięciem „wstecz” w lewo. Jeśli faktycznie zamierzasz skorzystać z tego rozwiązania, możesz chcieć coś podważyć, porównując wartości getcurpos()
, 'sidescroll'
i 'columns'
.
Dlaczego nie chcesz tego robić
Powodem, dla którego nie zamierzasz tego używać, jest to, że u podstaw problemu przewijania jest inny problem: Vim nie pozwala na przesuwanie kursora „poza ekran”. Dlatego jeśli przewiniesz w lewo w taki sposób, że po przewinięciu kursor będzie poza ekranem, Vim pomoże przesunąć kursor wraz z nim i przesunąć go w lewo.
Ponieważ jednak obliczenia używane do określania, czy kursor znajduje się na ekranie, są takie same, jak obliczania przy przewijaniu oryginalnego problemu, efektem netto jest to, że z tym „rozwiązaniem” na miejscu, jeśli spróbujesz przenieść kursor w prawo w sytuacji, która normalnie spowodowałaby przewijanie w bok, teraz kursor w ogóle nie chce się poruszać. **
** Aby być nieco bardziej precyzyjnym, w zależności od aktualnej pozycji i ruchu, kursor może przesuwać się w prawo; po prostu nie przesunie się poza pozycję, w której normalnie nastąpiłby zwój.
Inne opcje?
Więc obawiam się, że twoje zaplanowane obejście się nie powiedzie. Jeśli chcesz praktycznego rozwiązania ogólnego problemu, będzie trzeba go zaimplementować w kodzie źródłowym Vima.
Jak już zauważyłeś , jest mało prawdopodobne, że przyjedzie w najbliższym czasie, więc obawiam się, że najlepszym rozwiązaniem dla obejścia konkretnego przypadku problemu pokazanego w twoim gifie jest złożenie petycji autorowi wtyczki, aby przestał używać conceal
całkowicie i zamiast tego usuń całkowicie ukryty tekst z bufora.
W oparciu o nieskryte dane wyjściowe i wzmiankę vim-plugin-AnsiEsc
w dokumentacji może to być coś, co można zaimplementować, ale trudno powiedzieć na pewno bez wiedzy o tym, jak działa wtyczka.
:set wrap