Я хочу добавить *
в конец каждой строки в Vim.Как добавить строку в конец каждой строки в Vim?
Я попробовал код неудачно
:%s/\n/*\n/g
Я хочу добавить *
в конец каждой строки в Vim.Как добавить строку в конец каждой строки в Vim?
Я попробовал код неудачно
:%s/\n/*\n/g
:%s/$/\*/g
должен работать. Так должно :%s/$/*/g
как MrWiggles указывает правильно.
+1. Нет необходимости скрывать звездочку в замене tho – tddmonkey
Yup. Более читабельна для меня одним. – dirkgently
Я не буду спорить, у вас есть удивительное имя пользователя, чтобы получить вам очки kudos ;-) – tddmonkey
%s/\s*$/\*/g
это будет делать трюк и обеспечить, чтобы ведущие пробелы игнорировались.
:%s/\n/*\r/g
Ваш первый вариант верен в любом месте, но по какой-то причине у Vim должна быть разная обработка новой строки.
В моей версии Vim \ n работает, но это просто заменяет новую строку символом *, эффективно соединяя строки. –
Эта команда проверена, чтобы нормально работать в каждой версии Vim, которую я пробовал. Вы используете версию Windows или что-то еще? – flussence
Один из вариантов:
:g/$/s//*
Найдет каждый конец линии якоря и заменить его *
. Я говорю «подставить», но на самом деле это скорее добавление, поскольку якорь - это особая вещь, а не обычный персонаж. Для получения дополнительной информации см. Power of g - Examples.
Что означает s // в регулярном выражении? Я знаю аналогичную команду: g///p, (grep). Я почти уверен, что ваша команда близка к моей, по крайней мере, в структуре. –
эля является заменой - это заменить конец якоря звездочки (ну, на самом деле не заменяет его, так как это узловая точка). – paxdiablo
также:
:g/$/norm A*
также:
gg<Ctrl-v>G$A*<Esc>
Ahhh ... Второй может использоваться с выбором линий. Ницца! –
Не могли бы вы объяснить первый пример? –
@CodyPoll 'g' - команда' global', которая делает что-то с каждой соответствующей строкой. '$' соответствует каждой строке. Это может быть также '^' или '. *'. norm выполняет команды, которые вы обычно используете в командном режиме. Поэтому 'A *' означает добавить '*' в конец строки. – defhlt
Даже короче: команды поиска:
:%norm A*
Это то, что это означает:
% = for every line
norm = type the following commands
A* = append '*' to the end of current line
Человек, не существует ни vi, ни vim нити, из которых я ничего не узнаю. Сегодня я узнаю о норме. И, как говорится в «Привет», «Норма!» – smcameron
Для добавления, вы просто используете 0i *, 0 приведет вас к началу строки, i для режима вставки и * для *. D: – Rob
Как [VimGolfer] (http://vimgolf.com) Я не могу не добавить, что использование 'I *', а не '0i *' спасет вас одним нажатием клавиши. –
... и предварять (добавить начало) каждую строку *,
%s/^/*/g
Это не отвечает на вопрос , – doubleDown
Вы действительно не нужны g
в конце. Таким образом, становится:
:%s/$/*
Или если вы просто хотите *
в конце, говорят строки 14-18:
:14,18s/$/*
или
:14,18norm A*
Я думаю, используя режим визуального блока является лучшим и универсальным методом борьбы с этим типом вещей. Вот пример:
Это первая строка.
Это второй.
Третий.
Вставить "Hello world."(Пробел + буфер) в конце каждой из этих линий:
Результат это:
Это первая строка. Привет мир.
Это второй. Привет мир.
Третий. Привет мир.
(пример из http://vim.wikia.com/wiki/Inserting_text_in_multiple_lines)
Вместо нажатия 'jj' можно нажать' G', чтобы перейти к последней строке. Это полезно в больших файлах, где нажатие 'j', пока вы не нажмете последнюю строку, нецелесообразно. – nash
Если и хотите добавить Привет мир в конце каждой строки:
:%s/$/HelloWorld/
Если вы хотите сделать это для определенного числа линии говорят, от 20 до 30 использование:
:20,30s/$/HelloWorld/
Если и хотите сделать это в начале каждой строки используйте:
:20,30s/^/HelloWorld/
Ваш не работает, поскольку в правой части ': s ///', '\ n' соответствует нулевой символ. Раздел ': help sub-replace-special' имеет значение. – doubleDown