Удалить новую строку в Vim - PullRequest
245 голосов
/ 21 октября 2010

Есть ли способ удалить символ новой строки в конце строки в Vim, чтобы следующая строка добавлялась к текущей строке?

Например:

Evaluator<T>():
    _bestPos(){
}

Я хотел бы поместить все это в одну строку, не копируя строки и не вставляя их в предыдущую.Похоже, я должен быть в состоянии поставить курсор в конец каждой строки, нажать клавишу и перейти на следующую строку к той же, на которой находится курсор.

Конечный результат:

Evaluator<T>(): _bestPos(){ }

Возможно ли это в Vim?

Ответы [ 12 ]

536 голосов
/ 21 октября 2010

Если вы находитесь на первой строке, нажатие (верхний регистр) J соединит эту строку и следующую строку вместе, удалив новую строку. Вы также можете объединить это с подсчетом, поэтому нажатие 3J объединит все 3 строки вместе.

74 голосов
/ 21 октября 2010

Конечно.Vim распознает символ \ n как новую строку, поэтому вы можете просто искать и заменять.В командном режиме введите:

:%s/\n/
48 голосов
/ 21 октября 2010

Находясь на верхней строке в обычном режиме, нажмите Shift + j .

Вы также можете добавить счет, так что 3J в верхней строкесоединит все эти линии вместе.

32 голосов
/ 12 ноября 2010

J удаляет дополнительный начальный интервал (если есть), соединяя строки одним пробелом.(За некоторыми исключениями: после /[.!?]$/ могут быть вставлены два пробела; до /^\s*)/ пробелы не вставляются.)

Если вам не нужно такое поведение, gJ просто удаляет символ новой строки ине делает ничего умного с пробелами вообще.

24 голосов
/ 28 мая 2016

Как уже упоминалось в других ответах, (верхний регистр) J и поиск + замена для \n могут использоваться, как правило, для удаления символов новой строки и объединения строк.

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

:set noendofline binary
:w
10 голосов
/ 26 августа 2013

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

Использование нормальных отображений:

3 Сдвиг + J

Использование команд Ex:

:,+2j

Что является сокращением

:.,.+2 join

Который также можно ввести с помощью следующей комбинации клавиш:

3 : J

Еще более короткая команда Ex:

:j3
5 голосов
/ 01 декабря 2016
set backspace=indent,eol,start

в вашем .vimrc позволит вам использовать backspace и delete на \n (перевод строки) в режиме вставки.

set whichwrap+=<,>,h,l,[,]

позволит вам удалить предыдущий LFв обычном режиме с X (когда в столбце 1).

2 голосов
/ 16 февраля 2013
<CURSOR>Evaluator<T>():
    _bestPos(){
}

курсор в первой строке

СЕЙЧАС, в НОРМАЛЬНОМ РЕЖИМЕ выполните

shift+v
2j
shift+j

или

V2jJ

: обычный V2jJ

2 голосов
/ 21 октября 2010

Вероятно, это зависит от ваших настроек, но я обычно делаю это с A<delete>

, где A добавляется в конце строкиВероятно, требуется режим nocompatible:)

1 голос
/ 11 января 2017

Проблема в том, что кратные символы 0A (\ n), которые невидимы, могут накапливаться. Предположим, вы хотите очистить строку 100 до конца:

Набрав ESC и: (командир терминала)

:110,$s/^\n//

В скрипте vim:

execute '110,$s/^\n//'

Объяснение: от 110 до конца поиск строк, начинающихся с новой строки (не заполнены) и удали их

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