vim zawijanie linii z wcięciem

20

Vim / gvim zawinie długie linie w następujący sposób:

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

Czy istnieje sposób, aby Vim owinął takie wiersze w ten sposób:

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

Chcę, aby owinięta linia zaczynała się nieco za wcięciem jej początku. (Żeby było jasne, mówię o zawijaniu, a nie o szerokości tekstu).

Chcę, aby wcięcie linii było uwzględniane podczas zawijania tej linii, aby struktura kodu nie była ukryta przez zawijane linie.

retracile
źródło

Odpowiedzi:

17

AKTUALIZACJA: Ta funkcjonalność wylądowała w wersji 7.4.338, chociaż będziesz potrzebować wersji 7.4.354 lub nowszej .


Widocznie wymaga to łatki do Vima . Jest łatka Vaclava Smilauera z 2007 roku. Zaktualizowałem łatkę do pracy z Vimem 7.2.148 z Fedory 11. Ale wydaje się, że działa.

retracile
źródło
1
Gdy Fedora wydaje aktualizacje do Vima, aktualizuję łatkę. Najnowsze informacje można znaleźć na stronie retracile.net/wiki/VimBreakIndent .
retracile
Bonus wskazuje osobę, która może wyjaśnić, jak to zrobić, aby współpracować z MacVimem.
pączki
Gdzie jest łatka? Ta strona nie prowadzi do żadnego z nich
puk
@puk: Niestety, znaczna aktualizacja oprogramowania zmieniła niektóre lokalizacje linków. Naprawiłem je teraz.
retracile
1
Na dzień dzisiejszy (25 czerwca 2014 r.) Łata breakindent jest oficjalnie częścią Vima 7.4 - jest dodawana przez łatkę 338 i 345.
Heptite
14

W twoim .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

Lub po prostu wpisz :set showbreak=----->dowolną sesję.

Dla porównania, mój szlak badawczy (Vim 6.2): :help 'wrap'-> :help 'linebreak'-> ( :help 'showbreak'-> :help 'cpoptions', :help 'breakat')

Chris Johnsen
źródło
Bardzo fajnie, ale nie tak naprawdę o co mi chodziło. Wziąłeś to trochę bardziej dosłownie, niż zamierzałem, więc moja wina. Zobaczę, czy mogę to wyjaśnić.
retracile
1

Rozwiązanie twojego pytania można osiągnąć ustawiając dwa parametry w swoim vimrc:

Aby przerwać linie z tym samym wcięciem: set breakindent

I jedno miejsce na wcięcie miękko owiniętych linii: let &showbreak=' '

Będzie to działać w ten sposób:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |
aturegano
źródło
0

Nie jest to idealna odpowiedź, której szukasz, ale oto, co robię, aby ominąć brak właściwego wcięcia vima.

Najpierw pobierz przewodnik wcięcia Nathanaela Kane'a (opcjonalnie), ponieważ lepiej pokazuje, na jakim poziomie wcięcia jesteś, nawet do tego stopnia, że ​​możesz ustawić szerokość tabulacji na 2 spacje!

Po drugie, zamapuj kombinację klawiszy, aby przełączyć zawijanie słów. Mam mój ustawiony na „r” dla „wrap” („w” oznacza zapisywanie) w ten sposób

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

Potem zawsze zawijam słowo, ponieważ jest to bardziej estetyczne i szybko włączam, jeśli muszę edytować wiersz.

puk
źródło
0

Złe „obejście”, którego obecnie używam, to mieć stałe, ale duże wcięcie w prefiksie. Wygląda dobrze, o ile to ustalone wcięcie jest większe niż wcięcie owiniętej linii, co ma miejsce przez większość czasu.

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 
Aaron Thoma
źródło