在vi中快速缩进多行

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

使用>命令。 缩进5行, 5 >> 。 要标记一行代码并缩进, V j j >要缩进3行(仅限vim)。 要缩进花括号,请将光标置于其中一个大括号上,然后使用>

如果您正在复制文本块并需要将块的缩进alignment到新位置,请使用p而不是p 。 这将粘贴的块与周围的文本alignment。

另外, shiftwidth设置允许您控制缩进多less个空格。

这个答案总结了这个问题的其他答案和评论,并增加了基于Vim文档和Vim wiki的额外信息。 为了简洁起见,这个答案没有区分Vi和Vim特定的命令。

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

一般命令

 >> 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', ie the contents of the block =a{ Re-indent 'a block', ie block and containing braces =2a{ Re-indent '2 blocks', ie this block and containing block >i{ Increase inner block indent <i{ Decrease inner block indent 

你可以用{ }Breplace,例如=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 

Ex命令

当您想要缩进特定范围的线条而不移动光标时,这些function非常有用。

 :< and :> Given a range, apply indentation eg :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 

pipe理缩进的variables

你可以在你的.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具有基于文件types的智能缩进。 尝试添加到您的.vimrc:

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

参考

  • 缩进代码块
  • 视觉上移动块
  • 缩进源代码
  • :help =

一个大的select是

 gg=G 

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

也可以尝试使用C缩进缩进,请执行以下操作:help =获取更多信息:

={

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

要不就:

==

自动缩进当前行。

按键为更多视觉人:

  1. 进入命令模式:
    逃逸

  2. 移到该区域的开始处以缩​​进:
    h j k l

  3. 开始一个块:
    v

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

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

  6. 执行块上的缩进:
    >

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

所有命令的主人是
gg=G

这缩进了整个文件!

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

缩进当前行
==

缩进当前行下面的所有行

=G

在当前行下方缩进n

n==

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

4==

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

=%

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

除了提供的解决scheme之外,我还喜欢每次按照>}

转到文本的开头

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

当您select一个块并使用>缩进时,缩进然后返回到正常模式。 我有这个在我的.vimrc中:

 vnoremap < <gv vnoremap > >gv 

它可以让你缩短你的select尽可能多的时间,你想。

vim的用户界面的美是一致的。 编辑命令由命令和光标移动组成。 光标移动总是一样的:

  • H到屏幕顶部, L到底部, M到中间
  • G到第n行, G单独到文件底部, g g到顶部
  • n移到下一个search匹配, N移到前一个
  • }结束段落
  • 到下一个匹配括号,括号中的任一个或标记types
  • 进入下一行
  • ' x来标记x其中x是一个字母或另一个'
  • 还有更多的,包括WW的字, $0的线的提示,等等,这里不适用,因为不是线性运动。

所以,为了使用vim,你必须学会​​移动光标并记住一些命令,例如>缩进(和<到“缩进”)。
因此,对于从光标位置到屏幕顶部的行进行缩进,您可以执行> H> G缩进文件的底部。

如果不是input> H ,而是inputd H,那么您将删除相同的行块, creplace它,等等。

有些光标移动更适合特定的命令。 尤其是, 命令可以方便地缩进整个HTML或XML块。
如果文件的语法高亮显示( :syn on ),那么将光标放置在标签的文本中(例如,在<div>的“i”中,并input> 将缩进到最后的</ div>标签。

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

假设你使用2个空格来缩进你的代码。 types:

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

然后:

  • 键入>缩进一次(2个空格)。
  • 键入2 >缩进两次(4个空格)。
  • 键入3 >缩进三次(6个空格)。
  • input< to unindent once(2 spaces)。
  • 键入2 <给两个(四个空格)。
  • 键入3 <到三位(6个空格)。

你明白了。

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


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

 :help visual-block /indent 

如果要对命令进行计数,请在input运算符字符之前执行此操作:“v {移动} 3>”(将3行缩进移至右侧)。

做这个

 $vi .vimrc 

并添加这一行

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

这只是为cpp文件,你可以做另一种文件types也只是通过修改文件types…

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

如果您不想更改shiftwidth或使用任何set指令,并且足够灵活以使用TABS或SPACES或任何其他字符,则此function非常有用。

  1. 将光标置于块的开头
  2. v切换到-- VISUAL MODE --
  3. select要缩进的文字
  4. 键入:切换到提示
  5. replace3个领先空间:

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

  6. 或者用领先的标签replace:

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

  7. 简要说明:

    '<,'> – 在可视范围内

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

    (要么)

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

我喜欢为缩进标记文本:

  1. 去文本的行首然后键入ma(a是'm'ark的标签:它可以是任何字母)
  2. 去结束文本行并键入mz(再次z可以是任何字母)
  3. :'a,'z>或:'a,'z <将缩进或缩进(这是一个单词吗?)
  4. 瞧! 文本被移动(空行保持空白,没有空格)

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

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

<}<{相同的un-indent

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

 :2,10norm 10i 

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

 :%norm 5i_ 

或者更奇特的东西:

 :%norm 2i[ ] 

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

 :1,20norm i# 

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

 :%norm 5x 

对于我来说,MacVim(Visual)解决scheme是,用鼠标select并按“>”,但在“〜/ .vimrc”中放置以下行后,因为我喜欢空格而不是制表符:

 set expandtab set tabstop=2 set 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大量使用“〜/ .profile”,所以PATH环境variables可能会变得很长。

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

我自己不得不费了很大的努力才知道这很简单

在主目录下编辑你的.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会从上到下缩进整个文件。

使用Python很多,我发现自己需要经常需要通过多个缩进来移动块。 您可以使用任何块select方法来完成此操作,然后在“ >之前input您希望跳到的缩进数量。

例如。 V5j3>将缩进5行3次 – 如果使用4个空格缩进,则是12个空格

:help left

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

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

:5,7 le 3将通过填充3个空格alignment第5至7行。

:le没有任何值或:le 0将左alignment填充0。

这适用于vimgvim

为了缩进文件types中的每一行,使用esc,然后G = gg

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

  1. Esc进入命令模式
  2. 移到你想要识别的最后一行的第一个字符
  3. ctrlv开始块select
  4. 移至要识别的第一行的第一个字符
  5. 移位进入特殊插入模式
  6. 键入尽可能多的spases /选项卡,你需要缩进(2例如
  7. Esc ,空格将出现在所有行中

当你不想改变vimrc中的ident / tab设置或者在编辑时记住它们来改变它的话,这是非常有用的。

为了unindent我使用相同的CTRLV块select来select空格,并用d删除它。

如何在vi中立即缩进突出显示的代码:

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

  1. select您要缩进的代码块。 在正常模式下使用Ctrl + V执行此操作,并向下箭头以select文本。 当它被选中时,input:给出选定文本块的命令。

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

  3. 要将缩进设置为3个空格,请inputle 3 ,然后按enter键。 这就是出现的情况:: :'<,'>le 3

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

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

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

     Vjjjj:le 3 

    解释你做了什么:

    V表示开始select文本。

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

    :告诉vi,您将input一个突出显示文本的指令。

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

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

选项3:使用可视块模式和特殊插入模式来增加缩进:

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

    按Ctrl + V

     jjjj 

    (按空格键5次)

    Esc Shift + i

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

 :line_num_start,line_num_end> 

例如

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

增加“>”符号以获得更多选项卡

例如

 14,21>>> for 3 tabs 

要按4缩进所有文件:

 esc 4G=G 

我使用块模式视觉select:

  • 去块的前面移动(在顶部或底部)。
  • 按ctrl-v进入可视块模式。
  • 导航到select行前面的列。
  • 按I(移位i)进入插入模式。
  • 键入一些空格。
  • 按ESC键。 所有线路将会转移。

作品:

  • 在行的中间。
  • 在所有行上插入任何string。
  • 要更改一列(使用c而不是I)。
  • 猛拉,删除,替代等…