有没有办法删除直到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 />
使用 'T' 选项
dTe ........... delete until (before) 'e'
的组合
- db(删除到当前单词的开头)和
- diw(删除内部单词,(也删除单词之间的所有空格))
Peter Rincker给了我以下想法:
"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>
)。