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



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



например:



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


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



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



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


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

729   12  

12 ответов:

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

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

:%s/\n/

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

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

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

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

в vim:

:set noendofline binary
:w

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

использование обычных сопоставлений:

3Shift+J

пример команды:

:,+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 (append to end of line, переводит вас в режим вставки) в строке, где вы хотите удалить новую строку, а затем нажмите 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 до конца поиск строк, которые начинаются с новой строки (пусты) и уберите их

Comments

    Ничего не найдено.