如何在Vim中自动完成并格式化括号?

时间:2018-03-27 00:12:12

标签: vim

我正在通过Java书籍,因此,我发现自己输入了大量的花括号。考虑到我知道Vim有多强大,虽然远非专家,但我已经找到了让它为我处理大括号的方法。我遇到了autocmd s的使用,我把以下内容放在我的.vimrc中: autocmd FileType java inoremap <buffer> { {<CR><CR>}<Up><Tab>。我也试过了一个正常的inoremap,但没有用。

我现在拥有的最高级别块。但是,当我深入到任何块时,<Tab>似乎不会执行。其他一切都按预期工作。但无论之后有多深,但光标总是在方法级别的开头结束。我想这是因为我告诉它只添加一个标签。如何使标签计数取决于深度?

2 个答案:

答案 0 :(得分:0)

假设您设置了某种自动延迟设置:

augroup Java
    autocmd!
    autocmd FileType java inoremap <buffer> { {<CR>}<C-c>O
augroup END

您的版本的作用:

  1. 插入开口支撑,
  2. 插入换行符
  3. 插入换行符
  4. 插入右括号,
  5. 将光标向上移动到第1列
  6. 插入标签。
  7. 你说对了:因为你只插入一个标签,这只能让你进入第一级缩进。

    我的版本的作用:

    1. 插入开口支撑,
    2. 插入换行符
    3. 插入右括号,
    4. 退出插入模式而不触发自动命令,
    5. 在当前行上方打开一个新行。
    6. :help O尊重您的自动延迟设置,因此它将在右缩进级别进入插入模式。

      或者,您可以像这样修改您的版本:

      augroup Java
          autocmd!
          autocmd FileType java inoremap <buffer> { {<CR><CR>}<C-c>S
      augroup END
      

      将插入模式保留在大括号之间的空白行上,并执行:help S以在右缩进级别进入插入模式。

      许多方法可以给猫皮肤。

答案 1 :(得分:0)

我建议让Vim使用其内置的Java模式。如果你添加

source $VIMRUNTIME/vimrc_example.vim

到你的.vimrc,Vim会获得一些有用的默认值,包括自动文件类型检测和格式化规则。您会发现打开.java文件会为您提供所需的大部分内容。

要预测下一个问题,如果标签宽度不是您想要的,请添加类似

的内容
autocmd FileType java setlocal shiftwidth=4

到.vimrc的末尾。