2009-05-05 13 views
89

Miejmy środków względnych. My Vim wygląda następująco:Jak mogę zawinąć tekst w Vimie? speak

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc 

chciałbym go mieć mniejszy:

aaaaa 
aaaaa 
bbbbb 
bbbbb 
ccccc 
ccccc 
etc 

Jak mogę ją dostać? Jak mogę zarządzać ustawianiem długości takiego bloku?

+0

Czy to znaczy zawijać tekst, a nie tekst wcięcia? –

+0

lc: Nie znam różnicy. Miałem zamiar napisać okład tak, jak mi polecono, ale nigdy nie pracowałem. –

Odpowiedz

164

Rzeczywiście można zrobić dwie rzeczy:

  1. Let formatu vim (tj zmień) tekst, aby mieć krótsze linie, wstawiając linie podziału
  2. Pozostaw linie jak są, ale wyświetlacz je zawinięte

Które chcesz?

Opcja 1 zostałaby osiągnięta poprzez ustawienie textwidth (na przykład :set textwidth=30 (z odpowiedzi Swaaropa)). Następnie można sformatować tekst, podświetlając ją (w trybie wizualnym) i wpisując gq.

Opcję 2 można przełączać, uruchamiając :set wrap lub :set nowrap.

Obie są niezależne.

+30

+1 dla polecenia gq key z trybu wizualnego, który jest niesamowicie użyteczny. –

+23

Również przydatny jest 'gq}' - format na końcu akapitu. –

+3

FYI to łamie przestrzenie, a gqgq nic nie robi z linią pokazaną w pytaniu, nawet jeśli tw = 5. – dlamblin

21

Korzystanie krotnie (1) jest jedną z możliwości:

:%!fold -w5 

Wynik:

aaaaa 
aaaaa 
aaa 
bbbbb 
bbbbb 
bbb 
ccccc 
ccccc 
ccc 
+4

Zakłada to, że zainstalowane jest polecenie 'fold'. –

+1

To również nie przestrzega przestrzenie dla składanych – Lionel

+7

@Lionel: Tak. Aby szanować spacje, dodaj opcję "-s" do polecenia fold. – sleske

14
:set textwidth=30 
+0

W jaki sposób obsługiwana jest szerokość tekstu, gdy nie ma spacji, np. W oryginalnym plakacie? Grałem i wydaje mi się, że formatuje się na podstawie szerokości tekstu, jeśli są spacje (lub z założenia, jeśli zmienna breakat jest ustawiona na coś innego). – Andy

+3

@Andy 'textwidth' nie obsłuży sytuacji braku spacji. Możesz napisać własną funkcję 'formatexpr', aby to zrobić. –

+0

Dzięki, przyjrzę się formatexpr – Andy

54

Po ustawieniu „textwidth”, można zaznaczyć tekst w trybie Visual i naciśnij GQ owinąć go ładnie (można też użyć Q na niektórych starszych konfiguracjach/Legacy).

Kilka przydatnych wskazówek:

gqgq (wrap the current line) 
gq} (wrap this 'paragraph', i.e. until the next blank line) 
:h gq 
+3

+1, przypadkowo uderzyłem gq w vimie, spędziłem ostatnie pół godziny próbując zobaczyć, co to było, trafiłem. Jest to bardzo przydatne. – user176121

+4

Myślę, że drugie polecenie powinno w rzeczywistości być 'gq}'. – Martey

+0

Myślę, że pierwsze polecenie można uprościć do 'gq $' – wil93

7

Jeśli masz tekst bez spacji, które chcesz przerwać na pewnej długości, nie jest ani konieczne użycie zewnętrznego fold ani pisać własne formatexpr.

:%s/\(.\{80\}\)/\1\r/g

złamie wszystkie linie na 80 znaków.

+1

Ten zapisał mój dzień podczas wskrzeszania certyfikatu OpenSSL. Dziękuję Ci –

Powiązane problemy