比方说,我有一行(HAML/ruby)正在Vim中编辑,如下所示:
%img{ src: (@image.presence || 'http://placehold.it/60x80/'), alt: "", data: { "snippet-image" => "image" "<150x<80" alt="alt" />
我现在需要删除alt="alt" />
,并用} }
将线路转换为
%img{ src: (@image.presence || 'http://placehold.it/60x80/'), alt: "", data: { "snippet-image" => "image" "<150x<80" } }
例如,我在第一个{
。当我被导航到"alt="之前时,我可以用C} }
替换它。问题在于有效地到达alt=
部分。
13W
,计算或猜测单词的数量,并移动该数量。这是非常低效的,我花了将近半分钟的时间指着屏幕数十三个单词$2B
,移到行尾,向后移两个单词。在这种情况下,效率更高,但仍然需要计数,当我必须在中间时,比如说,会中断/alt=<cr>h
搜索alt=
。然后向后移动一个字符。再次:在这种情况下有效,但在搜索更常见的东西时会中断。例如,我想转到第14个"
我想我缺少了一些简单的概念修改器,可以更有效地在水平方向上使用长行导航。在垂直方向上,有许多东西(文本对象)可供导航,还有一些辅助对象,如相对编号。这里的例子是代码。但我在浏览报告或文章中的长段落时也会遇到同样的问题。
你通常是如何水平导航的?
我用解决了这个问题
$vT";;c } }
我认为至少部分答案是(至少在我看来)长行是一种代码气味;不仅是因为你提出的导航问题,还因为
- 它们很难理解(从视觉上看,尤其是因为不同的编辑对它们的软分解方式不同)
- 大多数工具都对更改有基于行的理解(例如,在源代码管理中查看diffs时),而长行会破坏这种理解(例如谁更改了最后一行的"指责"输出)
大多数语言/语法都允许"换行"(例如,在Bash、C等中使用换行符),我主张使用它来尽可能避免过长的行。
也就是说,我主要坚持按单词W
移动到(粗略)位置,或者如果附近有可识别的唯一{char}
,则为f
/t
。
我通常使用f<char>
/F<char>
,然后使用;
,直到到达正确的位置。如果我看到有很多字符实例,我会在附近查找一些唯一的字符,或者回退到/
搜索命令。这也是一个品味问题。
对romainl答案的一点改进:
$3T"C } }
我不得不留下评论来回答,但我没有足够的声誉