Wie deaktiviere ich horizontales Scrollen?

37

Ich habe einige verborgene Zeichen im Puffer und horizontales Scrollen bringt die Ausrichtung zum Erliegen.

Gibt es eine Möglichkeit, es zu deaktivieren? Ich konnte keine relevanten Optionen finden.

schlechte horizontale Scrolling-Demo

Bearbeiten: Demo hinzugefügt. Sie können sehen, dass vim den Bildlaufversatz auf den nicht verdeckten Teil der Datei bezieht, sodass die Ausrichtung unterbrochen wird.

Enuy
quelle
6
Sie können es nicht deaktivieren, aber Sie können:set wrap
EvergreenTree
8
@Enuy, was ich meine ist, dass die Linien tatsächlich länger als die Fensterbreite sind, aber etwas Text (die bash-ähnlichen Farbcodes) verborgen sind. Vim denkt also, dass es bereits den Rand des Fensters erreicht hat, aber visuell hat es nicht. Ich würde sagen, das ist ein Fehler.
tommcdo
8
@tommcdo Ja, ich verstehe was du meinst. Es gibt ein ähnliches Problem beim Zeilenumbruch, wenn nur verdeckte Teile am Zeilenende den Zeilenumbruch verursachen und WONTFIX von Bram erhalten wurde: code.google.com/p/vim/issues/detail?id=260
Enuy
3
Aus diesem Grund suche ich nach einer alternativen Lösung, um das horizontale Scrollen vollständig zu deaktivieren.
Enuy
3
Wenn Sie sich in einem Terminal befinden, können Sie <c-s>das Terminal so anhalten, dass der Bildschirm nicht aktualisiert wird. Sie könnten dann blind Änderungen vornehmen und zum Anfang der Zeile zurückkehren und drücken, <c-q>um fortzufahren. Andere, möglicherweise nicht hilfreiche Optionen: Stellen Sie sicher, dass sich zwischen jedem sichtbaren Zeichen die gleiche Anzahl verborgener Zeichen befindet, oder erweitern Sie das Fenster.
Matt Boehm

Antworten:

2

So deaktivieren Sie das horizontale Scrollen

Ich habe eine Lösung geschrieben, die horizontales Scrollen deaktiviert (indem ich von @ ЯрославРахматуллинs Vorschlag abgehört habe ), aber ich glaube nicht, dass es Ihnen gefallen wird:

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

Dies verhindert das Scrollen nach rechts durch die unglaublich präzise Methode, einfach wieder zurückzuscrollen. *

* Da ich nicht weiß, wie weit Sie nach rechts gescrollt haben oder wie lang Ihre Zeilen sind, scrolle ich willkürlich "weit" durch 99 halbe Bildschirmbreiten. Beachten Sie auch, dass ich nicht prüfen muss, ob Sie tatsächlich nach rechts gescrollt haben, bevor Sie "zurück" nach links scrollen. Wenn Sie tatsächlich beabsichtigen, diese Lösung zu verwenden, möchten Sie möglicherweise etwas durch Vergleichen der Werte von getcurpos(), 'sidescroll'und zum Erliegen bringen 'columns'.

Warum willst du das nicht?

Der Grund, warum Sie dies nicht verwenden werden, liegt darin, dass das Bildlaufproblem ein anderes Problem darstellt: Mit Vim können Sie den Cursor nicht "vom Bildschirm" bewegen. Wenn Sie also so nach links scrollen, dass der Cursor nach dem Scrollen nicht mehr auf dem Bildschirm angezeigt wird, bringt Vim den Cursor hilfreich mit und verschiebt ihn nach links.

Da jedoch die Berechnung, die verwendet wird, um festzustellen, ob sich der Cursor auf dem Bildschirm befindet, mit der Berechnung übereinstimmt, die verwendet wird, um zu entscheiden, ob im ursprünglichen Problem ein Bildlauf durchgeführt werden soll, ist dies der Nettoeffekt, wenn Sie versuchen, den Cursor zu verschieben Cursor nach rechts in einer Situation, die normalerweise ein seitliches Scrollen verursachen würde, jetzt weigert sich der Cursor, sich überhaupt zu bewegen. **

** Je nach aktueller Position und Bewegung bewegt sich der Cursor möglicherweise etwas genauer nach rechts. es bewegt sich einfach nicht über die Position hinaus, an der normalerweise eine Schriftrolle auftreten würde.

Andere Optionen?

Ich befürchte, dass Ihre geplante Problemumgehung nicht zum Erliegen kommt. Wenn Sie eine praktikable Lösung für das allgemeine Problem suchen, muss diese im Vim-Quellcode implementiert werden.

Wie Sie bereits bemerkt haben , ist es unwahrscheinlich, dass dies bald eintrifft. Ich fürchte, Sie können das Problem in Ihrem GIF am besten umgehen, indem Sie den Plug-in-Autor bitten, die Verwendung concealvollständig und stattdessen einzustellen Entfernen Sie den verborgenen Text vollständig aus dem Puffer.

Aufgrund der unverhüllten Ausgabe und der Erwähnung vim-plugin-AnsiEscin der Dokumentation kann dies möglicherweise implementiert werden, ist aber ohne Kenntnis der Funktionsweise des Plugins schwer zu sagen.

Rich
quelle
0

Wenn Sie eine Möglichkeit zu bearbeiten Sie die Datei haben, können Sie die Farben Setup wickeln mit \[und \], wie pro erklärt hier :

[...] Was getan wurde, ist, das '\ 033 [1; 33m', das die gelbe Farbe startet, in '[' und ']' einzuschließen, was der Shell sagt: "Alles zwischen diesen maskierten eckigen Klammern, einschließlich der Klammern selbst, ist ein nicht druckbares Zeichen [...]

Andernfalls werden die gesamten Farbcodes als Zeichen betrachtet und möglicherweise für das horizontale Scrollen berücksichtigt.

Ich bin mir nicht sicher, ob dies das Problem ist, aber als ich die Quelle des Kalenders (mit syntax off) und das aktuelle Verhalten sah, musste ich darüber nachdenken.

Padawin
quelle
Das Problem ist nicht die Farben, sondern die durch die versteckte Zeichen - concealFunktion (siehe die Diskussion in den Kommentaren).
Rich
Ja ich verstehe. Vielleicht gibt es etwas, das ich nicht gut verstanden habe, aber ich hatte ein ähnliches Problem mit einer PS1 mit Farbzeichen (die Tatsache, dass es sich um Farben handelt, spielt keine Rolle), und das Terminal kehrte in einer neuen Zeile nicht korrekt zum Guten zurück platzieren, da es die Zeichen für die Farben als effektive Zeichen zählte, während sie ignoriert werden mussten, da sie unsichtbar sind. Die Animation erinnerte mich an dieses Problem (bei dem die horizontale Paginierung "zu früh" erfolgt, als würde dies anhand der Anzahl der Zeichen in der Zeile geschehen, was in dem Link in meiner Antwort erwähnt wird).
Padawin
Die beiden Probleme sind ähnlich, da stimme ich zu. Das in dieser Frage beschriebene Verhalten ist jedoch auf die Art und Weise zurückzuführen, wie Vim Zeichen zählt (nicht das Terminal). Daher ist der Vorschlag, den Sie in Ihrem ersten Absatz machen, hier leider nicht hilfreich.
Rich
0

BEARBEITEN: Dies ist ein bekannter Fehler, geschlossen "wird nicht behoben": https://github.com/vim/vim/issues/260

Ursprüngliche Antwort:

Mein Vim scrollt nicht horizontal, bis der Cursor den Bildschirmrand berührt.

Sind Sie mit sidescrolloff?

Ich weiß nicht, wie man das horizontale Scrollen vollständig deaktiviert, aber diese Einstellung sollte warten, bis der Cursor die Kante verlässt:

:set sidescrolloff=0
JasonWoof
quelle
Das Problem besteht auch bei , 'sidescrolloff=0'weil Vim glaubt die Cursor hat den Rand gegangen: er seine Berechnung auf dem unverhüllten Text stützt, nicht sichtbaren Text.
Rich
Oh, das ist wirklich fehlerhaft. Ich habe einen Fehlerbericht dazu gefunden und zu meiner Antwort hinzugefügt. Der Vim-Betreuer möchte das Problem nicht beheben.
JasonWoof
Keine Lösung für diesen Fehler ... aber vielleicht könnten Sie Ihre Kalendermalvorlagen mit einfachem Text im Puffer und prop_type_add () und prop_add () für colors / etc implementieren.
JasonWoof
Yup, es ist ein Mist, aber dieser Fehlerbericht ist der Grund, warum das OP diese Frage geschrieben hat, um eine Problemumgehung zu finden !
Rich