>> 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
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
30 回答
5==
将从当前光标位置缩进5行 . 所以你可以在==
之前键入任何数字,它会缩进行数 . 这是在命令模式下 .gg=G
将从上到下缩进整个文件 .转到文本的开头
按v进入可视模式 .
使用向上/向下箭头突出显示文本 .
按=缩进所有突出显示的行 .
也可以尝试使用 C-indenting 缩进,执行
:help =
以获取更多信息:={
这将自动缩进您当前的代码块 .
要不就:
==
自动缩进当前行 .
做这个
并添加此行
这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...
除了提供的解决方案,我喜欢用
>}
一次做一个段落代码块{}:=%
对于选定的行:Shift v使用向上/向下箭头键选择,然后按= .
对于整个文件:gg = G.
注意:'gg'表示转到第1行,'='是缩进命令,'G'将光标移动到文件末尾 .
>}
或>{
从当前行到下一段缩进<}
或<{
相同的缩进要缩进文件类型中的每一行,esc然后G = gg
为更多视觉人士提供按键:
进入命令模式:
逃逸
移动到区域的开头以缩进:
hjkl↑↓←→
开始一个块:
v
移动到区域末尾以缩进:
hjkl↑↓←→
(可选)键入所需的缩进级别数
0..9
执行块上的缩进:
我不知道为什么很难找到像这样的简单答案......
我自己不得不挣扎很多才知道这很简单
编辑主目录下的
.vimrc
文件添加此行在你要正确缩进的文件中
在正常/命令模式类型
我喜欢为缩进标记文本:
转到文本行的开头然后键入ma(a是'm' ark中的标签:它可以是任何字母)
转到文本的结尾行并键入mz(再次z可以是任何字母)
:'a,' z>或:'a,' z <将缩进或突出(这是一个字吗?)
瞧!移动文本(空行保持为空,没有空格)
PS:您可以使用:'a,'z技术来标记任何操作(d,y,s ///等)的范围,您可以使用行,数字或%
我使用块模式视觉选择:
转到块的前面移动(在顶部或底部) .
按ctrl-v进入可视区块模式 .
导航以选择行前面的列 .
按I(shift i)进入插入模式 .
键入一些空格 .
按ESC键 . 所有线路都将改变 .
这不是一个单一的任务者 . 有用:
在线的中间 .
在所有行上插入任何字符串 .
更改列(使用c而不是I) .
猛拉,删除,替换等...
对我来说,MacVim(Visual)解决方案是,用鼠标选择并按“>”,但在“〜/ .vimrc”中放入以下行后,因为我喜欢空格而不是制表符:
能够从命令行(Terminal.app)调用MacVim也很有用,因为我有以下帮助目录“〜/ bin”,我放置一个名为“macvim”的脚本:
当然在“〜/ .bashrc”中:
Macport使用“〜/ .profile”很多,因此PATH环境变量可能会变得很长 .
vim UI的美妙之处在于它的一致性 . 编辑命令由命令和光标移动组成 . 光标移动始终相同:
H到屏幕顶部,L到底部,M到中间
nG转到行n,G单独到文件底部,gg到顶部
n移至下一个搜索匹配,N移至上一个
}到段落结尾
%到下一个匹配的括号,括号或标签种类
进入下一行
'x标记x,其中x是字母或其他字母'
更多,包括w和W for word,$或0到行的提示等,这里不适用,因为不是行移动 .
因此,为了使用vim,你必须学习移动光标并记住一系列命令,例如> to indent(和<to "outdent") .
因此,为了缩小从光标位置到屏幕顶部的行,您可以> H,> G缩进到文件的底部 .
如果您键入dH而不是键入> H,那么您将删除相同的行块,cH用于替换它,等等 .
某些光标移动适合特定命令 . 特别是,%命令可以方便缩进整个HTML或XML块 .
如果文件突出显示语法(
:syn on
),则将光标设置在标记的文本中(例如,在<div>的"i"中并输入>%将缩进到结束</ div>标记 .这就是vim的工作原理:只需要记住光标移动和命令,以及如何混合它们 .
所以我对这个问题的回答是“去你想要缩进的行块的一端,然后输入>命令并移动到块的另一端”如果缩进被解释为移动行,=如果缩进被解释为漂亮打印 .
我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):
Esc进入命令模式
移动到要识别的最后一行的第一个字符
ctrl -v启动块选择
移动到要识别的第一行的第一个字符
shift-i进入特殊插入模式
键入您需要缩进的多个spase / tabs(2 for例
按Esc,空格将出现在所有行中
当您不想更改vimrc中的标识/选项卡设置或记住它们在编辑时更改它时,这非常有用 .
为了取消我使用相同的ctrl-v块选择选择空格并用d删除它 .
所有命令的主人都是
gg=G
这会缩进整个文件!
下面是一些简单而优雅的命令,用于在Vim或gVim中快速缩进行 .
缩进当前行
==
缩进当前行下面的所有行
=G
缩进当前行下方的
n
行n==
例如,缩进当前行下面的4行
4==
要缩进代码块,请转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能最强大的命令 .
还有一种方法尚未提及 - 您可以使用
norm i
命令在行的开头插入给定的文本 . 要在第2-10行之前插入10个空格:请记住,命令末尾必须有空格字符 - 这将是我们想要插入的字符 . 我们也可以用任何其他文本缩进行,例如用5个下划线字符缩进文件中的每一行:
或者更奇特的东西:
更实际的例子是用#字符注释Bash / Python / etc代码:
要重新缩进使用x而不是i . 例如,从每行删除前5个字符:
使用Python很多,我发现自己需要经常需要通过多个缩进来移动块 . 您可以使用任何块选择方法执行此操作,然后只需输入您希望在
>
之前跳转的缩进数量例如 .
V5j3>
将缩进5行3次 - 如果使用4个空格进行缩进,则为12个空格使用>命令 . 缩进5行,5 >> . 要标记一行和缩进,Vjj>缩进3行(仅限vim) . 要缩进花括号块,请将光标放在其中一个花括号上,然后使用>% .
如果要复制文本块并需要在新位置对齐块的缩进,请使用] p而不是p . 这会将粘贴的块与周围的文本对齐 .
此外,shiftwidth设置允许您控制缩进的空格数 .
要将所有文件缩进4:
使用
VISUAL MODE
快速执行此操作的方法与注释代码块的过程相同 .如果您不想更改
shiftwidth
或使用任何set
指令并且足够灵活以使用TABS或SPACES或任何其他字符,这将非常有用 .将光标定位在块的开头
v切换到
-- VISUAL MODE --
选择要缩进的文本
键入
:
以切换到提示用3个前导空格替换:
:'<,'>s/^/ /g
:'<,'>s/^/\t/g
'<,'>
- 在视觉选择范围内s/^/ /g
- 在整个范围内的每一行的开头插入3个空格(要么)
s/^/\t/g
- 在整个范围内的每一行的开头插入Tab
除了已经给出和接受的答案之外,还可以放置标记然后缩进从当前光标到标记的所有内容 . 因此,在您想要缩进块顶部的位置输入
ma
,根据需要向下移动光标,然后键入>'a
(注意“a
”可以替换任何有效的标记名称) . 这有时比5>>
或vjjj>
更容易 .例如
增加'>'符号以获得更多标签
例如
当您选择一个块并使用>缩进时,它会缩进然后返回到正常模式 . 我在.vimrc文件中有这个:
它允许您根据需要随意缩进选择 .
: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对齐 .这适用于
vim
和gvim
.一个很大的选择是:
它真的很快,一切都缩进了;-)
如何通过#空格立即缩进vi中突出显示的代码:
Option 1: Indent a block of code in vi to three spaces with Visual Block mode:
选择要缩进的代码块 . 在正常模式下使用Ctrl V并向下箭头选择文本 . 选中它后,输入
:
以向所选文本块发出命令 .以下内容将出现在命令行中:
:'<,'>
要将缩进设置为3个空格,请键入
le 3
并按Enter键 . 出现的是::'<,'>le 3
所选文本立即缩进为3个空格 .
Option 2: Indent a block of code in vi to three spaces with Visual Line mode:
在VI中打开文件 .
将光标放在某些代码上
进入正常模式,按以下键:
Interpretation of what you did:
V
表示开始选择文本 .jjjj
箭头向下4行,突出显示4行 .:
告诉vi您将输入突出显示文本的说明 .le 3
表示缩进突出显示的文本3行 .所选代码立即增加或减少到三个空格缩进 .
Option 3: use Visual Block mode and special insert mode to increase indent:
在VI中打开文件 .
将光标放在某些代码上
进入正常模式,按以下键:
Ctrl V
(按空格键5次)
Esc Shift i
所有突出显示的文本都缩进了5个空格 .
假设
|
表示光标在Vim中的位置 . 如果要缩进的文本包含在代码块中,如:你可以做
>i{
,这意味着“缩进(>
)里面(i
)块({
)”并得到:现在假设线条是连续的但在块外面,如:
要缩进第2行至第4行,您可以直观地选择行并键入
>
. 或者甚至更快你可以做>2j
得到:请注意,
>Nj
表示从当前行缩进到下面的N
行 . 如果要缩进的行数很大,则用户可能需要几秒钟来计算N
的正确值 . 为了节省宝贵的秒数,您可以使用set relativenumber
激活相对编号的选项(自Vim版本7.3起可用) .假设您使用2个空格来缩进代码 . 类型:
键入v(进入可视块编辑模式)
使用箭头键(或使用h / j / k / l)移动光标以突出显示要缩进或取消的行 .
然后:
键入>缩进一次(2个空格) .
类型2>缩进两次(4个空格) .
类型3>缩进三次(6个空格) .
......
键入<到unindent一次(2个空格) .
类型2 <到unindent两次(4个空格) .
键入3 <到unindent三次(6个空格) .
......
你明白了 .
(空行不会缩进,我觉得这很好 . )
我在(g)vim文档中找到了缩进块的答案:
这个答案总结了这个问题的其他答案和评论,并根据Vim documentation和Vim wiki添加了额外的信息 . 为简明起见,此答案不区分Vi和Vim特定命令 .
在下面的命令中,"re-indent"表示“根据indentation settings缩进行” . shiftwidth是控制缩进的主要变量 .
General Commands
您可以将
{
替换为}
或B
,例如=iB
是有效的块缩进命令 . 看看"Indent a Code Block"是一个很好的例子来尝试这些命令 .另外,请记住
,因此可以轻松方便地重复压痕命令 .
Re-indenting complete files
另一种常见情况是要求在整个源文件中修复缩进:
您可以将此想法扩展到多个文件:
或多个缓冲区:
In Visual Mode
In insert mode
这些命令适用于当前行:
Ex commands
当您想要缩进特定范围的行而不移动光标时,这些非常有用 .
Indenting using markers
另一种方法是通过markers:
...将光标移动到结束位置
Variables that govern indentation
您可以在.vimrc file中设置这些 .
Vim具有基于文件类型的智能缩进 . 尝试将此添加到.vimrc:
References
Indent a code block
Shifting blocks visually
Indenting source code
:help =