Como desativar a rolagem horizontal?

37

Eu tenho alguns caracteres ocultos no buffer e a rolagem horizontal acaba com o alinhamento.

Existe alguma maneira de desativá-lo? Não encontrei nenhuma opção relevante.

demonstração ruim de rolagem horizontal

Editar: demonstração adicionada. Você pode ver que o vim baseia o deslocamento da rolagem na parte não oculta do arquivo, portanto, o alinhamento é interrompido.

Enuy
fonte
6
Você não pode desativá-lo, mas você pode:set wrap
EvergreenTree
8
@ Buy, o que quero dizer é que as linhas são realmente maiores que a largura da janela, mas algum texto (os códigos de cores do tipo bash) estão ocultos. Então, o Vim acha que já alcançou a borda da janela, mas visualmente não chegou. Eu diria que isso se qualifica como um bug.
tommcdo
8
@ tommcdo Sim, entendo o que você quer dizer. Há um problema semelhante com as linhas de quebra automática, quando apenas as peças ocultas no final da linha são a causa da quebra e o WONTFIX da Bram: code.google.com/p/vim/issues/detail?id=260
Enuy
3
É por isso que estou procurando uma solução alternativa - para desativar completamente a rolagem horizontal.
Enuy
3
O mais próximo que consigo pensar é que, se você estiver em um terminal, poderá <c-s>suspender o terminal para que a tela não seja atualizada. Você pode fazer alterações às cegas, voltar ao início da linha e pressionar <c-q>para continuar. Outras opções que talvez não sejam úteis: verifique se o mesmo número de caracteres ocultos está entre todos os caracteres visíveis ou amplie a janela.
quer

Respostas:

2

Como desativar a rolagem horizontal

Eu escrevi uma solução que desativa a rolagem horizontal ( retirando a sugestão de @ ЯрославРахматуллин ), mas acho que você não vai gostar:

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

Isso evita a rolagem para a direita pelo método incrivelmente preciso de rolagem para trás novamente. *

* Como não sei até que ponto você rolou para a direita ou quanto tempo suas linhas estão, estou rolando arbitrariamente a quantidade "distante" de 99 larguras de meia tela. Observe também que não estou me preocupando em verificar se você realmente rolou para a direita antes de rolar para trás. Se você realmente pretende usar esta solução, convém tentar algo comparando os valores de getcurpos(), 'sidescroll'e 'columns'.

Por que você não vai querer fazer isso

A razão pela qual você não vai usar isso é que, por trás do problema de rolagem, há outro problema: o Vim não permite que você mova o cursor para "fora da tela". Portanto, se você rolar para a esquerda de maneira que o cursor fique fora da tela após a rolagem, o Vim ajudará o cursor a acompanhá-lo e o moverá para a esquerda.

Mas como o cálculo usado para determinar se o cursor está na tela é o mesmo usado para decidir se o problema original é rolado, o efeito final é que, com essa "solução", se você tentar mover o cursor para a direita em uma situação que normalmente causaria uma rolagem lateral, agora o cursor se recusa a se mover. **

** Para ser um pouco mais preciso, dependendo da posição atual e do movimento, o cursor pode se mover para a direita; apenas não passa da posição em que normalmente ocorre um pergaminho.

Outras opções?

Por isso, acho que sua solução planejada não vai dar certo. Se você deseja uma solução viável para o problema geral, ela precisará ser implementada no código-fonte do Vim.

Como você já observou , é improvável que chegue tão cedo, então, temo que sua melhor aposta para uma solução alternativa para a instância específica do problema mostrado em seu gif seja pedir ao autor do plugin que pare de usar concealcompletamente e, em vez disso, remova o texto oculto do buffer completamente.

Com base na saída não oculta e na menção vim-plugin-AnsiEscna documentação, isso pode ser algo que é possível implementá-los, mas é difícil dizer com certeza sem o conhecimento de como o plug-in funciona.

Rich
fonte
0

Se você tem uma maneira de editar o arquivo, convém agrupar a configuração de cores com \[e \], conforme explicado aqui :

[...] O que foi feito é colocar o '\ 033 [1; 33m' que inicia a cor amarela em '[' e ']', que informa à concha "tudo entre esses colchetes vazios, incluindo os próprios colchetes, é um caractere não imprimível [...]

Caso contrário, todos os códigos de cores são considerados caracteres e, portanto, podem ser levados em consideração na rolagem horizontal.

Não tenho certeza se esse é o problema, mas, vendo a fonte do calendário (com syntax off) e o comportamento atual, isso me fez pensar nisso.

padawin
fonte
O problema não são as cores, mas os caracteres ocultos pelo concealrecurso (consulte a discussão nos comentários).
Rich
Sim, eu entendo. Talvez exista algo que eu não tenha entendido bem, mas tive um problema semelhante no bash com um PS1 usando caracteres coloridos (o fato de serem cores não importa) e o terminal não estava retornando corretamente em uma nova linha. lugar, pois estava contando os caracteres das cores como caracteres efetivos, enquanto eles precisavam ser ignorados, pois eram invisíveis. A animação me lembrou esse problema (onde a paginação horizontal é feita "muito cedo", como se fosse com base no número de caracteres na linha, que é o que é mencionado no link na minha resposta).
padawin
Os dois problemas são semelhantes, eu concordo. Mas o comportamento descrito nesta pergunta ocorre devido à maneira como o Vim conta os caracteres (não o terminal) e, portanto, a sugestão que você faz no seu primeiro parágrafo não ajuda aqui.
Rich
0

EDIT: Este é um erro conhecido, fechado "não será corrigido": https://github.com/vim/vim/issues/260

Resposta original:

Meu vim não rola horizontalmente até o cursor atingir a borda da tela.

Você está usando sidescrolloff?

Não sei como desativar completamente a rolagem horizontal, mas essa configuração deve esperar até que o cursor saia da borda:

:set sidescrolloff=0
JasonWoof
fonte
O problema existe mesmo 'sidescrolloff=0'porque o Vim acredita que o cursor está fora do limite: ele baseia seu cálculo no texto não oculto, não no texto visível.
Rich
Oh, isso é realmente buggy. Encontrei um relatório de bug sobre isso e o adicionei à minha resposta. O mantenedor do vim não deseja corrigi-lo.
JasonWoof
Não é uma correção para esse bug ... mas talvez você possa implementar sua coloração de calendário com texto simples no buffer e prop_type_add () e prop_add () para colors / etc.
JasonWoof
Sim, é uma chatice, mas esse relatório de bug é o motivo pelo qual o OP escreveu essa pergunta procurando uma solução alternativa !
Rich