Eu sei que existem maneiras de definir automaticamente a largura do texto no vim usando set textwidth
(como preocupações de layout de colunas do Vim 80 ). O que estou procurando é algo parecido com =
(o comando indent line), mas com quebra para 80. O caso de uso é que algumas vezes você edita texto com largura de texto e após unir linhas ou excluir / adicionar texto, ele sai mal embalado.
Idealmente, esse comando reorganizaria completamente as linhas que seleciono e cortaria as linhas longas enquanto adicionava as linhas curtas. Um exemplo:
long line is long!
short
Após executar o comando (assumindo que o envoltório tenha 13 cols):
long line is
long! short
Se isso não for possível com um comando vim verdadeiro, talvez haja um programa de linha de comando no qual eu possa canalizar a entrada?
Depois de pesquisar, encontrei esta referência que tem mais algumas opções: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. É fantástico!gq
- Gentleman's Quarterly . (Desculpas para antropomorfizar masculino, mas as obras mnemônicas.)Respostas:
Defina
textwidth
como 80 (:set textwidth=80
), vá para o início do arquivo (pode ser feito com Ctrl- Homeougg
) e digitegqG
.gqG
formata o texto a partir da posição atual e até o final do arquivo. Juntará automaticamente linhas consecutivas quando possível. Você pode colocar uma linha em branco entre duas linhas se não desejar que essas duas sejam unidas.fonte
V}gq
. Dessa forma, você vê o que irá formatar antes de realmente formatá-lo.q
por si só?set tw=80
vez deset textwidth=80
economizar temposet textwidth=76
suas linhas serão automaticamente quebradas durante a digitação. Minha reclamação é que ela não faz nada nas linhas existentes sendo editadas. MasV}gq
é extremamente útil nesse sentido.V
entra no modo de seleção visual,}
seleciona até a próxima quebra de parágrafo egq
executa o formatador atual nele (ou usegw
para chamar explicitamente o formatador vi). Além disso,{
irá selecionar para cima. Você pode selecionar todo o documento e formato com,ggVGgq
embora talvez haja uma maneira mais fácil. Salve isso como uma macro usando@
para facilitar. Usevipgq
para atualizar o parágrafo atual.A solução de Michael é a chave, mas na maioria das vezes acho que quero reformatar o restante do parágrafo atual; para esse comportamento, use
gq}
.fonte
Você pode usar
gq
com qualquer operador de movimento. Por exemplo, se você deseja reformatar apenas para o final da linha atual (ou seja, para quebrar a linha em que o cursor está), você pode usargq$
Você também pode reformatar selecionando texto no modo visual (usando `ve movendo) e digitando gq.
Existem outras opções para forçar linhas a serem quebradas também.
Se você quiser que o vim agrupe suas linhas enquanto estiver inserindo texto nelas, em vez de esperar até o final para reestruturar o texto, você encontrará essas opções úteis:
(Não seja desviado por
wrap
elinebreak
, que apenas reformata o texto exibido na tela e não altera o texto no buffer)fonte
wrapmargin
ajuda: Quando 'largura do texto' é diferente de zero, esta opção não é usada.Graças a um comentário do DonaldSmith, achei isso, pois a
textwidth
opção não reformatava minha longa linha de texto (eu estava convertendo a reprodução com conversões de hex para bytes)::%!fold -w 60
Isso reformatou o arquivo inteiro (que era uma linha para mim) em linhas de comprimento 60.
fonte
Se você está procurando uma maneira que não seja o Vim , sempre há os comandos UNIX fmt e par .
Notas:
par
em seu webcast.Veja como usaríamos os dois no seu exemplo.
Para usar de dentro do Vim:
Você também pode definir
:formatprg
para par ou fmt e substituirgq
. Para mais informações, ligue:help formatprg
para o Vim.fonte
Quase sempre eu uso
gq
no modo visual. Digo aos meus alunos que significa "Gentlemens 'Quarterly", uma revista para pessoas exigentes.fonte