Як в VIM, як я розбиваю один дійсно довгий рядок на кілька рядків?


169

Скажіть, у мене в редакторі VIM є дуже довгий рядок (скажімо, близько 300 і більше символів). Як би я розбив це на кілька рядків, щоб межі слова приблизно розбивались на 80 символів?

Приклад:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line

до

This is a really long line 
This is a really long line
This is a really long line
This is a really long line
This is a really long line
This is a ...

Відповіді:


254

Vim робить це дуже легко (перерив рядків на межі слів).

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

Я б запропонував вам перевірити :help gqі :help gw.

Також встановлення textwidth ( tw) надасть вам автоматичний розрив рядка при перевищенні під час введення тексту. Він також використовується gq, хоча якщо вимкнено gqперерву на розмір вікна або 79 залежно від того, який перший.

:set tw=80

Якщо встановити параметри формату для включення ширини тексту, vim автоматично перерветься при налаштуванні tw.

:set fo+=t

5
Отже, для вашого випадку gqкомандою буде <ESC>(вийти з режиму "Вставити / Замінити / тощо"), а потімgq80l
MidnightLightning

6
Це протилежність Ctrl + j (об'єднує кілька ліній в одну).
Ізмір Рамірес

9
Вім ніколи не перестає мене дивувати. Це чисте золото.
Jondlm

10
тільки для наступної людини, яка знайде це, gq тільки не зможе розділити рядок суцільного тексту, йому потрібно пробіл, щоб зробити свою справу
stringy05

2
[бігає gqq] aaaahhh, це красиво
підкреслюй_14

85

Спочатку встановіть vim так, щоб він розумів, що потрібно 80 символів:

:set tw=80

потім, hilight лінії:

V

і зробіть Vim переформатувати його:

gq

17

Це насправді не пов’язано з VIM, але ви можете використовувати програму fmt як в

$ fmt myfile

38
:%! fmt% "Зробити це vim пов'язано :)
Максим Слойко

2
Корисно для vi, хоча я вважаю за краще gqq on vim.
WhyNotHugo

13

Для суцільних рядків тексту виділіть область, використовуючи v у звичайному режимі, а потім натисніть

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

Це додасть новий рядок наприкінці кожного 80-го символу.

:s/       replaces within the current select
\v        uses regular expressions
(.{80})   selects 80 characters & placed them into group one
\1\r      replaces group one with group one and a newline

Це єдине рішення, яке працювало на довгій строці base64.
jviotti

6

Якщо ви перебуваєте на * nix, ви, мабуть, у вас foldє.

Виберіть регіон, який ви хочете використовувати v, і ви можете розділити місця на ширину 80, використовуючи:

!fold --spaces --width=80

Це по суті те саме, що використовувати gq.

Однак, якщо ви просто хочете перейти на символ 80 і не обмежуватися просторами білого кольору, ви можете використовувати:

!fold --width=80

Якщо ви хочете його одним натисканням клавіші, просто встановіть картування - я використав

vmap <f1> !fold --width=80<CR>


Це відповідь, що працює для довгих рядків, не розділених пробілом. На macOS вам може знадобитися використовувати gfold замість fold.
Аарон Д

на mac os, мені довелося зробити! fold -w 80
user674669

5

Щоб розділити довгі рядки в повному документі, не знімаючи вже наявних розривів рядків, використовуйте:

:set formatoptions+=w
:set tw=80
gggqG

4

Мені потрібно було переформатувати цілий файл, а не один рядок. Як вказує Вернсі, я міг би використовувати "fmt", але наступна послідовність у vim також зробила трюк (запозичивши різні відповіді тут):

<ESC>
:setl tw=80 fo=t
1GVGgq

3

Як швидкий і неприємний, можливо, спробуйте наступну карту:

map q 080lwbels<CR><ESC>

який говорить:

  • почати 0-ту позицію рядка,
  • перейти до 80-го знака праворуч,
  • перейти до початку наступного слова,
  • повернутися до попереднього слова,
  • перейти до кінця поточного слова,
  • піти на один знак право, і
  • замінити CR на цю характеристику.

Тоді натискання q та CR розбиває лінію на шматки на межі слова.


0

Я вручну вставляв "\" (а потім CR / вкладку для форматування) у кожну LONGLINE після останнього пробілу, але перед стовпцем 80. Тобто:

1 this is a long, long, line

зараз схоже

1 this is a long, \
        long line

і компілюється нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.