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

Python 基于Vim中的缩进级别标记块,python,vim,haskell,whitespace,macvim,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"

是否可以根据已经就位的压痕在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)

我使用:

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

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

Jeet链接的插件看起来很整洁,但这里有一个简单的替代方案

如果您已
设置foldmethod=indent

可以使用视觉块选择

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

:help fold-commands
在褶皱上移动 [z] 移动到当前打开折叠的开始处。如果已在开始处,则移动到包含该折叠的折叠的开始处。如果没有包含折叠,则命令失败。使用计数时,重复命令[count]次

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

zj 向下移动到下一个折叠的开始处。闭合的折叠被计为一个折叠。使用计数时,重复命令[count]次。此命令可在操作员操作后使用

zk 向上移动到上一次折叠的末尾。闭合的折叠被计为一次折叠。使用计数时,重复命令[count]次。此命令可在操作员操作后使用


请参阅@sehe密切相关。这个问题及其答案是Python特有的。我想要一个语言不可知的解决方案。