Ответ 1
Если вы находитесь в первой строке, нажатие (верхний регистр) J присоединяется к этой строке и следующей строке вместе, удаляя новую строку. Вы также можете комбинировать это с подсчетом, поэтому нажатие 3J
объединит все 3 строки вместе.
Есть ли способ удалить новую строку в конце строки в Vim, чтобы следующая строка была добавлена к текущей строке?
Например:
Evaluator<T>():
_bestPos(){
}
Я хотел бы поставить все это на одну строку без копирования строк и вставки их в предыдущую. Похоже, я должен был бы поместить мой курсор в конец каждой строки, нажать клавишу и перейти к следующей строке на том же, на котором курсор включен.
Конечный результат:
Evaluator<T>(): _bestPos(){ }
Возможно ли это в Vim?
Если вы находитесь в первой строке, нажатие (верхний регистр) J присоединяется к этой строке и следующей строке вместе, удаляя новую строку. Вы также можете комбинировать это с подсчетом, поэтому нажатие 3J
объединит все 3 строки вместе.
Конечно. Vim распознает символ \n как новую строку, поэтому вы можете просто искать и заменять. В режиме командного режима:
:%s/\n/
В верхней строке в нормальном режиме нажмите Shift + j.
Вы также можете добавить счетчик, поэтому 3J
в верхней строке будет соединяться со всеми этими строками.
J
удаляет лишний промежуток (если есть), соединяющий линии с одним пробелом. (За некоторыми исключениями: после /[.!?]$/
могут быть вставлены два пробела, до /^\s*)/
не вставлены пробелы.)
Если вы не хотите этого поведения, gJ
просто удаляет новую строку и не делает ничего умного с пробелами вообще.
Как уже упоминалось в других ответах, (верхний регистр) J
и search + replace для \n
обычно можно использовать для удаления символов новой строки и объединения строк.
Но чтобы избавиться от завершающего символа новой строки в последней строке, вам нужно сделать это в Vim:
:set noendofline binary
:w
Все нижеследующее предположим, что ваш курсор находится в первой строке:
Используя нормальные отображения:
3 Shift + J
Использование команд Ex:
:,+2j
Это сокращение от
:.,.+2 join
Коды также можно ввести следующим ярлыком:
3 : J
Еще более короткая команда Ex:
:j3
set backspace=indent,eol,start
в вашем .vimrc позволит вам использовать backspace
и delete
в \n
(новая строка) в режиме вставки.
set whichwrap+=<,>,h,l,[,]
позволит вам удалить предыдущий LF в нормальном режиме с помощью X
(когда в столбце 1).
Вероятно, это зависит от ваших настроек, но я обычно делаю это с помощью A<delete>
Где A
добавляется в конце строки. Для этого, вероятно, требуется режим nocompatible
:)
<CURSOR>Evaluator<T>():
_bestPos(){
}
курсор в первой строке
СЕЙЧАС, в НОРМАЛЬНОМ РЕЖИМЕ do
shift+v
2j
shift+j
или
V2jJ
: normal V2jJ
Я бы просто нажал A (добавление в конец строки, помещает вас в режим вставки) в строке, где вы хотите удалить новую строку, а затем нажмите delete.
если вы не против использования других инструментов оболочки,
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
Проблема заключается в том, что могут быть скопированы невидимые числа char 0A (\n). Предположим, что вы хотите очистить от линии 100 до конца:
Ввод ESC и: (командир терминала)
:110,$s/^\n//
В vim script:
execute '110,$s/^\n//'
Объяснение: от 110 до конца поиск строк, начинающихся с новой строки (пустой) и удалите их