Если у меня есть следующий текст:
['abc']
И курсор на первой цитате.
[abc']
[']
[
Итак, как я могу удалить 'abc' и сохранить []
Довольно часто я оказываюсь в ситуации, когда просто хочу удалить элементы из списка; поэтому у меня может быть список вроде ['один', 'два', 'три'], и я пытаюсь найти способ с наименьшим нажатием клавиши удалить какой-либо элемент в списке. Использование поиска в этом контексте не очень хорошо, так как мне придется печатать больше. Что делает его неработоспособным, так это кавычки вокруг строки, без кавычек сработало бы простое «dw» или «dwx» (для запятой).
@ggorlen, да, это так. Я думаю, что мой дубликат, я не нашел его, когда искал решение
Мне нравится di[ или di] (мнемомика, «удалить внутри квадратных скобок») для такого рода вещей. Бонус: вы можете повторить ту же команду в другом месте всего одним нажатием клавиши, «точкой» . (что также верно для ct] и df' и т. д.).
Вначале это может показаться немного нелогичным, но вы можете использовать «поиск и замену» для таких задач.
В vim вы ищете :s Vim WiKi, находите строку «abc» и заменяете ее пустой строкой.
Вы должны использовать что-то вроде упомянутого Доном.
Есть несколько вариантов одиночных строк:
«Вырезать до» с помощью ct] или «удалить до» с помощью dt]. Более подробная информация доступна здесь (вы можете удалить назад, дернуть до и т. д.).
"Удалить найти" (удалить через цель): df'
Визуальная линия/находка: Ctrl+vf'x. Многословный, но дает некоторую свободу действий для корректировки по мере необходимости.
В комментарии вы упоминаете, что у вас есть многоэлементный список и вы хотите удалить элемент. Содержимое элемента имеет значение; Обычно я работаю в произвольном порядке, используя комбинации dw и x или визуальную линию/находку с w, или небольшие корректировки рядом с целью, чтобы вырезать элемент в дополнение к методам, описанным выше.
Например, если ваш список ['one', 'two', 'three'] и ваш курсор находится над первым ', вы можете использовать dfspacebar или x2dw для создания ['two', 'three'].
Другие полезные темы:
Именно то, что мне было нужно. Я не знал о функции «вырезать до», я расскажу об этом в документе. Спасибо!
Ответ, упомянутый выше, будет работать, только если у вас есть курсор на первом символе. Правильный ответ должен быть да, как указано @filbranden. Это поможет вам повторить это с точкой и в других случаях, и ваш курсор может быть где угодно внутри или над цитатой.
Я согласен - это повторение этой темы , которая является канонической, поэтому я проголосую за закрытие как обман. Тем не менее, df[space] удаляет запятую и пробел для этого особого случая, так что приятно знать и то, и другое. OP @Thomas может свободно ставить галочку на этот ответ.
Хотя ответ @ggorlen о d f space великолепен, некоторым людям может быть полезно использовать сопоставление, которое работает независимо от того, где находится курсор в слове, например:
nnoremap [something] :normal vf,oF'xx<CR>
Удаляет элемент «один» в приведенном ниже примере независимо от того, где он находится.
['one', 'two', 'three'] => ['two', 'three']
d i [
Чтобы удалить все внутри квадратных скобок
d i ]
тоже работает.
Используйте da'.
Текстовый объект a' выделяет текст под курсором, заключенный в одинарные кавычки, включая сами кавычки.
Смотрите :help a':
"строка в кавычках". Выбирает текст от предыдущей цитаты до следующей цитаты.
Этот текстовый объект довольно умен, если в строке есть несколько строк в кавычках, Vim определит, какие пары образуют строки. Vim также может распознавать экранированные кавычки внутри строки (экранирующий символ по умолчанию — \, но даже это можно настроить с помощью параметра 'quoteescape').
Вы имеете в виду, например, :s/'abc'//, или вы ищете что-то еще?