Жесткая упаковка в VIM без присоединения

1105
Miles

Вим новичок здесь. Как жестко обернуть обычный текст в vim (вставляя фактические разрывы строк ), соблюдая границы слов, не соединяя существующие строки ?

Например, учитывая это:

Lorem ipsum dolor sit amet, consectetur adipiscing elit.  - Nulla cursus accumsan faucibus. - Donec dapibus dignissim ullamcorper.  Integer nec malesuada diam. 

Я хотел бы получить (с textwidth = 30):

Lorem ipsum dolor sit amet, consectetur adipiscing elit.  - Nulla cursus accumsan faucibus. - Donec dapibus dignissim ullamcorper.  Integer nec malesuada diam. 

вместо этого (с которым я могу получить gggqG)

Lorem ipsum dolor sit amet, consectetur adipiscing elit.  - Nulla cursus accumsan faucibus. - Donec dapibus dignissim ullamcorper.  Integer nec malesuada diam. 

Кроме того, для бонусных баллов: когда я создаю новый буфер, я получаю другое поведение переноса (строки, начинающиеся с - не переносятся специально), чем когда я открываю файл, заканчивающийся на .txt. Что контролирует это? Я не замечаю никакой разницы в выводе :set filetype?или :filetype.

3

1 ответ на вопрос

3
garyjohn

Для первого вопроса используйте

:%normal gqq 

Это будет выполняться gqqв каждой строке в отдельности.

Я не знаю ответа на второй вопрос, но это может быть результатом автокоманды, вызванной суффиксом .txt, который изменяется 'formatoptions'или 'comments'без установки 'filetype'. Вы можете выполнить

:verbose set fo? com? 

чтобы увидеть, где эти параметры были установлены в последний раз. Некоторые дистрибутивы GNU / Linux помещают свои собственные команды конфигурации Vim в / etc / vimrc или / usr / share / vim / vimrc.

Спасибо! Как ни странно, это не делает весь файл; он останавливается на 70% пути и говорит «еще 6 строк» ​​(хотя осталось гораздо больше, чем 6 строк). Повторение команды приводит к 95% и говорит «еще 5 строк», и еще раз завершает файл. Нет никаких признаков того, что произошла какая-либо ошибка, чтобы остановить ее. Miles 13 лет назад 0
Попробуйте вместо этого: `: g /./ normal gqq`. Я * думаю *, что `%` применяет команду к каждой строке по мере ее поступления, тогда как `g / pattern /` сначала помечает каждую совпадающую строку, затем возвращается и применяет команду к каждой отмеченной строке. Поскольку ваша команда изменяет количество строк в файле, `g / pattern /` может работать лучше. garyjohn 13 лет назад 0
Я не смог воспроизвести «другое поведение упаковки», о котором я упоминал в своем вопросе - я полагаю, ошибка пользователя. И подход g /./ сработал для всего файла, на этот раз с сообщением «еще 84 строки», которое, я думаю, является количеством строк, добавленных в файл, а не количеством оставшихся строк или чем-то еще. Спасибо! Miles 13 лет назад 0