Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim:用一个空格缩进(不移动两个空格)_Vim - Fatal编程技术网

Vim:用一个空格缩进(不移动两个空格)

Vim:用一个空格缩进(不移动两个空格),vim,Vim,默认VIM缩进命令按移位宽度空格缩进 e、 g >按移位两个空格缩进行 要更改为缩进插入的空格字符数,请使用shiftwidth选项: :set shiftwidth = <number> :设置移位宽度= 在这里查看更多信息 您还可以将其添加到.vimrc文件中。我不确定是否有更好的方法。但是,有几种方法可以做到这一点(我无论如何都能想到) 您的视觉块解决方案 正如您所说:按Ctl-V选择所需的行,按I插入,然后输入空格数 搜索 与上面类似,但更灵活一点-您可以使用“选择段落”

默认VIM缩进命令按移位宽度空格缩进

e、 g

>按移位两个空格缩进行

要更改为缩进插入的空格字符数,请使用
shiftwidth
选项:

:set shiftwidth = <number>
:设置移位宽度=
在这里查看更多信息


您还可以将其添加到
.vimrc
文件中。

我不确定是否有更好的方法。但是,有几种方法可以做到这一点(我无论如何都能想到)

您的视觉块解决方案

正如您所说:按
Ctl-V
选择所需的行,按
I
插入,然后输入空格数

搜索

与上面类似,但更灵活一点-您可以使用“选择段落”
vip
命令,或任何范围:按
v
vip
或您要选择的范围,键入
:s/^/{n spaces}
,其中{n spaces}是要插入的空格数

它有点冗长,但适用于几乎任何范围。见鬼,如果你想做整个文件,你可以做
Ctl-A
(取决于操作系统)并缩进整个文件(或者跳过整个视觉模式,只做命令模式…如
:1,$s/^/{n spaces}

请注意,不必在s///中包含第三个斜杠,因为在搜索结束时没有放置任何开关

全球

可能您只想缩进与某些模式匹配的行。例如…所有包含foo的行。没问题:键入
:g/foo/s/^/{n spaces}

如果Global的多行部分具有相似的模式,那么它就特别方便。您可以跳转到正常模式land,选择所需的行并相应缩进:
:g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
。使用额外的
Ctl-V{Enter}稍微复杂一点
结尾,但在某些情况下很有用

使用tabstop和shiftwidth


是的,如果你经常这样做-我会做
:设置ts=2
:设置et
:设置sw=2
并使用
>
如果我理解正确,你可以使用:

ctrl+V,jj然后是“:le n”,其中n是要缩进的空格数


使用可视块模式将vi中的代码块缩进三个空格:

  • 选择要缩进的代码块。在正常模式下使用Ctrl+V并向下箭头选择文本。选中该代码块时,输入“:”可向所选文本块发出命令

  • 命令行中将显示以下内容:
    :“在要缩进的代码之间放置标记('a'和'b'):

    <position cursor at top of block>
    m a
    <position cursor at bottom of block>
    m b
    

    我必须在vim脚本中按给定数量的空格(
    amount
    )进行删除。这起到了作用:

        let sw_setting = &shiftwidth
        set shiftwidth=1
        exe "normal v" . amount . "<"
        let &shiftwidth = sw_setting
    
    让sw_设置=&shiftwidth
    设置shiftwidth=1
    
    exe“normal v”.amount.“为什么要避免更改
    sw
    ?这就是原因所在。在可视行选择中,
    {count}>
    将按
    {count}*'shiftwidth'
    缩进,而在正常模式下,
    {count}”
    用于计算缩进的行数。这可能是您想要的。请注意,视觉块选择也是如此,但空格插入在块的第一列之前,而不是行的开头。这非常棒,除了……当有空行时,它插入空格。无论如何要避免这种情况?这是更好的答案。选择的答案是太复杂了,在回答中,选项1“您的视觉块解决方案”在大多数系统上都不起作用。我不同意,因为带有
    :le 3
    的解决方案从左边距缩进(第1/0列),但我认为OP希望(进一步)将文本块从其所在位置缩进。例如,为了更好地垂直对齐代码/文本,与更好的位置相比,自动缩进的代码/文本仅隔几格。我同意这是最好的解决方案,但可能应该用(0)作为前缀导航到行最终应该到达的列,读取并记住列号(在我的配置中显示在右下角),使用它而不是3作为
    le
    命令的参数。使用搜索方法时,它会显示为空格将插入空行的开头。是否有一种干净而聪明的方法来避免这种情况?我还发现我需要直观地选择一个块,然后
    ,然后
    “+1作为可视块解决方案。它非常适合快速修改可视块解决方案不适合我,它只插入到单行,而不是所有行对于那些也想知道什么是
    et
    ts
    sw
    的人来说,
    expandtab
    tabstop
    shiftwidth
    这节省了我大量的时间。很好!1up。一些建议的解决方案在没有设置shiftwidth的情况下,并不像他们所说的那样有效。
    Vjjjj:le 3
    
    <position cursor at top of block>
    m a
    <position cursor at bottom of block>
    m b
    
    :'a,'bs/^/  /g
    
        let sw_setting = &shiftwidth
        set shiftwidth=1
        exe "normal v" . amount . "<"
        let &shiftwidth = sw_setting