【问题标题】:Vim and indentation with brackets/bracesVim 和带括号/大括号的缩进
【发布时间】:2020-05-05 03:10:15
【问题描述】:

在编辑 JavaScript 时,我通常必须这样做:

function myFunc() {
  // func body here
}

我尝试了一些括号关闭插件,例如 AutoClose 和 vrackets,但是当我编写上面的代码时,它们都是这样做的:

function myFunc() {<CR>
|}

当我转到新行时,如何让 Vim 在括号前插入 a,并像这样正确缩进光标:

function myFunc() {<CR>
  |<CR>
}

有没有类似插件之类的东西?

【问题讨论】:

  • delimitMate 插件为此 IIRC 提供了一个选项。
  • @Randy:我的 vim 配置一定是被诅咒的什么的。 delimitMate 不会做 CR 扩展...
  • 虽然这个线程很老了,但我仍然想补充一点,delimitMate 确实有一个选项可以做到这一点:只需将 let g:delimitMate_expand_cr = 1 添加到您的 .vimrc 中。有关更多选项,请参阅:help delimitMate

标签: vim


【解决方案1】:

我将此映射与 AutoClose 结合使用:

inoremap {<CR> {<CR>}<C-o>O

不需要特殊的组合键。

【讨论】:

  • 是的,我发现您实际上可以在发布问题几个月后映射这样的组合键。
  • 这终于为我完成了,我也将它与 vim-autoclose 一起使用。
【解决方案2】:

我的~/.vimrc 中有这一行:

inoremap <C-Return> <CR><CR><C-o>k<Tab>

【讨论】:

  • 出于某种原因,它对我没有任何作用...可能与插件冲突。
  • 很难说。 “它对我没有任何作用”是什么意思?它有什么作用吗?什么?
  • 我的意思是无论我是否在 vimrc 中使用它都没有任何区别......这很奇怪。我的猜测是某些插件会覆盖映射。
  • 现在我注意到(在 vimrc 中没有上述映射),当我在插入模式下按 Enter 时,我得到了 &lt;S***_SelectCompletion(1)&gt;(其中 *** 不可读)显示了几分之一秒。编辑:是的,SuperTab 正在重新映射 以处理自动完成候选人的选择。
  • 删除 SuperTab 后,上面的映射 sill 并没有什么不同...
【解决方案3】:

我可能有点离谱,但是您是否尝试过使用缩写命令?

:ab {} {<cr>}<esc>ko

当然,我打开了 smartindent,我必须输入 {} 才能完成,但它对我有用。

【讨论】:

  • 如此接近,但当我开启括号自动关闭时不起作用...我可以创建一个不同的缩写,如fnc 并将其扩展为你在那里的内容,作为权宜之计的解决方案。如果没有人提出更好的解决方案,我会同意的。
【解决方案4】:

你有没有尝试过map整个函数,比如

inoremap ,4 function() {}<left><enter><esc>O

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2016-10-03
    • 2021-01-11
    • 2012-03-18
    • 2017-05-24
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多