Как добавить текст в конце каждой строки в 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]