在vi中快速缩进多行

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

906944 次浏览

使用>命令。要缩进五行,请使用5>>。要标记一行并缩进,请使用Vjj>缩进三行(仅限Vim)。要缩进花括号块,请将光标放在其中一个花括号上并使用>%或从块内的任何位置使用>5152。

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

此外,#0设置允许您控制要缩进的空格数量。

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

因此,在缩进块的顶部输入ma,光标向下,然后键入>'a(注意“a”可以替换任何有效的标记名称)。这有时比5>>vjjj>容易。

以及提供的解决方案,我喜欢用>}一次做一段事情

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

={

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

或者只是:

==

自动缩进当前行。

更多视觉人物的按键:

  1. 进入命令模式:
    Escape

  2. 移动到要缩进的区域的开头:
    hjkl

  3. 启动一个块:
    v

  4. 移动到要缩进的区域末尾:
    hjkl

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

  6. 在块上执行缩进:
    >

一个大的选择将是:

gg=G

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

当你选择一个块并使用>缩进时,它会缩进然后回到正常模式。我的. vimrc文件中有这个:

vnoremap < <gv
vnoremap > >gv

它可以让你缩进你的选择尽可能多的时间。

这样做:

$vi .vimrc

并添加这一行:

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

这仅适用于cpp文件。您可以对另一种文件类型执行此操作,也只需修改文件类型…

我喜欢为缩进标记文本:

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

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

这个答案总结了这个问题的其他答案和注释,并在Vim留档vim wiki的基础上添加了额外的信息。为了简洁起见,这个答案没有区分Vi和Vim特定的命令。

在下面的命令中,“re-indent”表示“根据缩进设置缩进行”。#0是控制缩进的主要变量。

通用命令

>>   Indent line by shiftwidth spaces<<   De-indent line by shiftwidth spaces5>>  Indent 5 lines5==  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 lineCTRL-d   remove indent at start of line0 CTRL-d remove all indentation from line

Ex命令

当您想要缩进特定范围的行而不移动您的光标。

:< 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 indentationset 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 lineset smartindent     "Automatically inserts indentation in some casesset cindent         "Like smartindent, but stricter and more customisable

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

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

参考文献

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

如果您不希望更改shiftwidth或使用任何set指令,并且足够灵活地使用TABS或SPACES或任何其他字符,这很有用。

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

    :'<,'>s/^/ /g

  6. 或替换为前导选项卡:

    :'<,'>s/^/\t/g

  7. 简要说明:

    '<,'>-在视觉选择的范围内

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

    (或)

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

>}>{从当前行缩进到下一个段落

<}<{相同的un-indent

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

set expandtabset tabstop=2set shiftwidth=2

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

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

当然,在“~/. bashrc”中:

export PATH=$PATH:$HOME/bin

MacPorts对“~/. file”造成了很大的干扰,因此PATH环境变量可能会变得很长。

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

  • H到屏幕顶部,L到底部,M到中间
  • ngn行,g到文件底部,gg到顶部
  • n移动到下一个搜索匹配,N移动到上一个
  • }到段落末尾
  • %到下一个匹配的括号,括号或标签类型
  • 输入到下一行
  • 'x标记x,其中x是一个字母或另一个'
  • 还有更多,包括wW的单词,$的线条提示等,这些不适用于这里,因为不是线的动作。

因此,为了使用vim,您必须学会移动光标并记住一系列命令,例如,>缩进(和<<“outent”)。

因此,对于从光标位置缩进到屏幕顶部的行,您可以执行>H>g缩进到文件底部。

如果不是键入>H,而是键入dH,那么您将删除相同的行块,cH用于替换它,等等。

某些光标移动更适合特定命令。特别是,%命令可以方便地缩进整个超文本标记语言或XML块。如果文件的语法突出显示(:syn on),则将光标设置在标记的文本中(例如,在

的“i”中并输入>%将缩进到结束的
标记。

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

5==将从当前光标位置缩进五行。

因此,您可以在==之前键入任何数字。它将缩进行数。这是在命令模式下。

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

经常使用Python,我发现自己需要经常需要通过多个缩进移动块。您可以使用任何块选择方法来做到这一点,然后只需在>之前输入您希望跳转的缩进数

例如,V5j3>将缩进五行三次-如果您使用四个空格进行缩进,则为12个空格。

转到文本的开头

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

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

  1. Esc进入命令模式
  2. 移动到要缩进的最后一行的第一个字符
  3. Ctrl+V开始块选择
  4. 移动到要缩进的第一行的第一个字符
  5. Shift+进入特殊插入模式
  6. 键入您需要缩进的空间/制表符(例如两个)
  7. Esc,空格将出现在所有行中

当您不想更改vimrc中的缩进/制表符设置或在编辑时记住它们以更改它时,这很有用。

为了取消缩进,我使用相同的Ctrl+V块选择来选择空格并使用D删除它。

如何将vi中突出显示的代码立即缩进多个空格:

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

  1. 选择要缩进的代码块。在正常模式下使用Ctrl+V并向下箭头以选择文本。选择时,输入:向选定文本块发出命令。

  2. 以下内容将出现在命令行中::'<,'>

  3. 要将缩进设置为三个空格,请键入le 3并按回车键。如下所示::'<,'>le 3

  4. 选定的文本立即缩进到三个空格。

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

  1. 在vi中打开您的文件。
  2. 把光标放在一些代码上
  3. 处于正常模式并按以下键:

    Vjjjj:le 3

    解释你所做的:

    V表示开始选择文本。

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

    :告诉vi您将为突出显示的文本输入指令。

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

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

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

  1. 在vi中打开您的文件。
  2. 把光标放在一些代码上
  3. 在正常模式下按以下键:

    ctrl+v

    jjjj

    (按空格键五次)

    EscShift+i

    所有突出显示的文本都会缩进另外五个空格。

我不知道为什么很难找到这样一个简单的答案…

我自己也费了好大劲才知道这一点。很简单:

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

    set cindent

    在您要正确缩进的文件中。

  • 在正常/命令模式下键入

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

所有命令的主人是
gg=G

这会缩进整个文件!

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

缩进当前行
==

缩进当前行下方的所有行

=G

在当前行下方缩进n

n==

例如,在当前行下缩进4行

4==

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

=%

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

:line_num_start,line_num_end>

例如,

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

为更多选项卡增加“>”符号。

例如,

14,21>>> for three tabs

将所有文件缩进四:

esc 4G=G

假设您使用2个空格缩进代码。键入:

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

然后:

  • 键入>缩进一次(2个空格)。
  • 键入2>缩进两次(4个空格)。
  • 键入3>缩进三次(6个空格)。
  • 键入<<取消缩进一次(2个空格)。
  • 键入2<<以取消缩进两次(4个空格)。
  • 键入3<<为无缩进三次(6个空格)。

你懂的。

空行不会缩进,我认为这有点好。


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

:help visual-block/indent

如果您想给命令计数,请在键入之前执行此操作运算符字符:“v{move-about} 3>”(将第3行缩进到右)

要缩进文件类型中的每一行,请先缩进Esc,然后缩进g=gg

您可以使用norm i命令在行首插入给定文本。要在第2-10行之前插入10个空格:

:2,10norm 10i

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

:%norm 5i_

或者更奇特的东西:

:%norm 2i[ ]

更实际的例子是用#字符注释Bash/Python/etc代码:

:1,20norm i#

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

:%norm 5x

:help left

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

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

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

:le不带任何值,否则:le 0将与0的填充保持对齐。

这适用于Vim和gVim。

我使用块模式视觉选择:

  • 转到块的前面移动(在顶部或底部)。
  • Ctrl+V进入可视块模式。
  • 导航以选择行前面的列。
  • IShift+)进入插入模式。
  • 键入一些空格。
  • Esc。所有行都将移动。

这不是一个单一任务。它工作:

  • 在线的中间。
  • 在所有行上插入任何字符串。
  • 更改列(使用c而不是I)。
  • 取消、删除、替换等…

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

int main() {line1line2|line3}

您可以执行>i{表示“在(#2)块(#3)内缩进(#1)”并获得:

int main() {line1line2|line3}

现在假设这些线是连续的,但在一个块之外,比如:

doline2|line3line4done

要缩进第2行到第4行,您可以直观地选择行并键入>。或者更快地执行>2j以获得:

doline2|line3line4done

请注意,>Nj表示从当前行缩进到下面的N行。如果要缩进的行数很多,用户可能需要几秒钟才能计算出N的正确值。为了节省宝贵的秒数,您可以激活相对数set relativenumber的选项(从Vim版本7.3开始可用)。

  • 对于代码块, {}: =+%

  • 对于选定的行:Shift+v使用向上/向下箭头键选择,然后按=

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

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

  1. 按“SHIFT+v”进入可视线模式。
  2. 选择要缩进的文本,但使用光标键或“j”和“k”键。
  3. 要右缩进,请按“SHIFT+点”(>字符)。要缩进左按“SHIFT+逗号”(<字符)。

来源:https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html

对于喜欢现代编辑器缩进选定行<TAB>->Tab<S-TAB>->Shift+Tab的人:

vnoremap <TAB> >gvvnoremap <S-TAB> <gv

用法:按V为逐行可视模式,选择你想要的行,然后按Tab(可能用转变),然后缩进适用于你想要的,选择保持不变…

对于Mac

  1. 使用vim打开文件

    vimdeploy1.yml

  2. 使用Shift+'v'选择行,然后使用'up'或'down'键

    输入图片描述

  3. 使用Shift+'>'或Shift+'<'缩进选定的行

    输入图片描述