vimscript:识别 groovy 缩进文件中的地图
vimscript: identifying maps in groovy indent file
我正在使用 this script 作为 groovy 缩进文件。它工作得很好,但有一个例外:它不会缩进内置地图。例如,我想看到这个:
def map = [
key1: 'value1',
key2: 'value2'
]
但是我看到的是这样的:
def map = [
key1: 'value1',
key2: 'value2'
]
如何调整脚本以正确识别地图?我尝试更改第 105、125 和 132 行以包括 [
和 ]
除了 {
和 }
,但这没有按预期工作。
没有任何新的文本对象看到更多它here
假设你在代码的第一行,你可以这样做:
$>i[
$ ......... jump to the end of the line
> ......... indent
i[ ........ inner [
将 textobjvim_wellle_viml 放入您的 ~/.vimrc
中,您可以执行以下操作:
>in[
代表:indent inner next [
您发布的 Groovy 缩进文件只是对 C 缩进文件的补充。
所以你不会在那里找到左括号的缩进。
与其修改案例,不如自己编写:
if getline(prev) =~# '[' && getline(prev) !~# ']' && getline(v:lnum) !~# ']' && getline(v:lnum) !~# ':$'
let theIndent = indent(prev) + &sw
endif
如果插入第 73 行,这应该或多或少起作用。但是您可能需要做一些微调。根据我的经验,编写正确的工作缩进是语言插件中最难的部分。所以先看教程也无妨
更新
最后一个 ,
的问题来自这个块:
" find start of previous line, in case it was a continuation line
let lnum = SkipGroovyBlanksAndComments(v:lnum - 1)
let prev = lnum
while prev > 1
let next_prev = SkipGroovyBlanksAndComments(prev - 1)
if getline(next_prev) !~ ',\s*$' " <---------lines ending with , are skipped
break
endif
let prev = next_prev
endwhile
现在我对 groovy 的了解不足以确保它不会有副作用,但您可以修改我上面的第一个解决方案以使用 SkipGroovyBlanksAndComments(v:lnum -1)
而不是 prev
我正在使用 this script 作为 groovy 缩进文件。它工作得很好,但有一个例外:它不会缩进内置地图。例如,我想看到这个:
def map = [
key1: 'value1',
key2: 'value2'
]
但是我看到的是这样的:
def map = [
key1: 'value1',
key2: 'value2'
]
如何调整脚本以正确识别地图?我尝试更改第 105、125 和 132 行以包括 [
和 ]
除了 {
和 }
,但这没有按预期工作。
没有任何新的文本对象看到更多它here 假设你在代码的第一行,你可以这样做:
$>i[
$ ......... jump to the end of the line
> ......... indent
i[ ........ inner [
将 textobjvim_wellle_viml 放入您的 ~/.vimrc
中,您可以执行以下操作:
>in[
代表:indent inner next [
您发布的 Groovy 缩进文件只是对 C 缩进文件的补充。 所以你不会在那里找到左括号的缩进。
与其修改案例,不如自己编写:
if getline(prev) =~# '[' && getline(prev) !~# ']' && getline(v:lnum) !~# ']' && getline(v:lnum) !~# ':$'
let theIndent = indent(prev) + &sw
endif
如果插入第 73 行,这应该或多或少起作用。但是您可能需要做一些微调。根据我的经验,编写正确的工作缩进是语言插件中最难的部分。所以先看教程也无妨
更新
最后一个 ,
的问题来自这个块:
" find start of previous line, in case it was a continuation line
let lnum = SkipGroovyBlanksAndComments(v:lnum - 1)
let prev = lnum
while prev > 1
let next_prev = SkipGroovyBlanksAndComments(prev - 1)
if getline(next_prev) !~ ',\s*$' " <---------lines ending with , are skipped
break
endif
let prev = next_prev
endwhile
现在我对 groovy 的了解不足以确保它不会有副作用,但您可以修改我上面的第一个解决方案以使用 SkipGroovyBlanksAndComments(v:lnum -1)
而不是 prev