Как удалить till non-whitespace в vim?


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

5 51

5 ответов:

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

вы можете попробовать d W. Это будет двигаться по "слову" (см. справку для WORD и word), который выглядит более подходящим для вашего вопроса.

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

array[1] = 5

удара dw, расположенный в a вы:

[1] = 5

, но через dW в результате:

= 5

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

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

следующие примеры демонстрируют, как это сделать в нормальный режим с вариациями, которые учитывают исходное положение курсора. Этот подчеркнутые символы указывают положение курсора:


     d w:   бар следующие файлы-foo_   →   фрагментик

The delete wОГА команда, описанная в других ответах, отлично работает, чтобы удалить до следующего символа без пробелов, когда наш курсор находится до цель.


     db:   Василий Пупкин   →   бар

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

     dT> :   Василий Пупкин   →   фрагментик

...где > - это первый символ без пробела перед курсором. Элемент delete back-unT il команда удаляет все до символ > , который, в данном случае, является символ o в конце "foo."


     dt> :   бар следующие файлы-foo_   →   фрагментик

аналогично предыдущей команде, мы можем использовать delete unt il (в нижнем регистре "t") для удаления символов вперед до следующего > характер (the b в "баре", для этого примера). Это приводит к тому же результату, что и d w для целей этого вопроса.


     dя w:   Василий Пупкин _   →   фрагментик

Если наш курсор расположен в середине пробела, мы можем использовать delete яnner wОГА команда для удаления пробелов из обоих стороны.


     d/> :   следующие файлы-foo_ \n бар   →   фрагментик

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

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

     d/> J:   следующие файлы-foo_ \nбар   →   фрагментик

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