vi ярлык для удаления «до следующего символа X»

194

Я понимаю, что vi имеет сочетания клавиш для удаления символов, слов и строк с различными параметрами.

Однако я не смог найти это:

  • удалить от курсора до следующего указанного символа

Например, я могу напечатать, du"ожидая, что редактор «удалит, пока не "будет найден следующий символ»

Ближайший я знаю, d9wгде 9это количество слов , которые необходимо удалить.

Кто-нибудь знает возможно ли это?

kctang
источник
Если вы заинтересованы в Vi и Vim, у них теперь есть свой собственный сайт SE: Vi и Vim
десерт

Ответы:

303

Используйте dtc, где с любой символ, например, для вас, вы хотитеdt"

Это будет удалить до, но не включая c .

Если у тебя есть:

delete until exclamation point!

И курсор был в первом месте, и вы набрали dt!, вы получите:

delete!

Также dfc.

Это будет удалить до и в том числе c .

Использование df!в том же примере выше даст вам:

delete

Просто о каком - либо «движении» может быть использовано для d, c, yи других подобных команд.

Arcege
источник
7
Предположительно, мнемоника предназначена для "до"? Хороший ответ.
думаю
15
Вы также можете удалить предыдущий экземпляр персонажа с помощью заглавной версии команд перемещения. Может быть, более полезно для запятых - dT,и dF,.
Joelostblom
3
Это не работает в нескольких строках.
0xcaff
3
Можно ли это сделать по ряду линий?
Рэй
2
Для выполнения чего-то похожего по ряду строк можно выполнить обычный поиск (как в ответе zpletan): d/wordпоиск до word. За ним должен следовать ввод (чтобы закрыть поиск).
Эрик О Лебиго,
59
  • Для удаления вперед до символа «X» введите dtX

  • Для удаления вперед через символ «X» введите dfX

  • Для удаления в обратном направлении до символа 'X' введите dTX

  • Для удаления в обратном направлении через символ «X» введите dFX

Марк Вонг
источник
30

Ввод dt # (не команда: используйте это как движение как G)

удаляет из курсора, но не включая #. Вы можете заменить любой символ на #.

Джесси
источник
2
Это правильный ответ! DF # также удалит #.
вьетнам
искал это, это
круто
18

Похоже, @Arcege уже ответил на вопрос, но я сделал, d/lчтобы удалить до символа l; другие персонажи тоже подойдут.

zpletan
источник
3
Это работает для вещей через новые строки.
jasonszhao
Примечание: за этим должно следовать Enter.
Эрик О Лебиго,
6

wпереходит к следующему слову. lПереходит к следующему персонажу.

Так что, d9lчтобы удалить следующие 9 символов.

Шун Чжан
источник
2
Закрыть, lэто клавиша со стрелкой вправо Vim, так что вы на самом деле удаляете вправо. И наоборот, d9hудалил бы 9 символов слева.
Уолф