如何将行缩进量更改为特定值?


11

很多时候,我遇到了缩进不正确的情况。通过粘贴,不良/不受欢迎的缩进插件,或者通常是多余的空格来抵消缩进值,以太。我通常会按此方式<<>>几次将其修复以对其进行修复。在多余的空格的情况下,我会做一个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或0行上进行了自动缩进,因此无法满足我的要求,但希望它能更好地说明问题。

Answers:


18

您可以使用以下: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个空格。

要将其映射到<Leader>=,您可以使用:

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<<,然后>>)就解决了。而且如帮助页面所述,您也可以<C-d>从插入模式使用。


太棒了!这些解决方案工作完美。
Sukima 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.