vimscript:在groovy缩进文件

时间:2018-01-25 14:01:49

标签: vim groovy vim-syntax-highlighting

我使用this script作为常规缩进文件。它工作得很好,但有一个例外:它不会缩进内置映射。例如,我想看到这个:

def map = [
  key1: 'value1',
  key2: 'value2'
]

但我看到的是:

def map = [
key1: 'value1',
key2: 'value2'
]

如何调整脚本以便正确识别地图?除了[]之外,我尝试更改第105,125和132行以包含{},但这并没有按预期工作。

2 个答案:

答案 0 :(得分:2)

您发布的Groovy Indent文件只是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

答案 1 :(得分:0)

没有任何新的文字对象,请看here 假设您在代码的第一行,您可以这样做:

from google.cloud import storage
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

def downloadepoch_objects():
    request = service.objects().list(
        bucket=bucket_name,
        versions=True
    )
    response = request.execute()

    for item in response['items']:
        if item['metadata']['epoch'] == restore_epoch:
            print(item['bucket'])
            print(item['name'])
            print(item['metadata']['epoch'])
            print(item['updated'])
            blob = source_bucket.blob(item['name'])
            blob.download_to_filename(
                '/Users/admin/git/data-processing/{}'.format(item))


downloadepoch_objects()

在您的$>i[ $ ......... jump to the end of the line > ......... indent i[ ........ inner [ 中放置textobjvim_wellle_viml,您可以执行以下操作:

~/.vimrc

它标准为:>in[