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

有帮助吗?

解决方案

使用 <!> gt; 命令。要缩进5行, 5 <!> gt; <!> gt; 。要标记一行和缩进, V j j <!> gt; 缩进3行(仅限vim)。要缩进花括号块,将光标放在其中一个花括号上并使用 <!> gt; 或从块中的任何位置使用 <! > GT;

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

此外, shiftwidth 设置可让您控制许多缩进的空间。

其他提示

这个答案总结了这个问题的其他答案和评论,并根据 Vim 文档Vim 维基. 。为了简洁起见,这个答案不区分 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 3 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-indenting 缩进,请执行:help = 了解详情:

<代码> = {

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

或者只是:

<代码> ==

自动缩进当前行。

更多视觉人士的按键:

  1. 进入命令模式: 点击 Escape

  2. 移动到区域的开头以缩进: 点击 ħ Ĵ ķ &#8593; &#8595; &#8592; &#8594;

  3. 开始一个块: 点击 v

  4. 移动到区域末尾以缩进: 点击 ħ Ĵ ķ &#8593; &#8595; &#8592; &#8594;

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

  6. 执行块上的缩进: 点击 &GT;

除了已经给出和接受的答案之外,还可以放置一个标记,然后缩进从当前光标到标记的所有内容。因此,输入 ma ,你想要缩进块的顶部,向下光标,然后输入&gt;'a (注意“ a “可以替换任何有效的标记名称。这有时比 5&gt;&gt; vjjj&gt; 更容易。

所有命令的主人是 点击 <代码> GG = G

这会缩进整个文件!

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

缩进当前行 点击 <代码> ==

缩进当前行下方的所有行

<代码> = G

缩进当前行

下面的 n

<代码> n ==可

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

<代码> 4 ==

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

<代码> =%

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

转到文本的开头

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

除了提供的解决方案之外,我喜欢用&gt;}

一次做一个段落。

当您选择一个块并使用&gt; 进行缩进时,它会缩进然后返回到正常模式。我在.vimrc文件中有这个:

vnoremap < <gv

vnoremap > >gv

它允许您根据需要随时缩进您的选择。

假设您使用 2 个空格来缩进代码。类型:

:set shiftwidth=2
  • 类型 v (进入可视块编辑模式)
  • 使用箭头键移动光标(或使用 H/j/k/) 以突出显示要缩进或取消缩进的行。

然后:

  • 类型 > 缩进一次(2 个空格)。
  • 类型 2> 缩进两次(4 个空格)。
  • 类型 3> 缩进三次(6 个空格)。
  • ...
  • 类型 < 取消缩进一次(2 个空格)。
  • 类型 2< 取消缩进两次(4 个空格)。
  • 类型 3< 取消缩进三次(6 个空格)。
  • ...

你明白了。

(空行不会缩进,我认为这很好。)


我在 (g)vim 缩进块文档中找到了答案:

:help visual-block
/indent

如果您想对命令进行计数,请在键入操作员字符之前执行此操作:“ V {Move-Around} 3>”(向右移动第3行凹痕)。

vim UI 的美妙之处在于它的一致性。编辑命令由命令和光标移动组成。光标移动始终相同:

  • H 到屏幕顶部, L 到底部, 中号 到中间
  • nG 去n号线, G 单独到文件底部, GG 到达顶点
  • n 移至下一个搜索匹配, 到上一个
  • } 到段落末尾
  • % 到下一个匹配的括号,括号或标签类型
  • 进入 到下一行
  • 'X 标记 x,其中 x 是字母或另一个 '
  • 还有更多,包括 w 对于单词来说, $ 或者 0 线路提示等,此处不适用,因为不是 线 动作。

因此,为了使用 vim,您必须学习移动光标并记住一系列命令,例如, > 缩进(和 < 到“突出”)。
因此,为了缩进从光标位置到屏幕顶部的行,您需要执行以下操作: >H, >G 缩进到文件底部。

如果,而不是输入 >H, ,您输入 dH 然后你要删除相同的行块, CH 用于更换等

某些光标移动更适合特定命令。特别是, % 命令可以方便地缩进整个 HTML 或 XML 块。
如果文件突出显示语法(:syn on)然后将光标设置在标签的文本中(例如,在 <div> 的“i”中并输入 >% 将缩进到结束 </div> 标记。

这就是 vim 的工作原理:人们只需记住光标移动和命令,以及如何混合它们。
所以我对这个问题的回答是“转到要缩进的行块的一端,然后键入 > 命令并移动到块的另一端”如果 缩进 被解释为移动线路, = 如果 缩进 被解释为漂亮打印。

这样做

$vi .vimrc

并添加此行

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...

使用 VISUAL MODE 执行此操作的快速方法使用与注释代码块相同的过程。

如果您不想更改 shiftwidth 或使用任何 set 指令,并且足够灵活,可以使用TABS或SPACES或任何其他角色,这将非常有用。

  1. 将光标定位在块的开头
  2. v切换到 - VISUAL MODE -
  3. 选择要缩进的文字
  4. 输入切换到提示
  5. 用3个前导空格替换:

    :'&lt;,'&gt; s / ^ / / g

  6. 或替换为主要标签:

    <代码>: '&LT;,' &GT; S / ^ / \ T / G

  7. 简要说明:

    '&lt;,'&gt; - 在视觉选择的范围内

    s / ^ / / g - 在整个范围内的每一行的开头插入3个空格

    (或)

    s / ^ / \ t / g - 在整个范围内的每一行的开头插入 Tab

我喜欢标记文本缩进:

  1. 转到文本行的开头,然后输入 ma(a 是“m”ark 中的标签:可以是任何字母)
  2. 转到文本的末尾行并输入 mz (同样 z 可以是任何字母)
  3. :'a,'z> 或 :'a,'z< 将缩进或突出(这是一个单词吗?)
  4. 瞧!文本被移动(空行保持空白,没有空格)

附:您可以使用 :'a,'z 技术来标记任何可能使用行、数字或 % 的操作(d、y、s/// 等)的范围

&gt;} &gt; {从当前行缩进到下一段

&lt;} &lt; {相同的un-indent

还有一种方法还没有被提及 - 您可以使用 norm i 命令在行的开头插入给定的文本。在第2-10行之前插入10个空格:

:2,10norm 10i 

请记住,命令末尾必须有空格字符 - 这将是我们想要插入的字符。我们也可以用任何其他文本缩进行,例如用5个下划线字符缩进文件中的每一行:

:%norm 5i_

或者更奇特的东西:

:%norm 2i[ ]

更实际的例子是用#character:

注释Bash / Python / etc代码
:1,20norm i#

要重新缩进使用 x 而不是 i 。例如,从每行中删除前5个字符:

:%norm 5x

对我来说,MacVim(Visual)解决方案是,用鼠标选择并按“&gt;”,但是在将以下行放入“〜/ .vimrc”之后。因为我喜欢空格而不是标签:

set expandtab
set tabstop=2
set shiftwidth=2

能够从命令行(Terminal.app)调用MacVim也很有用,因为我有以下帮助目录“〜/ bin”,我在其中放置了一个名为“macvim”的脚本: / p>

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

当然在“〜/ .bashrc”中:

export PATH=$PATH:$HOME/bin

Macports与“〜/ .profile”混淆很多,所以PATH环境变量可能会很长。

我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):

  1. Esc 进入命令模式
  2. 移至要识别的最后一行的第一个字符
  3. ctrl - v 开始选择块
  4. 移至要识别的第一行的第一个字符
  5. shift - i 进入特殊插入模式
  6. 键入您需要缩进的任意数量的spase / tabs(例如
  7. Esc ,所有行中都会出现空格
  8. 当您不想更改vimrc中的标识/标签设置或记住它们在编辑时更改它时,这非常有用。

    要取消注意,我使用相同的 ctrl - v 块选择选择空格并使用 d 删除它。

我不知道为什么很难找到像这样的简单答案......

我自己不得不为了解这一点而奋斗 它非常简单

编辑主目录下的 .vimrc 文件 添加此行

set cindent

在您要正确缩进的文件中

在正常/命令模式下

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

5 == 将从当前光标位置缩进5行。 所以你可以在 == 之前键入任何数字,它会缩进行数。 这是命令模式。

gg = G 将从上到下缩进整个文件。

:help left

ex mode 中,您可以使用:left :le 将行对齐指定的数量。 具体来说,:left 左对齐[range]中的行。它将行中的缩进设置为[indent](默认为0)。

:%le3 :%le 3 :%left3 :%left 3 将对齐用三个空格填充整个文件。

:5,7 le 3 将第3行到第7行对齐,用3个空格填充它们。

:le 没有任何值或:le 0 将保持与0的填充对齐。

这适用于 vim gvim

:line_num_start,line_num_end>

e.g。

14,21> shifts line number 14 to 21 to one tab

增加'&gt;'更多标签的符号

e.g。

14,21>>> for 3 tabs

使用Python很多,我发现自己需要经常需要通过多个缩进来移动块。您可以使用任何块选择方法执行此操作,然后在&gt;

之前输入您希望跳转的缩进数量

EG。 V5j3&gt; 将缩进5行3次 - 如果使用4个空格进行缩进,则为12个空格

要缩进文件类型中的每一行, esc 然后G = gg

如何通过#空格缩进vi中突出显示的代码:

选项1:使用Visual Block模式将vi中的代码块缩进到三个空格:

  1. 选择要缩进的代码块。在正常模式下使用 Ctrl + V 并向下箭头选择文本。选择后,输入命令给所选文本块。

  2. 以下内容将出现在命令行中::'&lt;,'&gt;

  3. 要将缩进设置为3个空格,请键入 le 3 并按Enter键。出现的是::'&lt;,'&gt; le 3

  4. 所选文本会立即缩进为3个空格。

  5. 选项2:使用Visual Line模式将vi中的代码块缩进为三个空格:

    1. 在VI中打开文件。
    2. 将光标放在某些代码上
    3. 处于正常模式时,请按以下键:

      Vjjjj:le 3
      

      解释您所做的事情:

      V 表示开始选择文字。

      jjjj 箭头向下4行,突出显示4行。

      告诉vi您将输入突出显示文本的说明。

      le 3 表示缩进突出显示的文本3行。

      所选代码会立即增加或减少到三个空格缩进。

    4. 选项3:使用Visual Block模式和特殊插入模式增加缩进:

      1. 在VI中打开文件。
      2. 将光标放在某些代码上
      3. 处于正常模式时,请按以下键:

        控制+ V

        jjjj
        

        (按空格键5次)

        ESC 切换+ I

        所有突出显示的文字都缩进了5个空格。

将所有文件缩进4:

esc 4G=G

我使用块模式视觉选择:

  • 走到方块的前面移动(在顶部或底部)。
  • 按 ctrl-v 进入视觉块模式。
  • 导航以选择行前面的列。
  • 按 I (shift i) 进入插入模式。
  • 键入一些空格。
  • 按 ESC 键。所有线路都会移动。

这不是一个单一任务者。有用:

  • 在行的中间。
  • 在所有行上插入任意字符串。
  • 更改列(使用 c 而不是 I)。
  • 猛拉、删除、替换等...
  • 对于代码块 {}: = + %

  • 对于选定的线路: 转移 + v 使用向上/向下箭头键选择,然后按 =.

  • 对于整个文件: gg + = + G

笔记: 'gg' 表示转到第 1 行,'=' 是缩进命令,'G' 将光标移动到文件末尾.

假设 | 表示光标在Vim中的位置。如果要缩进的文本包含在代码块中,如:

int main() {
line1
line2|
line3
}

你可以在( i )块( i )中执行&gt; i {,意思是“缩进(&gt; )代码> {&QUOT;得到:

int main() {
    line1
    line2|
    line3
}

现在假设这些行是连续的但在块之外,例如:

do
line2|
line3
line4
done

要缩进第2行至第4行,您可以直观地选择行并输入&gt; 。或者甚至更快,您可以执行&gt; 2j 来获取:

do
    line2|
    line3
    line4
done

请注意,&gt; Nj 表示从当前行缩进到下面的 N 行。如果要缩进的行数很大,则用户可能需要几秒钟来计算 N 的正确值。为节省宝贵的秒数,您可以使用 set relativenumber 激活相对编号选项(自Vim版本7.3起可用)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top