Як в 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.