Удалить новую строку в Vim

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

Например:

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

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

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

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

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

Ответ 1

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

Ответ 2

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

:%s/\n/

Ответ 3

В верхней строке в нормальном режиме нажмите Shift + j.

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

Ответ 4

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

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

Ответ 5

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

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

:set noendofline binary
:w

Ответ 6

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

Используя нормальные отображения:

3 Shift + J

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

:,+2j

Это сокращение от

:.,.+2 join

Коды также можно ввести следующим ярлыком:

3 : J

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

:j3

Ответ 7

set backspace=indent,eol,start

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

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

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

Ответ 8

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

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

Ответ 9

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

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

СЕЙЧАС, в НОРМАЛЬНОМ РЕЖИМЕ do

shift+v
2j
shift+j

или

V2jJ

: normal V2jJ

Ответ 10

Я бы просто нажал A (добавление в конец строки, помещает вас в режим вставки) в строке, где вы хотите удалить новую строку, а затем нажмите delete.

Ответ 11

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

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file

Ответ 12

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

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

:110,$s/^\n//

В vim script:

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

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