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

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

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

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

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

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

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

Всего 3 ответа


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

d?><cr>

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

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

:h ?
:h exclusive
:h />

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

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

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

Пример:

nnoremap <silent> [ ?Szss<cr>

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


Используя опцию «T»

dTe ........... delete until (before) 'e'

Есть идеи?

10000