Как добавить текст в конце каждой строки в Vim?
В Vim у меня есть следующий текст:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Я хотел бы добавить "," в конце каждой строки. Предыдущий текст станет следующим:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Кто-нибудь знает как это сделать? Можно ли использовать режим визуального блока для этого?
Ответы
Ответ 1
Это будет сделано для каждой строки в файле:
:%s/$/,/
Если вы хотите создать подмножество строк вместо всего файла, вы можете указать их вместо %
.
Одним из способов является визуальный выбор, а затем введите :
Он заполнит :'<,'>
для вас, затем вы наберете оставшуюся часть (обратите внимание, вам нужно только добавить s/$/,/
)
:'<,'>s/$/,/
Ответ 2
Фактически это можно сделать, используя режим Visual block. Простое нажатие $A
в режиме визуального блока добавляет к концу всех строк в выборе. Приложенный текст появится во всех строках, как только вы нажмете Esc.
Итак, это возможное решение:
vip<C-V>$A,<Esc>
То есть, в обычном режиме Visual выбирает абзац vip
, переключается в режим визуального блока CTRL V, присоединяется ко всем строкам $A
запятая ,
, а затем нажмите Esc для подтверждения.
Документация находится в :h v_b_A
. Существует даже иллюстрация того, как это работает в разделе примеров: :h v_b_A_example
.
Ответ 3
Другое решение, используя еще одну замечательную функцию:
:'<,'>norm A,
См. :help :normal
.
Ответ 4
ex режим проще всего:
:%s/$/,
: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma
Ответ 5
Подставляемая команда может применяться к визуальному выбору. Сделайте визуальный блок над строками, которые вы хотите изменить, и введите :, и обратите внимание, что инициализируется строка командной строки следующим образом: :'<,'>
. Это означает, что команда substitute будет работать с визуальным выбором, например:
:'<,'>s/$/,/
И это подстановка, которая должна работать для вашего примера, предполагая, что вы действительно хотите запятую в конце каждой строки, как вы уже упоминали. Если есть конечные пробелы, вам может потребоваться соответствующим образом настроить команду:
:'<,'>s/\s*$/,/
Это заменит любое количество пробелов, предшествующих концу строки, запятой, эффективно удаляя конечные пробелы.
Те же команды могут работать в диапазоне строк, например. для следующих 5 строк: :,+5s/$/,/
или для всего буфера: :%s/$/,/
.
Ответ 6
Если вы хотите добавить ',' в конце строк, начинающихся с 'key', используйте:
:%s/key.*$/&,
Ответ 7
У меня есть <M-DOWN>
(стрелка вниз), отображаемая на <DOWN>.
, так что я могу очень быстро повторить последнюю команду в серии строк. с этим отображением я могу:
A,<ESC>
И затем удерживайте клавишу alt, одновременно нажимая несколько раз, чтобы добавить запятую в конец каждой строки.
Это хорошо работает для меня, потому что это позволяет очень хорошо контролировать, какие строки делать и не получать изменения.
(У меня также есть другие стрелки, сопоставленные аналогично, чтобы упростить повторение .
)
Здесь строка отображения для вставки в ваш vimrc:
map <M-DOWN> <DOWN>.
Ответ 8
:%s/$/,/g
$соответствует концу строки
Ответ 9
Следующий макрос также может использоваться для выполнения вашей задачи.
qqA,^[[email protected]