1

Я пытаюсь использовать функциональность vim autowrap для автоматического переноса моего абзаца в строки длиной не более 80 букв в реальном времени при наборе текста. Это можно сделать, set textwidth=80 и set fo+=a . Вариант из VIM a или formatoptions в основном говорит Vim , чтобы обернуть весь пункт при вводе.

Тем не менее, есть очень неприятный побочный эффект, что я больше не могу разбить строку, просто нажав Enter.

Это примерное предложение.

Скажи за предложение выше, если я хочу сделать это в:

Это

образец предложения.

Обычно я могу просто переместить курсор на "а" и войти в режим вставки, а затем нажать клавишу ввода. Но после set fo+=a ничего не произойдет, когда я нажму enter в режиме вставки на "a". Я замечаю одну вещь: если между "is" и "a" нет пробела, нажатие клавиши "Enter" вставит пробел. Но больше ничего не случится после этого.

Так что мне здесь не хватает? Как мне остановить это раздражающее поведение?

2 ответа2

1

Автоформатирование звучит как приятная особенность, но на практике я никогда не нашел применения, за исключением чисто простых абзацев текста.

Вы правильно определили конфликт между автоматическим переносом Vim и необходимостью вручную влиять на разрывы строк. Автоформат формата Vim's :help autoformat предлагает следующее решение:

  • Вы должны правильно определить абзацы. Самым простым является абзацы, которые разделены пустой строкой. Если разделительной пустой строки нет, рассмотрите возможность использования флага 'w' и добавления пробела в конце каждой строки в абзацах, кроме последней.

Итак, с помощью :setlocal fo+=w , вы можете просто нажать <Enter> чтобы ввести жесткий разрыв. Недостатком является то, что все строки внутри абзацев имеют символ завершающего пробела.

0

После некоторого исследования я нашел обходной путь, который может решить проблему в некоторой степени, хотя и не идеально.

Основная идея заключается в том, что при вводе разрыва строки временно отключите автоматическую перенос при отправке <CR> и возобновите автоматическую перенос после этого. Есть несколько способов сделать это. И, насколько мне известно, лучше всего использовать режим вставки, поскольку вам не нужно выходить из режима вставки при входе в режим вставки. Так что просто введите следующие команды в любую привязку клавиш, которая вам нравится в режиме вставки. Тот, который я сейчас использую, - это inoremap <C-N> <F2><CR><F2>

Причина, по которой я считаю этот вариант неоптимальным, заключается в том, что по какой-то причине я не могу связать <Enter> таким образом, но должен использовать другой ключ.

Если <Enter> или <CR> можно настроить таким образом, то проблема решена на 100%.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .