В Vim, как проще всего объединить все строки в файле в одну строку?

Я хочу объединить все строки в файле в одну строку. Какой самый простой способ сделать это? Мне не повезло, пытаясь использовать замену (\r\n или же \n кажется, не правильно подобран в случае s/\r\n// на винде). С помощью J в выражении диапазона, похоже, тоже не работает (вероятно, потому что диапазон больше не синхронизируется после выполнения первой команды).

Я старался :1,$norm! J но это только половина файла - что имеет смысл, потому что он просто присоединяется к каждой строке один раз.

6 ответов

Решение

Ах, я нашел ответ.

:1,$join

Работает как шарм.

РЕДАКТИРОВАТЬ: Как указано в комментарии:

:%join   -or-    :%j

... удаляет диапазон.

По-другому:

ggVGJ

"ggVG"визуально выделяет все строки и"Jприсоединяется к ним.

Вы можете сделать это с 3 нажатиями клавиш, начиная с обычного режима:

:%j
  • : входит в командный режим
  • % относится ко всем строкам в файле
  • j выполняет команду соединения

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

Вы можете сделать это за три нажатия клавиш:

:1,$j

не грандиозно?

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

:%s/\n/ /

Я одинаково удивлен, что никто не указал, что диапазон 1,$ имеет стенографию, которая написана %,

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

Загадочный способ:

qqqqqJ@qq@q

(первые три qочистить q зарегистрироваться, qqJ@qq записывает макрос в q зарегистрироваться, что выполняет присоединение, затем вызывает q, и последнее @q запускает это.

Другие вопросы по тегам