Как мне удалить, пока не пропущены пробелы в vim? - PullRequest
53 голосов
/ 08 августа 2011

Я ищу команду для удаления от курсора до первого непробельного символа в той же строке.Я гуглил некоторое время и пробовал несколько возможностей.Нет радостиКто-нибудь знает, как это сделать?

Ответы [ 5 ]

86 голосов
/ 08 августа 2011

Последовательность d w удалит все символы из курсора до следующего слова.Это означает, что если вы выполните команду, стоя в середине слова, она удалит оставшуюся часть этого слова и последующие пробелы.Может или не может быть то, что вы ищете.

18 голосов
/ 08 августа 2011

Вы можете попробовать d W . Это будет перемещаться по «СЛОВУ» (см. Справку по СЛОВУ и слову), что выглядит более подходящим для вашего вопроса.

dw не будет соответствовать вашим потребностям, например:

array[1] = 5

Если вы нажмете dw, находясь в позиции a, вы получите:

[1] = 5

Но использование dW приведет к:

= 5
13 голосов
/ 25 октября 2017

Многие ответы здесь на самом деле не касаются вопроса напрямую. Запрашивающий хочет знать, как удалить до первый не -пробельный символ. Некоторые ответы будут технически работать , но давайте посмотрим, как это сделать явно.

Следующие примеры демонстрируют, как это сделать в режиме normal с вариациями, которые учитывают начальную позицию курсора. Символы u & # x0332; nderlined c & # x0332; указывают положение курсора:


d ш : foo_ bar & Rarr; foob ​​& # x0332; ар

Команда d elete w ord , описанная в других ответах, прекрасно работает для удаления до следующего непробельного символа, когда наш курсор позиционируется перед целью.


д * * б тысячи тридцать-пять : foo b & # x0332; ar & Rarr; б & # x0332; ар

Естественно, мы бы хотели попробовать инвертировать d w для удаления в обратном направлении до первого непробельного символа до курсор. Однако, как показано выше, команда d elete b ack-word удаляет больше, чем мы ожидаем, - также удаляет предыдущее слово. Для этого случая мы должны использовать:

д * +1057 * T * +1059 * * * 1060 <?>: foo b & # x0332; ar & Rarr; foob ​​& # x0332; ар

... где <?> - первый непробельный символ перед курсором. Команда d elete back-un T il удаляет все вплоть до символа <?> * 1074, но не включает *, который в данном случае является символом o в конце "foo".


d т 1085 * <?>: foo_ bar & Rarr; foob ​​& # x0332; ар

Как и в предыдущей команде, мы можем использовать d elete un t il (со строчной буквой "t") для удаления символов forward до следующего <?> символа (для этого примера b в строке "bar"). Это дает тот же результат, что и d w для целей этого вопроса.


д г ш : foo _ bar & Rarr; foob ​​& # x0332; ар

Если наш курсор расположен в середине пробела, мы можем использовать команду d elete i nner w ord удалить пробелы с обеих сторон.


* 1 126 * д * +1127 * / * ** 1 129 1130 * * & тысяча сто тридцать два # x21b5; <?>: foo_ \n bar & Rarr; foob ​​& # x0332; ар

Если пробел, который мы хотим удалить, включает в себя разрывы строк, мы можем использовать команду, показанную выше, чтобы d выбирать до совпадения с шаблоном <?> где шаблон в данном случае является просто первым непробельным символом. Как показано, нажмите Введите для завершения этой команды.

Когда первый непробельный символ встречается в начале строки после разрыва, Vim удалит пробел, но оставит цель на следующей строке. Нам нужно добавить J к вышеприведенной команде к J oin в строках (заглавная буква "j").

д / & # x21b5; * ** 1165 тысяча сто шестьдесят-четыре * J * * +1166 <?>: foo_ \n bar & Rarr; foob ​​& # x0332; ар

7 голосов
/ 08 августа 2011

Чтобы удалить слово независимо от того, на какой букве находится курсор, используйте daw (мнемосхема "удалить слово") также работает с другими командами, например, caw"изменить слово". f и t - другие отличные команды, которые можно использовать вместе с d . Например. удалить из курсора и включить первое вхождение, например, буква "t", используйте dft . Чтобы оставить букву "t" без изменений, используйте dtt .

3 голосов
/ 08 августа 2011

d w должно работать.

...