Удаление различных пробелов при редактировании в Vim - PullRequest
0 голосов
/ 27 октября 2011

Очень часто, редактируя с помощью Vim, я попадаю во множество ситуаций, когда пробелы доставляют мне хлопоты.Например, скажем, у меня есть такой комментарий:

#This program was featured on the Today show, it is an algorithm for promoting world peace in third-world countries
#given the name of that country and the name of a celebrity to endorse its cause

Если я хочу, например, обрезать строки, чтобы они переходили к символам X, я заканчиваю тем, что ставлю новую строку где-то посерединеверхняя строка, чтобы получить это (после перехода на новую строку и авто-отступ):

#This program was featured on the Today show, it is an algorithm for promoting
world peace in third-world countries
#given the name of that country and the name of a celebrity to endorse its cause

Затем я добавляю # в начало строки, и это все хорошо, но потом я хочу эту строкувыстроиться тоже.Для этого я должен удалить символ новой строки, все пробелы для отступа в следующей строке, а затем знак комментария #.Это не займет очень много времени, но все эти и подобные ситуации складываются в общем за один день.

Теперь приведенный выше пример довольно специфичен, но мой вопрос не,Какой хороший способ в Vim удалить все пробельные символы, включая NEWLINES, до следующего непробельного символа?Если у Vim уже есть движения, которые делают это, это было бы замечательно, но если нет, есть ли у кого-нибудь любимая функция Vim, которую они используют для выполнения вышеизложенного, которая может быть сопоставлена ​​с клавишей?По крайней мере, мне не хватает некоторой идиомы использования Vim, которая мешает мне даже беспокоиться об этом случае?

РЕДАКТИРОВАТЬ: Форматирование по ширине, хотя и полезно и применимо к описанному выше случаю, не является цельюэтого вопроса.Меня больше интересует удаление пробелов, которое не останавливается в конце строки, а вместо этого переносится на первый непробельный символ следующей строки.

Ответы [ 3 ]

1 голос
/ 28 октября 2011

Вы действительно просто хотите переформатировать этот комментарий, чтобы соответствовать текущему 'textwidth'. Если комментарий является абзацем (т. Е. Разделен пробелами сверху и снизу), тогда вы можете просто использовать gqip (gq - команда переформатирования, ip - текстовый объект "inner-абзац") переформатировать это. Если это не отдельный абзац, вы можете визуально выделить эти строки и затем использовать gq.

Вероятно, это также зависит от правильной установки 'formatoptions', чтобы обеспечить правильную обработку символов комментария, но во многих случаях ftplugin уже сделал это.

1 голос
/ 14 декабря 2011

Это немного позже, но я обнаружил, что есть команда, которая делает то, что мне нужно, в 90% случаев:

J --  join line below to the current one
0 голосов
/ 28 октября 2011

Эта команда работает:

:.s/\W*$\n\W*//g

используется замена для удаления пробелов до конца строки и новой строки в конце.

В этом примере:

testting                 aad        $            
asdjkasdjsdaksddjk$

(чтобы увидеть метасимволы в vim, используйте команду :set list)

Если вы поместите курсор в первую строку и используете первую команду, он удалит все от aad до $ (не включая aad, но включая $ и символ новой строки.)

Кроме того, обратите внимание на то, что вы делаете, гораздо эффективнее использовать внешнюю программу для форматирования комментариев для вас. В частности, par - отличная небольшая программа на C, которая редактирует текст и оборачивает его до желаемой длины.

Если у вас есть par на вашем пути, сделать то, что вы пытаетесь сделать, так же просто, как выбрать блок комментария с помощью Shift+v и выполнить команду

:!par 40pgr

где 40 - желаемая ширина в столбцах.

Если вы чувствуете себя хакером, напишите свою собственную программу на C / perl / C ++ / python, которая редактирует комментарии так, как вам нравится, затем введите его в путь и используйте команду внешнего фильтра :! для обработки блоков текста через него.

...