在 vi 中快速缩进多行

它应该是微不足道的,甚至可能在帮助中,但我不知道如何导航。如何在 vi 中快速缩进多行?

答案

使用>命令。到缩进五线,5>>。要标记一行并缩进,可使用V j j >缩进三行(仅 Vim)。要缩进大括号块,请将光标放在大括号之一上,并使用> 或在 block use > i B 中的任何位置。

如果要在周围复制文本块并且需要在新位置对齐块的缩进,请使用] p而不是p 。这会将粘贴的块与周围的文本对齐。

另外, shiftwidth设置使您可以控制缩进多少空格。

该答案总结了该问题的其他答案和评论,并基于Vim 文档Vim Wiki添加了更多信息。为简洁起见,此答案不区分 Vi 和 Vim 特定命令。

在下面的命令中,“重新缩进” 表示 “根据缩进设置缩进行”。 shiftwidth是控制缩进的主要变量。

一般命令

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

您可以将{替换为}B ,例如=iB是有效的块缩进命令。看一下“缩进代码块” ,这是一个很好的示例,可以尝试使用这些命令。

另外,请记住

.    Repeat last command

,因此可以轻松方便地重复执行缩进命令。

重新缩进完整文件

另一个常见情况是要求在整个源文件中固定缩进:

gg=G  Re-indent entire buffer

您可以将此想法扩展到多个文件:

" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall

或多个缓冲区:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

在可视模式下

Vjj> Visually mark and then indent three lines

在插入模式下

这些命令适用于当前行:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

防爆命令

当您希望缩进特定范围的行而不移动光标时,这些功能很有用。

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

使用标记缩进

另一种方法是通过标记

ma     Mark top of block to indent as marker 'a'

... 将光标移到结束位置

>'a    Indent from marker 'a' to current location

控制缩进的变量

您可以在.vimrc 文件中进行设置

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

Vim 具有基于文件类型的智能缩进。尝试将其添加到您的. vimrc 中:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

参考文献

一个很大的选择是:

gg=G

它真的很快,并且一切都缩进了;-)

也可以尝试这种方式进行C 缩进缩进。执行:help =以获取更多信息:

={

这将自动缩进您所在的当前代码块。

要不就:

==

自动缩进当前行。

吸引更多视觉人士的按键:

  1. 进入命令模式:
    逃逸

  2. 移至要缩进的区域的起点:
    h j k l

  3. 开始一个块:
    v

  4. 移动到该区域的末端以缩进:
    h j k l

  5. (可选)键入所需的缩进级别数
    0..9

  6. 在块上执行缩进:
    >

除了已经给出和接受的答案外 ,还可以放置一个标记,然后缩进从当前光标到该标记的所有内容。

因此,在要缩进的块的顶部输入ma ,将光标向下移动到所需位置,然后键入>'a (请注意,“ a ” 可以代替任何有效的标记名)。有时比5>>vjjj>容易。

所有命令的主人是
gg=G

这会使整个文件缩进!

下面是一些简单而优雅的命令,用于在 Vim 或 gVim 中快速缩进行。

缩进当前行
==

缩进当前行下面的所有行

=G

在当前行下方缩进n

n==

例如,缩进当前行下方的 4 行

4==

要缩进一段代码,请转到其中一个大括号并使用命令

=%

这些是缩进多行的最简单但功能强大的命令。

转到文本的开头

  • v键进入可视模式。
  • 使用向上 / 向下箭头突出显示文本。
  • =缩进突出显示的所有行。

除了提供的解决方案外,我还喜欢使用>}一次做一个段落

当您选择一个块并使用>进行缩进时,其缩进然后返回到普通模式。我的. vimrc 文件中有这个:

vnoremap < <gv

vnoremap > >gv

它使您可以根据需要缩进选择次数。