在Vim中根据缩进级别标记块

8

基于已有的缩进,是否可以在Vim中标记一个块?类似于v{。这对于有空格敏感语法(如Haskell和Python)的编程语言非常有用。

例如,在此函数中标记第一个let和return之间的所有内容:

checkArg (com:arg) s d ns 
  | com == "add-source " = do
      let s' = v ++ s
      lift $ saveLinks s'
      return (s', d)
  | com == "remove-source" = do
      let s' = filter (not . hasWord str) s
      lift $ saveLinks s'
      return (s', d)

http://en.wikipedia.org/wiki/Off-side_rule


更有效地在Vim中编辑Python文件 - sehe
@sehe 非常相关。虽然该问题及其答案是针对Python的,但我想要一种与语言无关的解决方案。 - Daniel O
2个回答

7
我使用缩进对象插件
该插件定义了一个基于缩进级别的新文本对象。这在诸如Python等语言中非常有用,其中语法以缩进定义作用域。使用此插件中定义的对象,例如可以快速选择整个if结构。
使用标准的Vim文本对象命令(使用“i”和“a”来引用所在块)可以选择、删除、更改等块。它是与语言无关的,尽管在类似Python的空格结构语言中特别有用/相关。

4

Jeet提供的插件看起来很不错,但这里有一个简单的替代方法。

如果你已经设置了foldmethod=indent...

你可以使用可视块选择。

所以从第3行开始,只需键入V]z

:help fold-commands

移动折叠

[z

移动到当前打开折叠的开头。如果已经在开头,则移动到包含它的折叠的开头。如果没有包含的折叠,则命令失败。使用计数时,重复执行[count]次该命令。

]z

移动到当前打开折叠的结尾。如果已经在结尾,则移动到包含它的折叠的结尾。如果没有包含的折叠,则命令失败。使用计数时,重复执行[count]次该命令。

zj

向下移动到下一个折叠的开头。一个关闭的折叠被视为一个折叠。使用计数时,重复执行[count]次该命令。此命令可在操作符之后使用。

zk

向上移动到前一个折叠的结尾。一个关闭的折叠被视为一个折叠。使用计数时,重复执行[count]次该命令。此命令可在操作符之后使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接