Vim - 删除直到上一个词(不包括上一个词)

Vim - delete until previous word (excluding the previous word)

有没有办法删除直到 vim 中的前一个单词(而不删除前一个单词本身的部分内容)?

例如使结果如下(竖线'|'为光标所在位置):

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

另一个例子:

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

有没有办法做到这一点?

我想使用 ge,但它具有包容性并且不太适合此应用程序。而是使用带有删除命令的搜索 ?

d?\><cr>

这会通过搜索 (?) 向后(独占)删除 (d),直到找到单词边界的结尾 (\>)。

如需更多帮助,请参阅:

:h ?
:h exclusive
:h /\>

Peter Rincker 给了我以下想法:

"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 - 搜索非白色 space 字符
\s - 搜索白色 space 字符
<cr> - 按回车键(完成命令)
\zs - 将光标置于此位置。查找'help \zs',以获得更准确的信息。

示例:

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

当按下 [ 按钮时,向后搜索 (?),找到一个非白色 space 字符 (\S),然后是一个白色 space 字符 (\s)。将光标放在白色 space 和非白色 space 字符 (\zs) 之间。输入命令(<cr>).

使用 'T' 选项

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

的组合
  • db(删除到当前单词的开头)和
  • diw(删除内部单词,(也删除单词之间的所有空格))