很多时候,我遇到了缩进不正确的情况。通过粘贴,不良/不受欢迎的缩进插件,或者通常是多余的空格来抵消缩进值,以太。我通常通过<<>>该行修复几次,以进行修复。对于多余的空格,我将为我实际想要的每个缩进级别分别执行100<<>>

问题是,就像|允许您通过编号10|设置列的动作会将光标移至第10列。如何指定缩进级别?

shiftwidth=4 expandtab的示例(此操作不起作用):

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)


计算最后一行(2)的缩进级别,并为多余的空格加一个,然后键入3<<,然后计算我然后1>>的缩进级别(或使用autoindent==命令)。我要求类似1==的功能将压痕强制为1级压痕。或者在某些情况下,请使用0==一起删除所有压痕。 (分别),因此不能满足我的要求,但希望它能更好地说明问题。

#1 楼

您可以使用:left命令:


:[range]le[ft] [indent]
[range]中的左对齐线。将行中的缩进设置为[indent](默认值为0)。 {Vi无此功能}


请注意,:left将缩进设置为n个空格,并且不知道shiftwidthtabstop,因此使用:left 8将使用8个空格。

如果要设置缩进级别,可以轻松定义一个命令:

command! -nargs=1 Left execute 'left ' . &sw * <args>


使用:Left 2将缩进设置为8个空格。

要将其映射到 =,可以使用:

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'


我不确定这是否是最佳方法,但这是唯一的方法我可以管理... \ = 2会将当前行缩进8个空格,而5 \ = 3会将接下来的5行缩进12个空格。


相关的提示解决您的问题的方法是设置shiftround选项。从:help 'shiftround'


缩进到'shiftwidth'的倍数。适用于><
命令。插入模式下的CTRL-T和CTRL-D总是将缩进量四舍五入为
'shiftwidth'的倍数(这是Vi兼容的)。 “舍入”到8个空格。因此,您的问题(使用<<3<<)得到了解决。而且如帮助页面所述,您还可以从插入模式使用>>

评论


太棒了!这些解决方案工作完美。

– Sukima
15年3月7日在1:35