我关闭了“选项 - 编辑器 - 使用制表符”,所以按 Tab 键不会输入制表符,而是输入制表符宽度对应的空格数。
基本配置参 QuickAdd JS & Templater JS 简介及相互修改
“QuickAdd Macro 加载 QuickAdd Capture”。
效果 GIF,点击展开
一个紫点表一个空格。
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 空格缩进,可以说说感受和建议。