Vim - удалить до предыдущего слова (исключая предыдущее слово) - PullRequest
3 голосов
/ 27 марта 2020

Есть ли способ удалить до предыдущего слова в vim (без удаления частей самого предыдущего слова)?

Например, так что результат будет следующим (символ канала '|' равен положение курсора):

before: one   two   three   |four
after:  one   two   three|four

Другой пример:

before: one   two   three   fo|ur
after:  one   two   three|ur

Есть ли способ сделать это?

Ответы [ 4 ]

3 голосов
/ 27 марта 2020

Я хотел бы использовать ge, однако это включено и не совсем подходит для этого приложения. Вместо этого используйте поиск, ?, с командой удаления.

d?\><cr>

Это удаляет (d) назад (исключительно) путем поиска (?), пока не будет найдена граница конца слова ( \>).

Для получения дополнительной помощи см .:

:h ?
:h exclusive
:h /\>
1 голос
/ 28 марта 2020

Использование опции 'T'

dTe ........... delete until (before) 'e'
0 голосов
/ 31 марта 2020

Комбинация

  • db (удалить в начало текущего слова) и
  • diw (удалить внутреннее слово, (также все пробелы между словами))
0 голосов
/ 27 марта 2020

Питер Ринкер дал мне следующую идею:

"My custom text objects (move until one character before word)
nnoremap <silent> [ ?\S\zs\s<cr>
nnoremap <silent> ] /\s\S<cr>
vnoremap <silent> [ ?\S\zs\s<cr>
vnoremap <silent> ] /\s\S<cr>
nnoremap <silent> d[ d?\S\zs\s<cr>
nnoremap <silent> d] d/\s\S<cr>
nnoremap <silent> c[ c?\S\zs\s<cr>
nnoremap <silent> c] c/\s\S<cr>

Значения:
? - поиск назад
/ - поиск вперед
\S - поиск не символ пробела
\s - поиск символа пробела
<cr> - нажатие клавиши ввода (завершение команды)
\zs - установка курсора на эту позицию. Найдите «помощь \ zs», для получения более точной информации.

Пример:

nnoremap <silent> [ ?\S\zs\s<cr>

При нажатии кнопки [ выполните поиск в обратном направлении (?) , для непробельного символа (\S), за которым следует символ пробела (\s). Поместите курсор между пробелом и непробельным символом (\zs). Введите команду (<cr>).

...