Jak zatrzymać łamanie linii w vimie

257

Podoba mi się, że długie linie są wyświetlane na więcej niż jednej linii końcowej; Nie podoba mi się, że vim wstawia nowe wiersze do mojego faktycznego tekstu. Którą część .vimrc powinienem zmienić?

Haiyuan Zhang
źródło
7
Dla jasności: podoba Ci się, że długie linie są wyświetlane na więcej niż jednej linii końcowej; nie podoba ci się to, że vim wstawia nowe wiersze do tekstu? Jeśli tak, to :set nowrapjest przeciwieństwo tego, co chcesz :(.
Andrew Aylett
@Andrew: tak, twoje streszczenie jest dokładnie tym, czego chcę
Haiyuan Zhang

Odpowiedzi:

304

Posługiwać się

:set wrap

Aby zawijać linie wizualnie, tj. Linia jest nadal jedną linią tekstu, ale Vim wyświetla ją na wielu liniach.

Posługiwać się

:set nowrap

Aby wyświetlić długie linie jako jedną linię (tzn. Musisz przewinąć w poziomie, aby zobaczyć całą linię).

Brian Rasmussen
źródło
3
Dziękuję za wskazówki. Poszedłem z: set nowrap i: set textwidth = 0 działa świetnie
Robert Beltran
5
Kiedy piszę, nadal chcę zobaczyć „wizualny” limit 80 kolumn i nie chcę, aby vim automatycznie dodawał znak wiersza, gdy piszę po 80. kolumnie. Jak mam to zrobić?
Olivier Pons,
7
To jest dokładnie odpowiedź, której szukałem, ale to nie jest odpowiedź na pytanie OP. To trochę mylące, mając to jako najlepszą odpowiedź. Nie wiem jak to naprawić. Chciałbym po prostu edytować twoją odpowiedź, aby odpowiedzieć również na oryginalne pytanie. Ale jest już właściwa odpowiedź, która jest prawie tak samo wysoko głosowana. Właśnie głosowałem, aby zamienić dwie odpowiedzi.
Daniel Darabos
3
To jest właśnie odpowiedź Ja nie szukam, i to nie odpowiedź na pytanie OP.
peeol
To nie jest odpowiedź na pytanie.
194

Podoba mi się, że długie linie są wyświetlane na więcej niż jednej linii terminala

Ten rodzaj wizualnego / wirtualnego zawijania linii jest włączony z wrapopcją okna:

set wrap

Nie podoba mi się, że vim wstawia nowe wiersze do mojego faktycznego tekstu.

Aby wyłączyć fizyczne zawijanie linii, usuń obie opcje textwidthi wrapmarginopcje bufora:

set textwidth=0 wrapmargin=0
Laurence Gonsalves
źródło
1
Dzięki! set textwidth=0 wrapmargin=0działa, ale jeśli go włożę .vimrc, nie będzie to miało wpływu na przykład na zwykłe pliki tekstowe. Jak znaleźć i wyeliminować zastąpienie?
qubodup
7
@qubodup Możesz sprawdzić, czy coś zastępuje twoje ustawienie .vimrc, otwierając plik, w którym widzisz problem i wprowadzając :verbose set textwidth? wrapmargin?. Dzięki temu dowiesz się, jakie są ich bieżące wartości, a także gdzie zostały ustawione. Możliwe, że masz wtyczkę, która je przesłania. W takim przypadku możesz albo odinstalować tę wtyczkę, albo spróbować przesłonić ustawienie wtyczki później w swojej ścieżce uruchomieniowej (np .:) ~/.vim/afterlub za pomocą własnego polecenia automatycznego. Właściwe podejście będzie zależeć od miejsca / sposobu resetowania.
Laurence Gonsalves,
set wrapi set linebreakco mi to zrobiło.
Ilia Choly
36

Nie jestem pewien, czy rozumiem całkowicie, ale być może szukasz ustawienia konfiguracji „formatformions”. Spróbuj czegoś takiego :set formatoptions-=t. tOpcja wstawi podziały wiersza, aby oblewanie tekstem na szerokość zestawu przez textwidth. Możesz także umieścić to polecenie w swoim .vimrc, po prostu usuń dwukropek ( :).

Erik Hesselink
źródło
3
Wydaje mi się to najlepszą opcją na spełnienie życzeń PO. Podoba mi się fakt, że vim wciąż pokazuje pionową linię na tw.
Mitchus,
3
To jedyna odpowiedź na pytanie OP. Większość innych robi coś przeciwnego. OP nadal chce, aby długie linie były wyświetlane zawijane, ale aby vim nie wstawiał automatycznie podziałów linii.
sebastian
33

Użyj :set nowrap.. działa jak urok!

Vatsala
źródło
10
Tyle, że robi to odwrotnie niż to, co OP określa jako pożądane zachowanie ...: P
Morlock
5
@Morlock, ale odpowiada na pytanie, które miałem, a Google zaprowadziło mnie tutaj :)
Ben Usman
czy jest do tego skrót klawiaturowy?
Pini Cheyni
@PiniCheyni, dodaj do pliku .vimrc: nnoremap <Cw>: ustaw invwrap <CR> Następnie możesz użyć Ctrl + W, aby przełączyć zawijanie tekstu.
reas0n
30

:set tw=0

VIM nie wstawi automatycznie podziałów linii, ale będzie owijał linie.

orip
źródło
3
Chcę dokładnie odwrotnie ... kiedy piszę, nadal chcę zobaczyć „wizualny” limit 80 kolumn i nie chcę, aby vim automatycznie dodawał znak wiersza, gdy piszę po 80. kolumnie. Jak mam to zrobić?
Olivier Pons,
16

Może się set lbrprzydać; zset wrap tym zawija się, ale przecina tylko linię na białych znakach, a nie w środku słowa.

na przykład

without lbr the li
ne can be split on
a word

i

with lbr on the
line will be
split on 
whitespace only
Davetapley
źródło
Zdecydowanie zaleca się unikanie skrótów opcji, ponieważ w przyszłości będziesz musiał przeprowadzić wyszukiwanie w systemie pomocy, aby zrozumieć, co zostało ustalone, więc używaj set nolinebreakzamiastset lbr
SergioAraujo
12

set formatoptions-=t Zachowuje wizualną szerokość tekstu, ale nie dodaje nowej linii w trybie wstawiania.

Jimmy Tran
źródło
4

Dziwne, że tak proste ustawienie wymagałoby takiej ilości „ogniskowania”.

Aby odpowiedzieć teraz na twoje pytanie, wydawało mi się, że działa z kombinacją następujących elementów:

:set wrap linebreak nolist

(wydaje się, że zapobiega to łamaniu się istniejących linii, po prostu zawiń).

I

set formatoptions=l

(zapobiega to łamaniu się nowych / edytowanych linii, podczas gdy + = nie robi tego dla mnie, ponieważ inne ustawienia / wtyczki wydają się znajdować przestrzeń i dodawać własne opcje, które zastępują moje.)

petroslamb
źródło
4

Jeśli, podobnie jak ja, uruchamiasz gVim w systemie Windows, to twój plik .vimrc może pozyskiwać inny „przykładowy” plik Vimscript, który automatycznie ustawia textwidth(w moim przypadku 78) dla plików tekstowych.

Moja odpowiedź na podobne pytanie jak to - Jak zatrzymać zawijanie tekstu gVima w kolumnie 80 - na stronie Vi i Vim Stack Exchange :

W moim przypadku komentarz Vitora sugerował uruchomienie następujących czynności:

:verbose set tw?

Dzięki temu uzyskałem następujące dane wyjściowe:

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

W vimrc_example.vim znalazłem odpowiednie linie:

" 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

  ...

I odkryłem, że mój plik .vimrc pozyskuje ten plik:

source $VIMRUNTIME/vimrc_example.vim

W moim przypadku nie chcę textwidthbyć ustawiony dla żadnych plików, więc po prostu skomentowałem odpowiedni wiersz w vimrc_example.vim .

Kenny Evitt
źródło
1
Zamiast edytować plik vimrc_example.vim, właśnie dodałem autocmd FileType text setlocal textwidth=0do pliku vimrc i to rozwiązało problem, gdy inne proponowane rozwiązania tego nie zrobiły.
GrandAdmiral
3

Prawidłowy jest ten zestaw nowrap pozwoli ci wkleić długą linię bez dodawania nowych linii przez vi / vim, ale wtedy linia nie jest wizualnie zawijana dla łatwego czytania. Zamiast tego jest tylko jedna długa linia, którą należy przewijać.

Aby linia była zawijana wizualnie, ale nie zawierała znaków nowej linii, ustaw zawijanie (co jest prawdopodobnie ustawieniem domyślnym, więc nie trzeba go ustawiać) i ustaw szerokość tekstu = 0 .

W niektórych systemach ustawienie textwidth = 0 jest domyślne. Jeśli nie uważasz, że tak jest, dodaj set textwidth = 0 do pliku .exrc, aby stał się domyślnym użytkownikiem dla wszystkich sesji vi / vim.

Cruciverbalist
źródło