Удалить текст между тегами HTML в Vim?

164

Я знаю

di<

удалит сам тег HTML.

Есть ли простой способ удалить текст между двумя тегами?

<span>How can I delete this text?</span>

Спасибо!

CMB
источник

Ответы:

321

ditудалит текст между соответствующими тегами XML. ( itдля "внутреннего блока тегов".)

Смотрите :h itи :h tag-blocks.

Брайан Карпер
источник
30
И, конечно же, citкогда вы хотите написать сразу после этого.
Дебильски
6
А плагин Surround ( vim.org/scripts/script.php?script_id=1697 ) великолепен, когда вы хотите сделать что-то вроде изменения окружающего тега (cst), например, с <p> на <div>.
Крис Дженкинс
4
Существует также dat (блок «Удалить тег»), который включает в себя фактические теги. cit, который похож на dit, но входит в режим вставки после. кошка, которая похожа на dat, но переходит в режим вставки после. Также di "и di (для удаления внутренних двойных кавычек и удаления внутренних скобок соответственно.
aiham
@KrisJenkins Можете ли вы показать полный пример, как этого добиться? Я могу сделать это только с кавычками / скобками.
FelikZ
1
Также vat(или vit) с последующим повторением at(или it) для постепенного выбора окружающих тегов. (Или v2atи т. Д.). Затем dудалить (и т. Д.).
Джо Фриман
27
cit
ci"

Две из лучших команд активации производительности vim.

Я экономлю много времени и усилий только с этими двумя.

chipairon
источник
3
citрассматривается в этой теме, но для потомства, ci"удалит до следующего "найденного. отлично подходит для изменения имен классов в html-тегах, например <span id="really long annoying-id">- сначала с помощью курсора ", нажимайте ci"и вставляйте новые символы между кавычками.
Алекс Мур-Ниеми
ciwтакже полезно, поскольку удаляет текущее слово; Я использую это больше, чем citи на ci"самом деле.
Джон Спарвассер
2
@ AlexMoore-Niemi: ci"фактически удалит текст слева до следующей цитаты и справа до следующей цитаты, а затем перейдет в режим вставки. ct"на самом деле это команда "удалить до следующего" найдено ". Но да, она ведет себя так же, если курсор находится под левой
кавычкой
9

попробуйте dt <, когда курсор находится на первом символе для удаления. В вашем примере буква «Н».

JD Frias
источник
Также очень полезно для других ситуаций, спасибо! (думал, что это должно быть "dt <")
CMB
1
Хотя это технически верно, для этого требуется перейти к первому символу, который вы хотите удалить, а не просто прыгнуть куда-нибудь в строке. Но правда это правда. :-)
lyonsinbeta
4

( курсор на первый символ для удаления ) v / <[enter] d

Это решение начинается с первого символа, затем переходит в визуальный режим («v»). Затем выполняется поиск следующей стартовой скобки ("/ <"), а затем нажмите клавишу ввода, чтобы выйти из поиска.

На этом этапе ваш визуальный выбор будет охватывать текст для удаления. нажмите d ("d"), чтобы удалить его.

Если бы мне пришлось сделать это для нескольких тегов, я записал бы команду и объединил бы ее с некоторыми другими поисками, чтобы сделать ее повторяемой. Последовательность клавиш может выглядеть так:

[ курсор в начале файла ] qa /> [enter] lv / <[enter] dnq

затем нажмите:

20 @

сделать это для 20 тегов

штифтик
источник
Раньше я часто использовал команду c/<[enter]в своей «жизни Vim», но теперь я немного сожалею об этом. Видите ли, большинство плагинов "Vi-mode" для популярных других редакторов / IDE не поддерживают этот конкретный тип команд. Они поддерживают cit, ci", ct<и тем не менее. Итак, я снова преподаю.
пилат
-1

Если вы хотите удалить текст между флагами в обратном порядке, я предлагаю установить Vim-Surround и запустить, dstкоторый удаляет тег объемного звучания.

Ник Сарафа
источник