Como parar a quebra de linha no vim

257

Gosto que as longas filas sejam exibidas em mais de uma linha de terminal; Não gosto que o vim insira novas linhas no meu texto real. Qual parte do .vimrc devo mudar?

Haiyuan Zhang
fonte
7
Para maior clareza: você gosta que as linhas longas sejam exibidas em mais de uma linha terminal; você não gosta que o vim insira novas linhas no seu texto real? Se sim, então :set nowrapé o oposto do que você deseja :(.
Andrew Aylett
@ Andrew: sim seu resumo é exatamente o que eu quero
Haiyuan Zhang

Respostas:

304

Usar

:set wrap

Para quebrar as linhas visualmente, ou seja, a linha ainda é uma linha de texto, mas o Vim a exibe em várias linhas.

Usar

:set nowrap

Para exibir linhas longas como apenas uma linha (ou seja, você precisa rolar horizontalmente para ver a linha inteira).

Brian Rasmussen
fonte
3
Obrigado pelas dicas, pessoal. Eu fui com: set nowrap e: set textwidth = 0 funciona muito bem
Robert Beltran
5
Quando digito, ainda quero ver o limite "visual" de 80 colunas e não quero que o vim adicione automaticamente o feed de linha quando digito após o 80º colomn. Como eu faço?
Olivier Pons
7
Esta é exatamente a resposta que eu estava procurando, mas não é a resposta para a pergunta do OP. É um pouco enganador ter isso como a resposta principal. Não sei como consertar essa situação. Gostaria apenas de editar sua resposta para também responder à pergunta original. Mas já existe uma resposta adequada que é quase tão votada. Então, apenas votei para mudar as duas respostas.
Daniel Darabos 8/03/16
3
Esta é exatamente a resposta que eu estava não procurando, e é não a resposta à pergunta do OP.
Peeol
Esta não é uma resposta para a pergunta.
194

Eu gosto que as longas filas sejam exibidas em mais de uma linha terminal

Esse tipo de quebra de linha visual / virtual é ativado com a wrapopção da janela:

set wrap

Não gosto que o vim insira novas linhas no meu texto real.

Para desativar a quebra automática de linha, limpe as opções textwidthe wrapmarginbuffer:

set textwidth=0 wrapmargin=0
Laurence Gonsalves
fonte
1
Obrigado! set textwidth=0 wrapmargin=0funciona, mas se eu colocá-lo .vimrc, ele não tem efeito, por exemplo, para arquivos de texto sem formatação. Como descubro e elimino a substituição?
qubodup
7
@qubodup Você pode testar se algo está sobrescrevendo sua configuração .vimrc, abrindo um arquivo em que você vê o problema e entra :verbose set textwidth? wrapmargin?. Isso informará seus valores atuais e também onde eles foram definidos. É possível que você tenha um plugin que os substitua. Nesse caso, você pode desinstalar esse plug-in ou tentar substituir a configuração do plug-in posteriormente no seu caminho de execução (por exemplo:) ~/.vim/afterou com seu próprio comando automático. A abordagem correta dependerá de onde / como está sendo redefinida.
Laurence Gonsalves
set wrape set linebreaké o que fez isso por mim.
Ilia Choly
36

Não sei se entendi completamente, mas você pode estar procurando a configuração 'formatoptions'. Tente algo parecido :set formatoptions-=t. A topção irá inserir quebras de linha para tornar o texto quebrado na largura definida por textwidth. Você também pode colocar este comando no seu .vimrc, basta remover os dois pontos ( :).

Erik Hesselink
fonte
3
Essa me parece a melhor opção para atender ao desejo do OP. Gosto do fato de o vim ainda mostrar uma linha vertical em tw.
Mitchus
3
Esta é a única resposta que realmente aborda a questão do OP. A maioria dos outros faz o oposto. O OP ainda quer que as linhas longas sejam exibidas, mas para o vim não inserir quebras de linha automaticamente.
sebastian
33

Use :set nowrap.. funciona como um encanto!

Vatsala
fonte
10
Só que ele faz o oposto do que os define OP como o comportamento queria ...: P
Morlock
5
@Morlock, mas responde à pergunta que eu tinha e Google levou-me aqui :)
Ben Usman
existe algum atalho de teclado para isso?
Pini Cheyni
@PiniCheyni, adicione ao seu arquivo .vimrc: nnoremap <Cw>: configure invwrap <CR> Em seguida, você pode usar Ctrl + W para alternar a quebra de texto.
Reas0n
30

:set tw=0

O VIM não insere automaticamente quebras de linha, mas mantém a quebra de linha.

orip
fonte
3
Eu quero exatamente o oposto ... quando digito, ainda quero ver o limite "visual" de 80 colunas e não quero que o vim adicione automaticamente o feed de linha quando digito após a colônia 80. Como eu faço?
Olivier Pons
16

Você pode achar set lbrútil; com set wrapisso envolverá, mas apenas cortará a linha no espaço em branco e não no meio de uma palavra.

por exemplo

without lbr the li
ne can be split on
a word

e

with lbr on the
line will be
split on 
whitespace only
Davetapley
fonte
É altamente recomendável evitar opções abreviadas, porque no futuro você terá que fazer uma pesquisa no sistema de ajuda para entender o que foi resolvido, então use-o em set nolinebreakvez deset lbr
SergioAraujo
12

set formatoptions-=t Mantém a largura do texto visual, mas não adiciona nova linha no modo de inserção.

Jimmy Tran
fonte
4

É estranho que uma configuração tão simples exija essa quantidade de 'hocus-pocus' para funcionar.

Para responder sua pergunta agora, para mim parecia funcionar com a combinação do seguinte:

:set wrap linebreak nolist

(isso parece impedir a quebra das linhas existentes, basta quebrar.)

E

set formatoptions=l

(isso evita que linhas novas / editadas quebrem, enquanto + = não faz isso por mim, pois outras configurações / plugins parecem encontrar espaço e adicionar suas próprias opções que substituem as minhas.)

petroslamb
fonte
4

Se, como eu, você estiver executando o gVim no Windows, o arquivo .vimrc poderá estar fornecendo outro arquivo 'exemplo' do Vimscript que automaticamente define textwidth(no meu caso 78) para arquivos de texto.

Minha resposta a uma pergunta semelhante a esta - Como parar o texto do gVim na coluna 80 - no site do Vi e Vim Stack Exchange :

No meu caso, o comentário de Vitor sugeriu que eu execute o seguinte:

:verbose set tw?

Fazer isso me deu a seguinte saída:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

No vimrc_example.vim , encontrei as linhas relevantes:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

E descobri que meu .vimrc está fornecendo esse arquivo:

source $VIMRUNTIME/vimrc_example.vim

No meu caso, não quero textwidthser definido para nenhum arquivo, então apenas comentei a linha relevante em vimrc_example.vim .

Kenny Evitt
fonte
1
Em vez de editar o arquivo vimrc_example.vim, acabei de adicionar autocmd FileType text setlocal textwidth=0ao arquivo vimrc e isso corrigia o problema quando outras soluções propostas não o faziam.
GrandAdmiral 8/08/19
3

É correto que a configuração nowrap lhe permita colar em uma linha longa sem o vi / vim adicionar novas linhas, mas a linha não será visualizada automaticamente para facilitar a leitura. É apenas uma linha longa que você precisa percorrer.

Para que a linha seja quebrada visualmente, mas não tenha caracteres de nova linha inseridos, defina a quebra automática (que provavelmente é o padrão, portanto não é necessário definir) e defina a largura do texto = 0 .

Em alguns sistemas, a configuração de largura de texto = 0 é o padrão. Se não for esse o caso, adicione set textwidth = 0 ao seu arquivo .exrc para que ele se torne o padrão do usuário para todas as sessões do vi / vim.

Cruciverbalist
fonte