quebra de linha do vim com recuo


20

O Vim / gvim irá envolver linhas longas como esta:

000000000000000000000000000000000000|
00000000000000                      |
    11111111111111111111111111111111|
111111111111111111                  |
    22222222222222222222222222222222|
222222222222222222                  |
        3333333333333333333333333333|
3333333333333333333333              |

Existe uma maneira de fazer com que o Vim agrupe essas linhas assim:

000000000000000000000000000000000000|
 00000000000000                     |
    11111111111111111111111111111111|
     111111111111111111             |
    22222222222222222222222222222222|
     222222222222222222             |
        3333333333333333333333333333|
         3333333333333333333333     |

Quero que a linha quebrada comece um pouco além do recuo de onde essa linha começou. (Só para esclarecer, estou falando de quebra automática, não de largura de texto.)

Quero que o recuo da linha seja considerado no agrupamento dessa linha, para que a estrutura do código não seja oculta por linhas quebradas.

Respostas:


17

ATUALIZAÇÃO: Essa funcionalidade foi lançada no vim 7.4.338, embora você queira 7.4.354 ou posterior .


Então, aparentemente, isso requer um patch para o Vim . Há um patch de Vaclav Smilauer de 2007. Eu atualizei o patch para trabalhar com o Vim 7.2.148 do Fedora 11. Mas parece que ele faz o trabalho.


1
Quando o Fedora lança atualizações para o Vim, estou atualizando o patch. Consulte retracile.net/wiki/VimBreakIndent para obter as últimas.
retracile

O bônus aponta para alguém que pode explicar como fazer isso funcionar com o MacVim.
rosquinha

Onde está o patch? Esse site não ligar para qualquer eu posso ver
puk

@uk: Desculpe, uma grande atualização de software mudou alguns locais de links. Eu os consertei agora.
retracile

1
A partir de hoje (25 de junho, 2014) o remendo breakindent é oficialmente parte do Vim 7,4 - ele é adicionado pelo remendo 338 e 345.
Heptite

14

No seu .vimrc:

set wrap               " soft-wrap lines

" requires +linebreak compile-time option (not in the 'tiny' and 'small' builds); check your :version
set showbreak=----->   " prefix for soft-wrapped lines (no actual line break character)
"set linebreak          " soft-wrap lines only at certain characters (see :help breakat)

" If you like line numbers, you may want this instead:
"set number
"set showbreak=------>\  " line up soft-wrap prefix with the line numbers
"set cpoptions+=n        " start soft-wrap lines (and any prefix) in the line-number area

Ou apenas digite :set showbreak=----->qualquer sessão.

Para referência, minha trilha de pesquisa (Vim 6.2): :help 'wrap'-> :help 'linebreak'-> ( :help 'showbreak'-> :help 'cpoptions', :help 'breakat')


Muito legal, mas não é exatamente o que eu quis dizer. Você entendeu um pouco mais literalmente do que eu pretendia, então a culpa foi minha. Vou ver se consigo esclarecer.
retracile

1

A solução para sua pergunta pode ser obtida definindo dois parâmetros no seu vimrc:

Para quebrar as linhas com o mesmo recuo: set breakindent

E um espaço para recuar linhas com revestimento macio: let &showbreak=' '

Funcionará desta maneira:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |

0

Não é a resposta perfeita que você está procurando, mas aqui está o que eu faço para contornar a falta de recuo adequado do vim.

Primeiro, baixe o guia de indentação de Nathanael Kane (opcional), pois indica melhor em que nível de indentação você está, até o ponto em que você pode definir as larguras de tabulação em apenas 2 espaços!

Segundo, mapeie uma combinação de teclas para alternar a quebra de linha. Eu tenho o meu definido como 'r' para 'wrap' ('w' é para salvar) como

:noremap <leader>r :set nowrap! <CR>

Sempre tenho quebra de linha, já que é mais esteticamente agradável, e rapidamente a ativo se precisar editar a linha.


0

A "solução alternativa" que uso atualmente, é ter um recuo fixo mas grande no prefixo. Parece bom, desde que esse recuo fixo seja maior que o recuo da linha quebrada, que é o caso na maioria das vezes.

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.