В Vim, какой самый простой способ объединить все строки в файле в одну строку? - PullRequest
55 голосов
/ 24 декабря 2008

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

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

Ответы [ 6 ]

129 голосов
/ 24 декабря 2008

Другой способ:

ggVGJ

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

61 голосов
/ 24 декабря 2008

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

:1,$join

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

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

:%join   -or-    :%j

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

31 голосов
/ 07 апреля 2012

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

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

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

15 голосов
/ 24 декабря 2008

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

:1,$j

не правда ли, гранд?

9 голосов
/ 24 декабря 2008

Загадочный путь:

qqqqqJ@qq@q

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

8 голосов
/ 25 декабря 2008

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

:%s/\n/ /

Я также удивлен, что никто не указал, что в диапазоне 1,$ есть сокращение, написанное %.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...