Mam kilka ukrytych znaków w buforze, a przewijanie w poziomie zabija wyrównanie.
Czy jest jakiś sposób, aby to wyłączyć? Nie mogłem znaleźć żadnych odpowiednich opcji.
Edycja: Dodano wersję demo. Możesz zobaczyć, że vim opiera przesunięcie przesunięcia na nieskrywanej części pliku, dlatego wyrównanie zostaje zerwane.
:set wrap
<c-s>
do zawieszenia terminala, aby ekran się nie aktualizował. Następnie możesz na ślepo wprowadzić zmiany i wrócić do początku linii i nacisnąć,<c-q>
aby wznowić. Inne być może nieprzydatne opcje: upewnij się, że ta sama liczba ukrytych znaków znajduje się między każdą widoczną postacią lub poszerz okno.Odpowiedzi:
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:
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.źródło
Jeśli masz sposób na edycję pliku, możesz zawinąć ustawienia kolorów za pomocą
\[
i\]
, jak wyjaśniono tutaj :W przeciwnym razie całe kody kolorów są traktowane jako znaki i dlatego mogą być brane pod uwagę przy przewijaniu poziomym.
Nie jestem pewien, czy to jest problem, ale widząc źródło kalendarza (z
syntax off
) i obecne zachowanie, przypomniało mi się o tym.źródło
conceal
funkcję (patrz dyskusja w komentarzach).EDYCJA: To znany błąd, zamknięty „nie da się naprawić”: https://github.com/vim/vim/issues/260
Oryginalna odpowiedź:
Mój vim nie przewija się w poziomie, dopóki kursor nie dotknie krawędzi ekranu.
Używasz
sidescrolloff
?Nie wiem, jak całkowicie wyłączyć przewijanie w poziomie, ale to ustawienie powinno sprawić, że zaczeka, aż kursor zejdzie z krawędzi:
źródło
'sidescrolloff=0'
ponieważ vim uważa, kursor jest już poza krawędź: opiera swoje obliczenia na jawnej postaci tekstu, nie widocznego tekstu.