Все остальные существующие ответы зависят от определения vim и обнаружения блока. Моя стратегия удаления такого рода состоит в том, чтобы использовать c
команду в сочетании с f
движением и реальным символом, чтобы остановиться на этом. Затем он фактически удалит символ остановки, но, поскольку он также был последней нажатой клавишей, повторяя его дважды, он будет стоить почти равным нулю, и это будет вставлять его снова после c
перехода в режим вставки.
Чтобы объяснить с примерами, для
func1(x|, func2(), y);
команда c2f))
даст
func1(x)|;
который на первый взгляд может показаться менее элегантным, чем некоторые другие ответы, однако обратите внимание, что эта стратегия универсальна и не зависит от какого-либо определения блока.
Например, с
<div| class="some-class">text</div>
команда cf>>
даст
<div>|text</div>
Или при редактировании CSV-файлов, таких как
2016-11-29,question,vi|.stackexchange.com,10435
команда cf,,
даст
2016-11-29,question,vi,|10435
Часто я использую это, чтобы удалить остаток строки, из
printf("Hello world| - a boring example\n");
в
printf("Hello world\|n");
с cf\\
или из
print("Hello world| - a boring example");
в
print("Hello world"|);
с cf""
.
Это меняет текущую позицию на место, немного отличное от запрашиваемого, а также переключается в режим вставки. Но я хотел бы поделиться своим подходом к удалению всего остального.
C);
в этом конкретном случае.