it-roy-ru.com

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

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

Например:

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

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

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

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

Это возможно в Vim?

245
derekerdmann

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

534
Xhantar

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

:%s/\n/
73
TinkerTank

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

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

48
Alligator

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

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

32
ephemient

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

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

:set noendofline binary
:w
23
Nestor Waldyd

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

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

3Shift+J

Используя команды Ex:

:,+2j

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

:.,.+2 join

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

3:j

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

:j3
10
kzh
set backspace=indent,eol,start

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

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

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

4
laktak

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

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

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

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

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

shift+v
2j
shift+j

или же

V2jJ

: обычный V2jJ

2
Ivan Lopes

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

1
David Watson

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

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
1
ghostdog74

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

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

:110,$s/^\n//

В скрипте vim:

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

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

1
Sergio Abreu