【问题标题】:How to make vim folding not open when typing brackets键入括号时如何使vim折叠不打开
【发布时间】:2022-07-22 16:45:07
【问题描述】:

我正在使用 vim 和 foldmethod=syntax;当我在代码中的某处键入方括号时,它会立即打开所有后续折叠。我明白为什么会发生这种情况:左括号改变了其他括号的对应关系,所有折叠同时改变。我能以某种方式防止这种情况吗?我不知道,可能是所有折叠打开之前的延迟?

编辑:

Vim 版本(vim --version 的输出):

VIM - Vi IMproved 8.1(2018 年 5 月 18 日,2022 年 2 月 1 日 09:16:32 编译)

包含的补丁:1-2269、3612、3625、3669、3741

操作系统:Ubuntu 20.04

【问题讨论】:

  • set foldclose=all 有帮助吗?
  • foldclose=all 确实解决了这个问题,但代价是自动关闭所有地方的所有东西,这也不是我想要的(比如当我输入一个函数时,我想看到整个body 可以轻松导航到我需要编辑的点,或者有时同时打开两个函数定义)
  • 嗯。也许使用在光标后自动插入右括号的插件可能会有所帮助?
  • 我对此也很好奇,但我使用 fdm=marker(即“{{{”和“}}}”)。我目前的问题是我首先输入右括号}。有时折叠打开;然后,当我键入左括号{ 时,打开的折叠都再次关闭。一定有更好的办法。
  • @m_mlvx 好技巧,我至少更改了 for 循环宏,使其不再打开折叠

标签: vim


【解决方案1】:

你可以试试

inoremap { }<left>{

正如@eff 所说。

inoremap { {}&lt;left&gt; 似乎不再工作了。

You may also re-map `<cr>` to smartly make `{}` a block

```vim
inoremap <expr> <cr> MapEnterKey()

function! MapEnterKey()
  let line = getline('.')
  let col_pos = col('.')
  let prev_char = line[col_pos-2]
  let next_char = line[col_pos-1]
  if prev_char == '{' && next_char == '}'
    return "\<cr>\<esc>O"
  else
    return "\<cr>"
  endif
endfunction

【讨论】:

  • 不知道为什么,但 仍然对我不起作用
  • 你能分享你的 Vim 和操作系统版本吗?版本之间可能存在差异。
  • 我认为“{}”仍然会触发问题(因为您仍然先键入左括号,导致折叠打开)。相反,如果您使用“}{”,那么您永远不会创建开放块。
  • 对。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2012-03-18
  • 2017-09-29
  • 2012-08-11
  • 2018-10-27
  • 2013-01-16
  • 2015-09-02
  • 2011-01-09
相关资源
最近更新 更多