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

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

например:

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

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

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

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

Is это возможно в Vim?

12 ответов


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


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

:%s/\n/

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

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


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

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


в vim:

:set noendofline binary
:w

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

С помощью обычного сопоставления:

3Shift+J

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

:,+2j

- аббревиатуры

:.,.+2 join

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

3:j

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

:j3

set backspace=indent,eol,start

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

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

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


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

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


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

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

Теперь, в обычном режиме do

shift+v
2j
shift+j

или

V2jJ

:нормальный 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", }' file >t && mv -f t file

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

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

:110,$s/^\n//

в скрипте vim:

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

объяснение: от 110 до конца поиск строк, которые начинаются с новой строки (пустые) и уберите их!--3-->