Gre*_*ill 2496
使用该>命令.缩进5行,5>>.标记一行和缩进,Vjj>缩进3行(仅限vim).要缩进花括号块,请将光标放在其中一个花括号上,并使用>%块内使用的任何位置>iB.
如果您正在复制文本块并需要在新位置对齐块的缩进,请使用]p而不是仅使用p.这会将粘贴的块与周围的文本对齐.
此外,该shiftwidth设置允许您控制缩进的空格数.
ire*_*ses 937
这个答案总结了这个问题的其他答案和评论,并根据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
Run Code Online (Sandbox Code Playgroud)
您可以{使用}或替换B,例如=iB是有效的块缩进命令.看一下"缩进代码块",这是一个很好的例子来尝试这些命令.
另外,请记住
. Repeat last command
Run Code Online (Sandbox Code Playgroud)
,因此可以轻松方便地重复压痕命令.
重新缩进完整文件
另一种常见情况是要求在整个源文件中修复缩进:
gg=G Re-indent entire buffer
Run Code Online (Sandbox Code Playgroud)
您可以将此想法扩展到多个文件:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Run Code Online (Sandbox Code Playgroud)
或多个缓冲区:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
Run Code Online (Sandbox Code Playgroud)
在可视模式下
Vjj> Visually mark and then indent three lines
Run Code Online (Sandbox Code Playgroud)
在插入模式下
这些命令适用于当前行:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Run Code Online (Sandbox Code Playgroud)
Ex命令
当您想要缩进特定范围的行而不移动光标时,这些非常有用.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Run Code Online (Sandbox Code Playgroud)
使用标记缩进
另一种方法是通过标记:
ma Mark top of block to indent as marker 'a'
Run Code Online (Sandbox Code Playgroud)
...将光标移动到结束位置
>'a Indent from marker 'a' to current location
Run Code Online (Sandbox Code Playgroud)
控制缩进的变量
您可以在.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
Run Code Online (Sandbox Code Playgroud)
Vim具有基于文件类型的智能缩进.尝试将此添加到.vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Run Code Online (Sandbox Code Playgroud)
参考
Joh*_*han 123
一个很大的选择是:
gg=G
Run Code Online (Sandbox Code Playgroud)
它真的很快,一切都缩进了;-)
sve*_*vec 108
也可以尝试使用C-indent缩进,:help =有关详细信息:
={
这将自动缩进您当前的代码块.
要不就:
==
自动缩进当前行.
Ken*_*ric 79
为更多视觉人士提供按键:
进入命令模式:
Escape
移动到区域的开头以缩进:
hjkl↑↓←→
开始一个块:
v
移动到该区域的末尾以缩进:
hjkl↑↓←→
(可选)键入所需的缩进级别数
0..9
在块上执行缩进:
>
Dan*_*wak 65
除了已经给出和接受的答案之外,还可以放置标记然后缩进从当前光标到标记的所有内容.因此,输入ma您想要缩进块顶部的位置,根据需要向下移动光标,然后键入>'a(注意" a"可以替换任何有效的标记名称).这有时比5>>或更容易vjjj>.
Sag*_*ain 64
所有命令的主人都是
gg=G
这会缩进整个文件!
下面是一些简单而优雅的命令,用于在Vim或gVim中快速缩进行.
缩进当前行
==
缩进当前行下面的所有行
=G
缩进n当前行下方的行
n==
例如,缩进当前行下面的4行
4==
要缩进代码块,请转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能最强大的命令.
Mic*_*oka 27
当您选择一个块并用于>缩进时,它会缩进然后返回到正常模式.我在.vimrc文件中有这个:
vnoremap < <gv
vnoremap > >gv
Run Code Online (Sandbox Code Playgroud)
它允许您根据需要缩短选择时间.
Joh*_*son 21
假设您使用2个空格来缩进代码.类型:
:set shiftwidth=2
Run Code Online (Sandbox Code Playgroud)
然后:
你明白了.
(空行不会缩进,我觉得这很好.)
我在(g)vim文档中找到了缩进块的答案:
:help visual-block
/indent
Run Code Online (Sandbox Code Playgroud)
如果要对命令进行计数,请在键入操作符之前执行此操作:"v {move-around} 3>"(向右移动第3行缩进).
Jua*_*nus 18
vim UI的美妙之处在于它的一致性.编辑命令由命令和光标移动组成.光标移动始终相同:
因此,为了使用vim,你必须学会移动光标并记住一系列命令,例如>缩进(和<"outdent").
因此,为了缩小从光标位置到屏幕顶部的行>H,>G缩进到文件的底部.
如果>H您键入的是输入,而不是键入,dH则删除相同的行块,cH以替换它等.
某些光标移动适合特定命令.特别是,该%命令可以方便地缩进整个HTML或XML块.
如果文件突出显示语法('),则将光标设置在标签的文本中(例如,在<div>的"i"中,输入>%将缩进到结束</ div>标签.
这就是vim的工作原理:只需记住光标移动和命令,以及如何混合它们.
所以我这个问题的答案将是"去你要缩进的行块的一端,然后键入>命令和运动块的另一端,"如果缩进被解释为转移的线路,=如果缩进被解释为漂亮印刷.
小智 14
做这个
$vi .vimrc
Run Code Online (Sandbox Code Playgroud)
并添加此行
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Run Code Online (Sandbox Code Playgroud)
这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...
Eri*_*thi 12
使用快速方法VISUAL MODE使用与注释代码块相同的过程.
如果您不想更改shiftwidth或使用任何set指令并且足够灵活以使用TABS或SPACES或任何其他字符,这将非常有用.
-- VISUAL MODE --:以切换到提示用3个前导空格替换:
:'<,'>s/^/ /g
或者替换为主要标签:
:'<,'>s/^/\t/g
简要说明:
'<,'> - 在视觉选择范围内
s/^/ /g - 在整个范围内的每一行的开头插入3个空格
(要么)
s/^/\t/g- Tab在整个范围内的每一行的开头插入
Nyk*_*kin 12
还有一种方法尚未提及 - 您可以使用norm i命令在行的开头插入给定的文本.要在第2-10行之前插入10个空格:
:2,10norm 10i
Run Code Online (Sandbox Code Playgroud)
请记住,命令末尾必须有空格字符 - 这将是我们想要插入的字符.我们也可以用任何其他文本缩进行,例如用5个下划线字符缩进文件中的每一行:
:%norm 5i_
Run Code Online (Sandbox Code Playgroud)
或者更奇特的东西:
:%norm 2i[ ]
Run Code Online (Sandbox Code Playgroud)
更实际的例子是用#字符注释Bash/Python/etc代码:
:1,20norm i#
Run Code Online (Sandbox Code Playgroud)
重新缩进使用x而不是i.例如,从每行中删除前5个字符:
:%norm 5x
Run Code Online (Sandbox Code Playgroud)
小智 11
我喜欢为缩进标记文本:
PS:您可以使用:'a,'z技术来标记任何操作(d,y,s ///等)的范围,您可以在其中使用行,数字或%
zun*_*arz 10
:help left
在ex mode您可以使用:left或:le对齐指定数量的行.具体而言,:left将左对齐线路中的[范围].它将行中的缩进设置为[indent](默认为0).
:%le3或:%le 3 或:%left3或:%left 3将填充有三个空格对准整个文件.
:5,7 le 3 通过用3个空格填充它们来对齐第5到第7行.
:le没有任何值或:le 0将与0的填充对齐.
这适用于:help left和ex mode.
对我来说,MacVim(Visual)解决方案是,用鼠标选择并按">",但是在将以下行放在"〜/ .vimrc"之后,因为我喜欢空格而不是制表符:
set expandtab
set tabstop=2
set shiftwidth=2
Run Code Online (Sandbox Code Playgroud)
能够从命令行(Terminal.app)调用MacVim也很有用,因为我有以下帮助目录"〜/ bin",我在其中放置一个名为"macvim"的脚本:
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
Run Code Online (Sandbox Code Playgroud)
当然在"〜/ .bashrc"中:
export PATH=$PATH:$HOME/bin
Run Code Online (Sandbox Code Playgroud)
Macport使用"〜/ .profile"很多,因此PATH环境变量可能会变得很长.
我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):
当您不想更改vimrc中的标识/选项卡设置或记住它们在编辑时更改它时,这非常有用.
为了取消我使用相同的ctrl- v块选择选择空格并删除它d.
我不知道为什么很难找到像这样的简单答案......
我自己不得不挣扎很多才知道这很简单
.vimrc在主目录下编辑您的文件添加此行
set cindent
Run Code Online (Sandbox Code Playgroud)
在你要正确缩进的文件中
在正常/命令模式类型
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
Run Code Online (Sandbox Code Playgroud)
:line_num_start,line_num_end>
Run Code Online (Sandbox Code Playgroud)
例如
14,21> shifts line number 14 to 21 to one tab
Run Code Online (Sandbox Code Playgroud)
增加'>'符号以获得更多标签
例如
14,21>>> for three tabs
Run Code Online (Sandbox Code Playgroud)
<TAB>对于喜欢现代编辑器使用->Tab和<S-TAB>-> Shift+缩进所选行的人Tab:
vnoremap <TAB> >gv
vnoremap <S-TAB> <gv
Run Code Online (Sandbox Code Playgroud)
用法:点击V逐行视觉模式,选择您想要的行,然后点击Tab(可能带有shift),然后根据需要应用缩进并保留选择...
使用Python很多,我发现自己需要经常需要通过多个缩进来移动块.您可以使用任何块选择方法执行此操作,然后只需输入您希望在之前跳转的缩进数>
例如.V5j3>将缩进5行3次 - 如果使用4个空格进行缩进,则为12行
小智 7
我使用块模式视觉选择:
I( Shift+ I) 进入插入模式。这不是一个单一任务者。有用:
c而不是I)。对于代码块,{}:=+%
对于选定的行:Shift+v使用向上/向下箭头键选择,然后按=。
对于整个文件:gg+ =+G
注意:'gg' 表示转到第 1 行,'=' 是缩进命令,'G' 将光标移动到文件末尾。
选项1:使用Visual Block模式将vi中的代码块缩进到三个空格:
选择要缩进的代码块.Ctrl+V在正常模式下使用并向下箭头选择文本.选中它后,输入:以向所选文本块发出命令.
以下内容将出现在命令行中: :'<,'>
要将缩进设置为3个空格,请键入le 3并按Enter键.出现的是::'<,'>le 3
所选文本立即缩进为3个空格.
选项2:使用Visual Line模式将vi中的代码块缩进到三个空格:
处于正常模式时,按以下键:
Vjjjj:le 3
Run Code Online (Sandbox Code Playgroud)
解释你做了什么:
V 意味着开始选择文字.
jjjj 箭头向下4行,突出显示4行.
: 告诉vi,您将输入突出显示文本的说明.
le 3 意味着缩进突出显示的文本3行.
所选代码立即增加或减少到三个空格缩进.
选项3:使用Visual Block模式和特殊插入模式增加缩进:
处于正常模式时,按以下键:
Ctrl+V
jjjj
Run Code Online (Sandbox Code Playgroud)
(按空格键5次)
Esc Shift+i
所有突出显示的文本都缩进了5个空格.
来源:https : //www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html
对于苹果机来说,