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