В 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
запускает это.