在Vim中,有没有一种简洁的方法可以删除到单词的结尾或下一个标点符号?

hgc7kmma  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(121)

在Vim中,我经常使用dw删除从光标到单词末尾的内容,使用daw删除整个单词。
既然我一直在编辑SQL,我希望能够对所有使用下划线作为分隔符的表名和字段名执行类似的操作。
Vim中是否有一个简洁的热键,可以删除从光标到单词末尾或到下一个标点符号的内容?我不想花精力去决定“我试图删除的结尾是下划线,还是行尾?还是表名和字段名之间的句点?”
我确信我可以做像df(_)这样的事情|〉),但如果我键入那么多字符,我还不如按8次删除键。

disho6za

disho6za1#

使用dw删除从光标到单词末尾的内容
dw的实际含义是“从光标到下一个单词的删除”。它当然可以“从光标到单词末尾的删除”,但只是在某些情况下。de,实际上意味着“从光标到单词末尾的删除”似乎更合适。
现在,Vim有了:help word的概念:

A word consists of a sequence of letters, digits and underscores, or a
sequence of other non-blank characters, separated with white space (spaces,
tabs, <EOL>).

:help WORD

A WORD consists of a sequence of non-blank characters, separated with white
space.

例如,在下面的示例中:

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

所有这些将被认为是“单词”,由小写的单词移动覆盖:

fmt
   .
    Println
           ("
             hello 
                   world
                        ")

而这些将是“WORDS”,由大写单词运动覆盖:

fmt.Println("hello 
                   world")

此外,wW处理前导/尾随空格的方式也需要考虑。
参见:help word-motions
我不想花精力去决定“我想删除的结尾是下划线,还是行尾,还是表名和字段名之间的句点?”
所有这一切都表明,不能指望Vim能读懂你的想法,知道你到底想删除什么,相反,它有一些温和的固执的默认值和:help 'iskeyword',你可以根据自己的意愿进行调整。
你是唯一一个能解开上面这个谜的人,所以是的,你必须花费你的精神能量。
或者,您可以提供精确和详尽的要求,以便我们可以帮助您找出解决办法。

相关问题