М'яке обгортання на 80 символів у Vim у вікні довільної ширини


126

Я хочу використовувати функцію м'якого обгортання Vim ( :set wrap), щоб обернути деякий код на 80 символів, незалежно від фактичної ширини вікна.

Мені ще не вдалося знайти спосіб це зробити - все м'яке обгортання здається прив’язаним до ширини вікна

  • textwidthі wrapmarginобидва для жорсткого обгортання (вони вставляють символи нового рядка у файл)
  • вертикальний поділ на кілька вікон та використання :vertical resize 80(можливо, з :set breakat=можливістю перерв на будь-який символ) для одного з них свого роду робіт (навіть якщо це трохи хакіш), але розривається при використанні, :set numberоскільки номери рядків займають змінну кількість стовпців (залежно на довжину файлу), і це частина 80.

Чи можна це зробити в vim? За іншими джерелами, це не виглядає перспективно .

Наразі моє наближення полягає лише в тому, щоб я був /^.\{80}\zs.\+моїм пошуком за замовчуванням, щоб він був принаймні виділений. Я думав над тим, щоб додати :syntaxелемент до нього, але він зламався, коли він перекривав інші елементи синтаксису, тому я кинув цю ідею.


Насправді, як ви налаштували пошук за замовчуванням?
thethinman

Відповіді:


37

Ти міг

  • встановити велику мінімальну ширину для стовпчика номерів рядків через :set numberwidth=6і
  • тоді ви можете змінити розмір вікна :set columns=86(або за допомогою миші) до потрібного розміру.

Якщо ви відредагуєте файл з мільйонам рядків, у вас можуть виникнути проблеми, але це малоймовірно. Ви також витрачаєте 6 стовпців екранної нерухомості. Тож є ще всілякі проблеми.

Ви можете виділити повз 80-й стовпчик, використовуючи так, :matchяк написано тут і тут .

Крім цього я не бачу жодного способу зробити це. Схоже, це було б приємною особливістю.


На жаль, vim не зберігає налаштування стовпців, якщо розмір вікна буде змінено. Це призводить до невдалої ситуації з керуючими плитками вікон, де немає хорошого способу м'якого загортання до 80 стовпців, якщо вікно занадто широке.
гравітація

Це працює, але це не липко. Я думаю, що наступним кроком є ​​встановлення autocmd для збереження стовпців у новому потрібному розмірі для потрібних типів файлів.
xer0x

1
Це правильна відповідь, оскільки вона підтверджує, що ви цього не можете зробити. І я впевнений, що я не єдиний, хто не хоче змінити розмір вікна мого терміналу саме для цього. Я хочу набагато більше ширини для неіснуючих програм.
Шрідхар Сарнобат

20

Спробуйте це:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Ви можете видалити, if (&columns > 80) |якщо завжди потрібно 80 стовпців.


На моєму терміналі iTerm це робить вікно меншим. Я не впевнений, чи це проблема з моїм оточенням (я бачу, ви робите щось із автоматичним зміною розміру), але в іншому випадку це не бажано. Дякую за пропозицію, хоча.
Шрідхар Сарнобат

Autocmd мені прекрасно працював (використовуючи термінал guake).
mzcarlos

Працює як шарм із Tmux + NeoVim в Alacritty.
meh

16

У мене немає рішення для м'якого обгортання, але що стосується маркування стовпця, то Vim 7.3 (випущений 2010-08-15) :set colorcolumn=80виділить стовпчик 80. Колір залежатиме від вашого синтаксичного файлу.

Див Vim 80 колонки макету проблеми , :h colorcolumn.


Котирування не є дійсною URL-адресою, тому це має сенс. Ім'я якоря не повинно містити недійсних символів URL-адреси, тому не слід виправляти помилки інших розробників сайтів.
Shadow Wizard - це вухо для вас

1
Shadow Wizard посилається на попередню редакцію моєї відповіді, в якій мені цікаво, як розмістити одинарні лапки в URL-адресах за допомогою Markdown. Тоді ib запропонував використовувати% 27, що спрацювало. Дякую, ib.
ftvs

Нещодавно з'ясувалося, як виділити стовпчики лише останні 80 ~:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
чемпіон

colorwidthРіч корисно і з інших причин, тому я радий , що ти написав це.
Шрідхар Сарнобат

2

Ви пробували 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.

3
Хм ... але breakatце лише візерунок (не довжина), тому я не бачу, як я міг би використовувати це, щоб змусити м'яке обгортання у 80 ....
чемпіон

Хммм, мені цікаво, чи можна зробити регулярний вираз, який відповідатиме словам, загальна довжина (плюс пробіли між ними) менша або дорівнює n знаків.
Шейн Крейтон-Янг

@ ShaneCreighton-Young: ^.{,80}\bзробить це для людей, які використовують м'які / розширені вкладки. Зауважте, що це perge regex, а не vim regex.
Марк К Коуан

0

Немає хорошого способу це зробити. Ми можемо зламати імпровізований setlocal softwrapз , autocmdякщо ми змінимо @eborisch відповіді. Якщо ми змінюємо розмір кожного разу, коли вводимо буфер, і змінюємо розмір до певної довжини, коли встановлюється локальна змінна softwrap, ми отримуємо потрібну поведінку.

Припустимо, що ми хочемо м'яко обернути до 80 стовпців, ми можемо записати наступне в .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

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

let b:softwrap=1
set columns=80

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