Как мне соединить две строки в vi? - PullRequest
157 голосов
/ 16 декабря 2009

У меня есть две строки в текстовом файле, как показано ниже:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Я хочу добавить две строки в vi, как показано ниже:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

Вторая строка была удалена, а содержимое второй строки было добавлено к первой строке.

Как я могу сделать это, используя командный режим в vi?

Ответы [ 9 ]

286 голосов
/ 16 декабря 2009

Shift + J удаляет символ изменения строки из текущей строки, поэтому, нажав «J» в любом месте строки, вы можете объединить текущую строку и следующую строку так, как вы хотите.

58 голосов
/ 16 декабря 2009

Ви или Вим?

В любом случае, следующая команда работает для Vim в режиме 'nocompatible'. То есть, я полагаю, почти чистый vi.

:join!

Если вы хотите сделать это из обычной команды, используйте

gJ

С помощью 'gJ' вы объединяете строки как есть - без добавления или удаления пробелов:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Результат:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

С командой 'J' вы получите:

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

Пробел между type> и _ID.

21 голосов
/ 16 декабря 2009

Это должно сделать это:

J

15 голосов
/ 16 декабря 2009

В vi, J (это shift-j) или :join должны делать то, что вы хотите, по большей части. Обратите внимание, что они корректируют пробел. В частности, во многих случаях вы получите пробел между двумя соединенными строками, и если вторая строка имеет отступ, отступ перед удалением будет удален. *

В vim вы также можете использовать gJ (g, затем shift-j) или :join!. Они объединят строки без каких-либо корректировок пробелов.

В vim см. :help J для получения дополнительной информации.

4 голосов
/ 16 декабря 2009

Просто замените "\n" на "".

В vi / Vim для каждой строки в документе:

%s/>\n_/>_/g

Если вы хотите подтвердить каждую замену:

%s/>\n_/>_/gc
3 голосов
/ 07 апреля 2017

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

Более подробно это описано на сайте биржи Vi / Vim Stack .

1 голос
/ 11 февраля 2016

Другой способ объединения двух строк без наведения курсора на эту строку:

:6,6s#\n##

Здесь 6 - номер строки, к которой будет присоединена другая строка. Чтобы отобразить номер строки, используйте :set nu.

Если мы находимся на курсоре, где должна быть соединена следующая строка, то:

:s#\n##

В обоих случаях нам не нужно g, как :s#\n##g, потому что в одной строке существует только один \n.

1 голос
/ 22 декабря 2009

В Vim вы также можете использовать gJ.

ََ

1 голос
/ 16 декабря 2009

Нажмите Shift + 4 ("$") в первой строке, затем Shift + j ("J") .

А если вам нужна помощь, зайдите в vi, а затем нажмите F1 .

...