В Vim у меня есть такой текст:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Я хотел бы добавить "," в конце каждой строки. Предыдущий текст станет следующим:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Кто-нибудь знает как это сделать? Можно ли для этого использовать режим визуального блока?
Ответы:
Это будет делать это с каждой строкой в файле:
Если вы хотите создать подмножество строк вместо всего файла, вы можете указать их вместо
%
.Один из способов - сделать визуальный выбор, а затем ввести
:
. Он заполнится:'<,'>
за вас, затем вы наберете остальное (обратите внимание, что вам нужно только добавитьs/$/,/
)источник
'
, должно быть:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
все равно соответствует только один раз.На самом деле есть способ сделать это с помощью режима визуального блока. Простое нажатие
$A
в режиме визуального блока добавляет в конец всех строк в выделенном фрагменте. Добавленный текст появится во всех строках, как только вы нажмете Esc.Итак, это возможное решение:
То есть в обычном режиме Visual выберите абзац
vip
, переключитесь в режим визуального блока CTRLV, добавьте ко всем строкам$A
запятую,
, затем нажмите Escдля подтверждения.Документация находится по адресу
:h v_b_A
. Существует даже иллюстрация того , как это работает в разделе Примеры::h v_b_A_example
.источник
C-V
), затем переместите курсор в конец строки$
и добавьте ко всем из нихA
. Вам понравится:h v_b_A
, и это действительно основательно.<C-V>ip
вместоvip<C-V>
.'virtualedit'
- я это тестировал.) Я подтверждаю, что это не работает в чистом vim. Спасибо за замечание!Другое решение, использующее еще одну замечательную функцию:
Смотрите
:help :normal
.источник
:normal
. Я нашел это информативным!ex режим самый простой:
источник
Команда замены может применяться к визуальному выделению. Сделайте визуальный блок по линиям , которые вы хотите изменить, и введите :, а также уведомление о том , что командная строка инициализации , как это:
:'<,'>
. Это означает, что команда замены будет работать с визуальным выделением, например:И это замена, которая должна работать для вашего примера, если предположить, что вы действительно хотите, чтобы в конце каждой строки была запятая, как вы упомянули. Если есть конечные пробелы, вам может потребоваться соответствующим образом настроить команду:
Это заменит любое количество пробелов перед концом строки на запятую, эффективно удалив конечные пробелы.
Одни и те же команды могут работать на диапазоне строк, например , в течение следующих 5 строк:
:,+5s/$/,/
или для всего буфера::%s/$/,/
.источник
Если вы хотите добавить ',' в конце строк, начинающихся с 'key', используйте:
источник
:g/key/s/$/,
. Смотрите:help :global
.У меня есть
<M-DOWN>
(alt стрелка вниз),<DOWN>.
чтобы я мог очень быстро повторить последнюю команду в серии строк. с этим отображением я могу:А затем удерживайте alt, нажимая несколько раз, чтобы добавить запятую в конец каждой строки.
Это хорошо работает для меня, потому что позволяет очень хорошо контролировать, какие строки делают и не получают изменений.
(У меня также есть другие стрелки, отображенные аналогично, чтобы их можно было легко повторить
.
)Вот строка сопоставления, которую нужно вставить в vimrc:
источник
$ соответствует концу строки
источник
$
к линии, а не только,
./g
используется для выполнения замены при каждом появлении в строке. Поскольку$
в строке только один, вы можете спокойно его уронить.Следующий макрос также можно использовать для выполнения вашей задачи.
источник