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


194

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

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

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

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

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

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


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

Ответы:


303

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

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

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

delete until exclamation point!

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

delete!

Также dfc.

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

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

delete

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


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; другие персонажи тоже подойдут.


3
Это работает для вещей через новые строки.
jasonszhao

Примечание: за этим должно следовать Enter.
Эрик О Лебиго,

6

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

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


2
Закрыть, lэто клавиша со стрелкой вправо Vim, так что вы на самом деле удаляете вправо. И наоборот, d9hудалил бы 9 символов слева.
Уолф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.