Come disabilitare lo scorrimento orizzontale?


37

Ho alcuni caratteri nascosti nel buffer e lo scorrimento orizzontale uccide l'allineamento alla grande.

C'è un modo per disabilitarlo? Non sono riuscito a trovare alcuna opzione pertinente.

demo a scorrimento orizzontale errata

Modifica: Demo aggiunta. Puoi vedere vim basa l'offset di scorrimento sulla parte non nascosta del file, quindi l'allineamento si interrompe.


6
Non puoi disabilitarlo, ma puoi:set wrap
EvergreenTree

8
@Enuy, ciò che intendo è che le linee sono in realtà più lunghe della larghezza della finestra, ma un po 'di testo (i codici colore simili a bash) sono nascosti. Quindi, Vim pensa che abbia già raggiunto il bordo della finestra, ma visivamente non l'ha fatto. Direi che questo si qualifica come un bug.
Tommaso

8
@tommcdo Sì, capisco cosa intendi. C'è un problema simile con le linee di avvolgimento quando solo le parti nascoste alla fine della linea sono la causa del confezionamento e ha ottenuto WONTFIX da Bram: code.google.com/p/vim/issues/detail?id=260
Enuy

3
Ecco perché sto cercando una soluzione alternativa: disabilitare del tutto lo scorrimento orizzontale.
Enuy,

3
Il più vicino a cui riesco a pensare è se ti trovi in ​​un terminale, potresti usarlo <c-s>per sospendere il terminale in modo che lo schermo non si aggiorni. È quindi possibile apportare modifiche alla cieca e tornare all'inizio della riga e premere <c-q>per riprendere. Altre opzioni forse non utili: assicurati che lo stesso numero di caratteri nascosti sia tra ogni personaggio visibile o allarghi la finestra.
Matt Boehm,

Risposte:


2

Come disabilitare lo scorrimento orizzontale

Ho scritto una soluzione che disabilita lo scorrimento orizzontale, ( sfogliando il suggerimento di @ ЯрославРахматуллин ), ma non credo che ti piacerà:

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

Ciò impedisce di scorrere verso destra con il metodo incredibilmente preciso di tornare indietro di nuovo. *

* Poiché non so fino a che punto hai scorrere verso destra o quanto sono lunghe le tue linee, sto scorrendo la quantità arbitrariamente "lontana" di 99 larghezze a metà schermo. Nota anche che non mi preoccupo di verificare se hai effettivamente fatto scorrere verso destra o meno prima di scorrere "indietro" a sinistra. Se intendi effettivamente utilizzare questa soluzione, potresti voler rovinare qualcosa confrontando i valori di getcurpos(), 'sidescroll'e 'columns'.

Perché non vorrai farlo

Il motivo per cui non lo utilizzerai è che il problema di scorrimento è alla base di un altro problema: Vim non ti consente di spostare il cursore "fuori dallo schermo". Pertanto, se si scorre verso sinistra in modo tale che il cursore si spenga dallo schermo dopo lo scorrimento, Vim porta con sé il cursore e lo sposta a sinistra.

Ma poiché il calcolo utilizzato per stabilire se il cursore si trova sullo schermo è uguale a quello utilizzato per decidere se scorrere il problema originale, l'effetto netto è che con questa "soluzione" in atto, se si tenta di spostare il cursore a destra in una situazione che normalmente causerebbe uno scorrimento laterale, ora il cursore si rifiuta di spostarsi affatto. **

** Per essere leggermente più preciso, a seconda della posizione corrente e del movimento, il cursore può spostarsi verso destra; semplicemente non si sposterà oltre la posizione in cui si verificherebbe normalmente uno scorrimento.

Altre opzioni?

Quindi temo che la tua soluzione pianificata non finirà. Se si desidera una soluzione praticabile al problema generale, sarà necessario implementarlo nel codice sorgente di Vim.

Come hai già notato , è improbabile che arrivi presto, quindi temo che la tua migliore scommessa per una soluzione all'istanza specifica del problema mostrato nella tua gif sia di chiedere all'autore del plug-in di smettere di usare concealinteramente e invece rimuove completamente il testo nascosto dal buffer.

Sulla base dell'output non nascosto e della menzione vim-plugin-AnsiEscnella documentazione questo potrebbe essere qualcosa che è possibile implementare per loro, ma è difficile dirlo senza sapere come funzionano i plugin.


0

Se hai un modo per modificare il file, potresti voler avvolgere l'impostazione dei colori con \[e \], come spiegato qui :

[...] Quello che è stato fatto è racchiudere '\ 033 [1; 33m' che inizia il colore giallo in '[' e ']' che dice alla shell "tutto tra queste parentesi quadre sfuggite, comprese le parentesi stesse, è un personaggio non stampabile [...]

In caso contrario, tutti i codici colore vengono considerati come caratteri e pertanto potrebbero essere presi in considerazione per lo scorrimento orizzontale.

Non sono sicuro che questo sia il problema, ma vedere la fonte del calendario (con syntax off) e il comportamento attuale, mi ha fatto pensare a quello.


Il problema non sono i colori, ma i caratteri nascosti dalla concealfunzione (vedi la discussione nei commenti).
Ricco

Si, capisco. Forse c'è qualcosa che non ho capito bene, ma ho avuto un problema simile in bash con una PS1 che utilizzava i caratteri di colore (il fatto che siano colori non importa), e il terminale non stava tornando correttamente in una nuova riga alla buona posto, in quanto contava i personaggi per i colori come personaggi efficaci, mentre dovevano essere ignorati, poiché sono invisibili. L'animazione mi ha ricordato questo problema (in cui l'impaginazione orizzontale viene eseguita "troppo presto", come se lo facesse in base al numero di caratteri nella riga, che è ciò che è menzionato nel link nella mia risposta).
padawin,

I due problemi sono simili, sono d'accordo. Ma il comportamento descritto in questa domanda si verifica a causa del modo in cui Vim conta i caratteri (non il terminale) e quindi il suggerimento che fai nel tuo primo paragrafo non aiuterà qui, temo.
Ricco

0

EDIT: questo è un bug noto, chiuso "non risolto": https://github.com/vim/vim/issues/260

Risposta originale:

Il mio vim non scorre in orizzontale fino a quando il cursore non tocca il bordo dello schermo.

Stai usando sidescrolloff?

Non so come disabilitare completamente lo scorrimento orizzontale, ma questa impostazione dovrebbe far attendere fino a quando il cursore si sposta dal bordo:

:set sidescrolloff=0

Il problema esiste anche 'sidescrolloff=0'perché Vim ritiene che il cursore si sia spostato oltre il limite: basa il suo calcolo sul testo non nascosto, non sul testo visibile.
Ricco

Oh, è davvero pieno di bug. Ho trovato un rapporto sui bug e l'ho aggiunto alla mia risposta. Il maintainer di vim non vuole ripararlo.
JasonWoof

Non una correzione a questo bug ... ma forse potresti implementare la colorazione del tuo calendario con testo semplice nel buffer e prop_type_add () e prop_add () per colors / etc.
JasonWoof

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.