Удалить слово в кавычках в vim

Если у меня есть следующий текст:

['abc']

И курсор на первой цитате.

  • дв дает мне [abc']
  • d2w дает мне [']
  • d3w дает мне [

Итак, как я могу удалить 'abc' и сохранить []

Вы имеете в виду, например, :s/'abc'//, или вы ищете что-то еще?

Don Branson 20.12.2020 21:32

Довольно часто я оказываюсь в ситуации, когда просто хочу удалить элементы из списка; поэтому у меня может быть список вроде ['один', 'два', 'три'], и я пытаюсь найти способ с наименьшим нажатием клавиши удалить какой-либо элемент в списке. Использование поиска в этом контексте не очень хорошо, так как мне придется печатать больше. Что делает его неработоспособным, так это кавычки вокруг строки, без кавычек сработало бы простое «dw» или «dwx» (для запятой).

Thomas 20.12.2020 21:38

@ggorlen, да, это так. Я думаю, что мой дубликат, я не нашел его, когда искал решение

Thomas 22.12.2020 17:46

Мне нравится di[ или di] (мнемомика, «удалить внутри квадратных скобок») для такого рода вещей. Бонус: вы можете повторить ту же команду в другом месте всего одним нажатием клавиши, «точкой» . (что также верно для ct] и df' и т. д.).

m_mlvx 26.01.2021 03:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
4
140
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вначале это может показаться немного нелогичным, но вы можете использовать «поиск и замену» для таких задач.

В vim вы ищете :s Vim WiKi, находите строку «abc» и заменяете ее пустой строкой.

Вы должны использовать что-то вроде упомянутого Доном.

Ответ принят как подходящий

Есть несколько вариантов одиночных строк:

  1. «Вырезать до» с помощью ct] или «удалить до» с помощью dt]. Более подробная информация доступна здесь (вы можете удалить назад, дернуть до и т. д.).

  2. "Удалить найти" (удалить через цель): df'

  3. Визуальная линия/находка: Ctrl+vf'x. Многословный, но дает некоторую свободу действий для корректировки по мере необходимости.

В комментарии вы упоминаете, что у вас есть многоэлементный список и вы хотите удалить элемент. Содержимое элемента имеет значение; Обычно я работаю в произвольном порядке, используя комбинации dw и x или визуальную линию/находку с w, или небольшие корректировки рядом с целью, чтобы вырезать элемент в дополнение к методам, описанным выше.

Например, если ваш список ['one', 'two', 'three'] и ваш курсор находится над первым ', вы можете использовать dfspacebar или x2dw для создания ['two', 'three'].


Другие полезные темы:

Именно то, что мне было нужно. Я не знал о функции «вырезать до», я расскажу об этом в документе. Спасибо!

Thomas 20.12.2020 22:16

Ответ, упомянутый выше, будет работать, только если у вас есть курсор на первом символе. Правильный ответ должен быть да, как указано @filbranden. Это поможет вам повторить это с точкой и в других случаях, и ваш курсор может быть где угодно внутри или над цитатой.

Tarun 22.12.2020 08:54

Я согласен - это повторение этой темы , которая является канонической, поэтому я проголосую за закрытие как обман. Тем не менее, df[space] удаляет запятую и пробел для этого особого случая, так что приятно знать и то, и другое. OP @Thomas может свободно ставить галочку на этот ответ.

ggorlen 22.12.2020 17:46

Хотя ответ @ggorlen о d f space великолепен, некоторым людям может быть полезно использовать сопоставление, которое работает независимо от того, где находится курсор в слове, например:

nnoremap [something] :normal vf,oF'xx<CR>

Удаляет элемент «один» в приведенном ниже примере независимо от того, где он находится.

['one', 'two', 'three'] => ['two', 'three']
d i [ 

Чтобы удалить все внутри квадратных скобок

d i ] тоже работает.
mghaoui 21.12.2020 09:05

Используйте da'.

Текстовый объект a' выделяет текст под курсором, заключенный в одинарные кавычки, включая сами кавычки.

Смотрите :help a':

"строка в кавычках". Выбирает текст от предыдущей цитаты до следующей цитаты.

Этот текстовый объект довольно умен, если в строке есть несколько строк в кавычках, Vim определит, какие пары образуют строки. Vim также может распознавать экранированные кавычки внутри строки (экранирующий символ по умолчанию — \, но даже это можно настроить с помощью параметра 'quoteescape').

Другие вопросы по теме