根据缩进级别在Vim中标记块
在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)
2 个回答
Jeet推荐的插件看起来不错,但这里有个简单的替代方法。
如果你设置了 set foldmethod=indent
...
你可以使用可视块选择。
从第3行开始,只需输入 V]z
。
:help fold-commands
移动折叠
[z
移动到当前打开的折叠的开始位置。如果已经在开始位置,就移动到包含它的折叠的开始位置。如果没有包含的折叠,这个命令就会失败。如果使用了数字,就会重复这个命令 [count] 次。
]z
移动到当前打开的折叠的结束位置。如果已经在结束位置,就移动到包含它的折叠的结束位置。如果没有包含的折叠,这个命令就会失败。如果使用了数字,就会重复这个命令 [count] 次。
zj
向下移动到下一个折叠的开始位置。一个关闭的折叠算作一个折叠。如果使用了数字,就会重复这个命令 [count] 次。这个命令可以在一个操作符之后使用。
zk
向上移动到上一个折叠的结束位置。一个关闭的折叠算作一个折叠。如果使用了数字,就会重复这个命令 [count] 次。这个命令可以在一个操作符之后使用。
我在用一个叫做indent object plugin的插件:
这个插件定义了一种新的文本对象,主要是根据缩进级别来区分的。 这在像Python这样的语言中非常有用,因为这些语言的语法是通过缩进来定义代码块的范围的。使用这个插件定义的对象,你可以快速选择整个if结构,比如说。
有了这个插件,你可以使用标准的Vim文本对象命令来选择、删除、修改等代码块,使用“i”和“a”来指代你所在的代码块:比如“vii”、“dii”等等。 这个插件不依赖于特定的编程语言,但在像Python这样的以空格结构为主的语言中尤其有用。