Як зупинити розрив лінії у vim


257

Мені подобається, що довгі рядки відображаються на більш ніж одній термінальній лінії; Мені не подобається, що vim вставляє нові рядки в мій фактичний текст. Яку частину .vimrc я повинен змінити?


7
Для наочності: вам подобається, що довгі рядки відображаються на більш ніж одній термінальній лінії; вам не подобається, що vim вставляє нові рядки у власний текст? Якщо так, то :set nowrapце протилежне тому, що ви хочете :(.
Ендрю Ейлетт

@Andrew: так, ваше резюме саме те, що я хочу
Haiyuan Zhang

Відповіді:


304

Використовуйте

:set wrap

Візуально обертати рядки, тобто рядок залишається одним рядком тексту, але Vim відображає його у кількох рядках.

Використовуйте

:set nowrap

Щоб відобразити довгі рядки як один рядок (тобто вам потрібно прокрутити горизонтально, щоб побачити весь рядок).


3
Дякую за поради, хлопці. Я пішов з: встановити nowrap і: встановити textwidth = 0 чудово працює
Роберт Белтран

5
Коли я набираю текст, я все ще хочу бачити "візуальний" межа 80 стовпців, і я не хочу vim для автоматичного додавання каналу рядків, коли я друкую після 80-го колона. Як мені це зробити?
Олів'є Понс

7
Це точно відповідь, яку я шукав, але це не відповідь на питання ОП. Трохи оманливим є це як головна відповідь. Я не знаю, як виправити цю ситуацію. Я просто відредагував би вашу відповідь, щоб також відповісти на початкове запитання. Але вже є відповідна відповідь, яка майже так само голосується. Тому я просто проголосував за те, щоб переключити дві відповіді.
Даніель Дарабос

3
Це точно відповідь, яку я не шукав, і це не відповідь на питання ОП.
пілінг

Це не відповідь на запитання.

194

Мені подобається, що довгі рядки відображаються на більш ніж одній термінальній лінії

Таке візуальне / віртуальне обгортання рядків увімкнено за допомогою wrapпараметра вікна:

set wrap

Мені не подобається, що vim вставляє нові рядки в мій фактичний текст.

Щоб вимкнути обертання фізичної лінії, зніміть параметри textwidthта wrapmarginбуфер:

set textwidth=0 wrapmargin=0

1
Дякую! set textwidth=0 wrapmargin=0працює, але якщо я вклав це .vimrc, він не матиме ефекту, наприклад, для файлів із звичайним текстом. Як дізнатись та усунути перезапис?
qubodup

7
@qubodup Ви можете перевірити, чи щось перезаписав ваш .vimrc налаштування, відкривши файл, де ви бачите проблему, і ввівши :verbose set textwidth? wrapmargin?. Це покаже вам їх поточні значення, а також де вони були встановлені. Можливо, у вас є плагін, який їх перекриває. У такому випадку ви можете або видалити цей плагін, або спробувати змінити налаштування додатка пізніше під час виконання програми (наприклад:) ~/.vim/afterабо за допомогою власної автокоманди. Правильний підхід буде залежати від того, де / як відбувається його скидання.
Лоранс Гонсалвс

set wrapі set linebreakце те, що зробило це для мене.
Ілля Чолій

36

Я не впевнений, що я повністю розумію, але ви можете шукати налаштування конфігурації "formatoptions". Спробуйте щось подібне :set formatoptions-=t. tВаріант буде вставити розриви рядків , щоб зробити обтікання текстом в ширину набору по textwidth. Ви також можете помістити цю команду у свою .vimrc, просто видаліть двокрапку ( :).


3
Це мені здається найкращим варіантом для вирішення бажання ОП. Мені подобається те, що vim все ще показує вертикальну лінію на tw.
mitchus

3
Це єдина відповідь, яка насправді стосується питання ОП. Більшість інших робить навпаки. OP все ще хоче, щоб довгі рядки відображалися обгорнутими, але для vim не вставляти розриви рядків автоматично.
sebastian

33

Використовуйте :set nowrap.. працює як шарм!


10
За винятком того, що це робить протилежне тому, що ОП визначає як бажану поведінку ...: P
Морлок

5
@Morlock, але відповідає на запитання, яке я мав, і Google привів мене сюди :)
Ben Usman

чи є якась комбінація клавіш для цього?
Піні Чейні

@PiniCheyni, додайте у свій .vimrc файл: nnoremap <Cw>: встановіть invwrap <CR> Тоді ви можете використовувати Ctrl + W для перемикання обгортки тексту.
reason0n

30

:set tw=0

VIM не автоматично вставляє розриви рядків, але буде продовжувати обгортання рядків.


3
Я хочу точно навпаки ... це, коли я набираю, я все ще хочу бачити "візуальне" обмеження 80 стовпців, і я не хочу, щоб vim автоматично додав стрічку під час введення після 80-го колона. Як мені це зробити?
Олів'є Понс

16

Ви можете бути set lbrкорисними; з set wrapцим буде обгортатись, але лише розрізати лінію на пробілі, а не в середині слова.

напр

without lbr the li
ne can be split on
a word

і

with lbr on the
line will be
split on 
whitespace only

Настійно рекомендується уникати скорочень, оскільки в майбутньому вам доведеться здійснити пошук у довідковій системі, щоб зрозуміти, що ви вирішили, тому використовуйте set nolinebreakзамістьset lbr
SergioAraujo

12

set formatoptions-=t Зберігає візуальну ширину тексту, але не додає новий рядок у режимі вставки.


4

Дивно, що така проста установка вимагає, щоб ця кількість «hocus-pocus» працювала.

Щоб відповісти на ваше запитання зараз, мені здалося, що це поєднує наступне:

:set wrap linebreak nolist

(це, здається, запобігає розриву існуючих ліній, просто оберніть їх.)

І

set formatoptions=l

(це запобігає порушенню нових / відредагованих рядків, в той час як + = не робить це для мене, оскільки інші налаштування / плагіни, здається, знаходять простір і додають власні параметри, які замінюють мою.)


4

Якщо, як і я, ви використовуєте gVim в Windows, то ваш .vimrc файл може створювати ще один "приклад" файл Vimscript, який автоматично встановлює textwidth(у моєму випадку 78) текстові файли.

Моя відповідь на подібне запитання, як на це - Як зупинити обтікання тексту gVim у стовпці 80 - на сайті Exchange та Vim Stack Exchange :

У моєму випадку коментар Вітора запропонував виконати наступне:

:verbose set tw?

Це дало мені наступний результат:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

У vimrc_example.vim я знайшов відповідні рядки:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

І я виявив, що мій .vimrc шукає цей файл:

source $VIMRUNTIME/vimrc_example.vim

У моєму випадку я не хочу textwidthвстановлювати жодні файли, тому я просто прокоментував відповідний рядок у vimrc_example.vim .


1
Замість того, щоб редагувати файл vimrc_example.vim, я щойно додав autocmd FileType text setlocal textwidth=0у файл vimrc і вирішив проблему, коли інші запропоновані рішення цього не зробили.
GrandAdmiral

3

Правильно, що встановлений nowrap дозволить вам вставляти довгий рядок без vi / vim, додаючи нові рядки, але тоді візуально не буде обгорнута лінія для легкого читання. Замість цього потрібно прокрутити лише один довгий рядок.

Щоб візуально обгортати рядок, але не вставити символи нового рядка, встановіть обгортку (яка, мабуть, за замовчуванням, тому не потрібно встановлювати) та встановіть textwidth = 0 .

У деяких системах налаштування textwidth = 0 є типовим. Якщо ви вважаєте, що це не так, додайте встановлений textwidth = 0 у свій .exrc файл, щоб він став типовим для вашого користувача для всіх сеансів vi / vim.

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