Удалить строки в 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
просто удаляет новую строку и не делает ничего умного с пробелами вообще.
все следующие предположим, что ваш курсор находится на первой строке:
С помощью обычного сопоставления:
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-->