基于Vim中的缩进级别标记块

时间:2011-09-11 11:02:34

标签: python vim haskell whitespace macvim

是否可以根据已经存在的缩进在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

2 个答案:

答案 0 :(得分:7)

我使用indent object plugin

  

此插件根据缩进级别定义新的文本对象。   这在Python等语言中非常有用,其中包含语法   根据缩进定义范围。使用中定义的对象   这个插件,可以快速选择整个if结构   示例

这样,您可以使用标准的Vim文本对象命令选择,删除,更改等块,使用“i”和“a”来指代您所在的块:“vii”,“dii”等 它与语言无关,但在Python等空白结构语言中特别有用/相关。

答案 1 :(得分:4)

插件Jeet链接到看起来整洁,但这是一个简单的替代方案。

如果您set foldmethod=indent ...

您可以使用视觉块选择。

从第3行开始,只需输入V]z

:help fold-commands
  

移动超过

     

[Z

     

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

     

】Z

     

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

     

ZJ

     

向下移动到下一个折叠的开头。闭合折叠计为一次折叠。使用计数时,重复命令[count]次。该命令可以在运算符之后使用。

     

ZK

     

向上移动到上一个折叠的末尾。闭合折叠计为一次折叠。使用计数时,重复命令[count]次。该命令可以在运算符之后使用。