VIM从行尾删除到字符?

VIM从行尾删除到字符?,vim,Vim,我正在寻找VI(m)中的一个快速命令,在这里我可以删除从行尾到一个字符的所有文本。我可以做相反的事情: :%s/.*" 但我想要相反的结果。我试过: :%s/$.*" 但这并没有起作用(我的逻辑是$-从行的末尾开始,找到所有内容,然后删除它) 以下是我试图处理的文本示例(编辑:但这一行出现多次-解决方案必须适用于许多类似结构的行-单行解决方案不够-首先为不清楚表示歉意): 变成 APPPOOL "default app pool" 两个想法。第一: :s/\(.*"\).*/\1/ 或

我正在寻找VI(m)中的一个快速命令,在这里我可以删除从行尾到一个字符的所有文本。我可以做相反的事情:

:%s/.*"
但我想要相反的结果。我试过:

:%s/$.*" 
但这并没有起作用(我的逻辑是$-从行的末尾开始,找到所有内容,然后删除它)

以下是我试图处理的文本示例(编辑:但这一行出现多次-解决方案必须适用于许多类似结构的行-单行解决方案不够-首先为不清楚表示歉意):

变成

APPPOOL "default app pool"
两个想法。第一:

:s/\(.*"\).*/\1/
或者,走到行的末尾并执行以下操作:

dT"x
要对整个缓冲区进行操作:

:%normal $dT"x

为什么不直接键入
$dT“

如果你真的想用:s来做,试试看

:s/"[^"]*$/"/

不完全正确-这将删除引号本身。它还将从第一个引号中删除,而不是从最后一个引号中删除。对于
dT
,可能是:%s/“[^”]\+//g+1;
:s
中的backref应该不需要。例如,非贪婪(
:s/“\zs.{-}
)或字符集(
:s/“\zs[^”]*
)。我也尝试了这些方法,但效果不理想。Kent的解决方案满足了我的需要,因为它搜索了所有行并删除了每行中的正确文本。我的最终解决方案是:%s/“[^”]*$/”/谢谢,这就是它,除了我在s之前添加了一个%之外。这难道不等于从给定的字符中删除到行尾,这应该可以用ctrl+d来完成吗?或者这是某种脚本吗?
:s/"[^"]*$/"/