假设我们有以下代码:
function test() {
const a = {<HERE>}; // `<HERE>` is the caret position
}
按下时enter
,将按预期添加前导空格:
function test() {
const a = {
<HERE>};
}
enter
当按下下一个键时:
function test() {
const a = {
<HERE>};
}
如何返回上一行而不丢失前导空格?当我按下<C-o>
和 时k
:
function test() {
const a = {
<HERE>
};
}
似乎它与文件类型无关。我在 TypeScript 和 Rust 文件中也遇到了同样的问题(其他类型我还没检查)。
你所描述的行为是故意的,并且非常符合使用插入模式仅用于……插入文本的理念。毕竟,没人希望自己的文件中出现无意义的空格,对吧?
您实际上想要做的是从状态 A 开始扩展光标周围的括号:
至状态 B:
无需离开插入模式。
按
<CR>
两次,然后将光标移动到上面的行并不是一个好方法,因为该行上没有任何内容,最好的k
办法是将光标移动到第 1 列。正确的方法是……
按一次将
<CR>
右括号放在其自己的行上:使用 在当前行上方打开一个新行
:help O
,遵循当前的缩进规则:以下所有命令序列都以略有不同的方式完成工作:
romainl 的答案已经解释了不留下杂散空格的理由。强制重新缩进当前行的通常方法是Ctrl-F在插入模式下按 。
这在某种程度上取决于文件类型,因为只有当它
!^F
是缓冲区'indentkeys'
选项的一部分时,它才有效。默认情况下,它是存在的(请参阅:help 'indentkeys'
),如果没有,您可以使用 来添加它:set indentkeys+=!^F
。=
修复缩进的另一种方法是在写完内容后使用普通模式命令。缩进是一个非常广泛的主题,并被涵盖
:help indent.txt
。