QuickAdd 设置光标位于代码块内时 Tab 缩进输入 2 空格

我关闭了“选项 - 编辑器 - 使用制表符”,所以按 Tab 键不会输入制表符,而是输入制表符宽度对应的空格数。

基本配置参 QuickAdd JS & Templater JS 简介及相互修改
“QuickAdd Macro 加载 QuickAdd Capture”。

效果 GIF,点击展开

一个紫点表一个空格。

20240504_163712

js quickadd 代码
const func = shift=> {
  const view = app.workspace.getActiveFileView()?.currentMode?.cm; if (!view) return
  const inBlock = view.contentDOM.querySelector('.cm-active.cm-line.HyperMD-codeblock')
  if (!inBlock) return
  const { state } = view, sel = state.selection.main
  , sl = state.doc.lineAt(sel.from), edl = state.doc.lineAt(sel.to)
  const changes = []
  for (let i = sl.number; i <= edl.number; i++) {
    const l = state.doc.line(i)
    if (shift) {
      const spaceLen = l.text.match(/^ +/)?.[0]?.length
      const offset = Math.min(spaceLen||0, 2)
      changes.push({from: l.from, to: l.from + offset})
    } else changes.push({from: l.from, insert: '  '})
  }
  if (!shift && sel.from == sel.to) {
    view.dispatch({changes, selection: {anchor: sel.from + 2}})
  } else view.dispatch({changes})
  return !1
}
app.scope.register([], 'Tab', ()=> func(!1))
app.scope.register(['Shift'], 'Tab', ()=> func(!0))

如果是想要在行中间按下 Tab 时,空格插入到光标位置而不是行首,
可参【已解决】类似其他软件的 tab 功能
本话题代码提供了阻止 Tab 默认行为的方法,也可基于此修改实现期望效果。

另,可能有坛友觉得把制表符宽度全部设置为 2 不就好了吗?
我曾想过统一文章缩进和代码缩进的空格数,
花了一晚上将所有用 4 空格缩进的列表改为 2 空格,又花了一晚上改回去。
改回去的原因已记不清,但结论是不建议更改。
不知有无坛友长期使用 2 空格缩进,可以说说感受和建议。