应该是微不足道的,甚至可能在帮助中,但我无法弄清楚如何导航它。如何在vi中快速缩进多行?
答案 0 :(得分:2437)
使用> 命令。要缩进5行, 5 > > 。要标记一行线并缩进它, V j j > 缩进3行(仅限vim )。要缩进花括号块,将光标放在其中一个花括号上并使用> %或从块中的任何位置使用> 我 乙
如果要复制文本块并需要在新位置对齐块的缩进,请使用] p 而不是 p 。这会将粘贴的块与周围的文本对齐。
此外,shiftwidth
设置允许您控制缩进的空格。
答案 1 :(得分:924)
此回答总结了此问题的其他答案和评论,并根据Vim documentation和Vim wiki添加了额外信息。为简明起见,此答案不区分Vi和Vim特定的命令。
在下面的命令中,“重新缩进”表示“根据您的indentation settings缩进行”。 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
是一个有效的块缩进命令。看看"Indent a Code Block"以获得一个很好的例子来尝试这些命令。
另外,请记住
. 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命令
当您想要缩进特定范围的行而不移动您的行时,这些非常有用 光标。
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
使用标记缩进
另一种方法是通过markers:
ma Mark top of block to indent as marker 'a'
...将光标移动到结束位置
>'a Indent from marker 'a' to current location
管理缩进的变量
您可以在.vimrc file。
中设置这些内容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
<强>参考强>
答案 2 :(得分:121)
一个很大的选择是:
gg=G
它真的很快,一切都缩进了; - )
答案 3 :(得分:107)
也可以尝试 C-indenting 缩进,:help =
了解更多信息:
={
这将自动缩进您当前的代码块。
或者只是:
==
自动缩进当前行。
答案 4 :(得分:76)
更多视觉人士的按键:
进入命令模式:
Escape
移动到区域的开头以缩进:
ħ Ĵ ķ 升 ↑ ↓ ← →
开始一个块:
v
移动到区域末尾以缩进:
ħ Ĵ ķ 升 ↑ ↓ ← →
(可选)键入所需的缩进级别数
0..9
执行块上的缩进:
&GT;
答案 5 :(得分:64)
除了已经给出和接受的答案之外,还可以放置一个标记,然后缩进从当前光标到标记的所有内容。因此,在您需要缩进块顶部的位置输入ma
,根据需要向下光标,然后键入>'a
(请注意,“a
”可替换为任何有效标记名称)。这有时比5>>
或vjjj>
更容易。
答案 6 :(得分:62)
所有命令的主人是
gg=G
这会缩进整个文件!
以下是一些用于在Vim或gVim中快速缩进行的简单而优雅的命令。
缩进当前行
==
缩进当前行下方的所有行
=G
缩进当前行下面的n
行
n==
例如,缩进当前行下面的4行
4==
要缩进代码块,请转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能最强大的命令。
答案 7 :(得分:29)
转到文本的开头
答案 8 :(得分:27)
除了提供的解决方案之外,我还喜欢用>}
答案 9 :(得分:25)
当您选择一个块并使用&gt; 进行缩进时,它会缩进然后返回到正常模式。我在.vimrc文件中有这个:
vnoremap < <gv
vnoremap > >gv
它允许您根据需要随时缩进您的选择。
答案 10 :(得分:21)
假设您使用2个空格来缩进代码。类型:
:set shiftwidth=2
然后:
你明白了。
(空行不会缩进,我觉得这很好。)
我在(g)vim文档中找到了缩进块的答案:
:help visual-block
/indent
如果要对命令进行计数,请在键入之前执行此操作 操作员角色:“v {move-around} 3&gt;” (将第3行缩进到 右边)。
答案 11 :(得分:18)
vim UI的美妙之处在于它的一致性。编辑命令由命令和光标移动组成。 光标移动始终相同:
因此,为了使用vim,你必须学习移动光标并记住一系列命令,例如&gt; 以缩进(和&lt; “突然”)。
因此,为了缩小从光标位置到屏幕顶部的行,你可以&gt; H ,&gt; G < / kbd>缩进到文件的底部。
如果您输入 d H ,而不是输入&gt; H ,那么您将删除相同的内容行块, c H 用于替换它等等。
某些光标移动适合特定命令。特别是,%命令可以方便缩进整个HTML或XML块。
如果文件突出显示语法(:syn on
),则将光标设置在标签的文本中(例如,在&lt; div&gt;的“i”中并输入&gt; %将缩进到结束&lt; / div&gt;标记。
这就是vim的工作原理:人们必须只记住光标移动和命令,以及如何混合它们 所以我对这个问题的回答是“转到要缩进的行块的一端,然后键入&gt; 命令,并移动到块的另一端”if <如果缩进被解释为漂亮打印,则em> indent 被解释为移动行 = 。
答案 12 :(得分:14)
这样做
$vi .vimrc
并添加此行
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...
答案 13 :(得分:12)
使用VISUAL MODE
执行此操作的快速方法使用与注释代码块相同的过程。
如果您不想更改shiftwidth
或使用任何set
指令并且足够灵活,可以使用TABS或SPACES或任何其他角色,则此功能非常有用。
-- VISUAL MODE --
:
以切换到提示用3个前导空格替换:
:'<,'>s/^/ /g
或替换为主要标签:
:'<,'>s/^/\t/g
简要说明:
'<,'>
- 在视觉选择的范围内
s/^/ /g
- 在整个范围内的每一行的开头插入3个空格
(或)
s/^/\t/g
- 在整个范围内的每一行的开头插入Tab
答案 14 :(得分:11)
>}
或>{
从当前行到下一段缩进
<}
或<{
相同的非缩进
答案 15 :(得分:11)
我喜欢为缩进标记文字:
PS:您可以使用:'a,'z技术来标记任何操作(d,y,s ///等)的范围,您可以在其中使用行,数字或%
答案 16 :(得分:11)
还有一种方法尚未提及 - 您可以使用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
答案 17 :(得分:9)
5==
将从当前光标位置缩进5行。
所以你可以在==
之前键入任何数字,它会缩进行数。
这是命令模式。
gg=G
将从上到下缩进整个文件。
答案 18 :(得分:9)
我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):
当您不想更改vimrc中的标识/标签设置或记住它们在编辑时更改它时,这非常有用。
要取消注意,我使用相同的 ctrl - v 块选择选择空格并用 d 删除它。
答案 19 :(得分:9)
我不知道为什么很难找到像这样的简单答案......
我自己不得不为了解这一点而奋斗 它非常简单
编辑主目录下的.vimrc
文件
添加此行
set cindent
在您要正确缩进的文件中
在正常/命令模式下
10== (this will indent 10 lines from the current cursor location )
gg=G (complete file will be properly indented)
答案 20 :(得分:9)
对我来说,MacVim(Visual)解决方案是,用鼠标选择并按“&gt;”,但是在将以下行放在“〜/ .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环境变量可能会很长。
答案 21 :(得分:7)
使用Python很多,我发现自己需要经常需要通过多个缩进来移动块。您可以使用任何块选择方法执行此操作,然后只需输入您希望在>
EG。 V5j3>
将缩进5行3次 - 如果使用4个空格进行缩进,则为12行空格
答案 22 :(得分:7)
:line_num_start,line_num_end>
e.g。
14,21> shifts line number 14 to 21 to one tab
增加&#39;&gt;&#39;更多标签的符号
e.g。
14,21>>> for 3 tabs
答案 23 :(得分:7)
要缩进文件类型中的每一行, esc 然后G = gg
答案 24 :(得分:6)
选项1:使用Visual Block模式将vi中的代码块缩进到三个空格:
选择要缩进的代码块。在正常模式下使用 Ctrl + V 并向下箭头选择文本。选中它后,输入:
以向所选文本块发出命令。
以下内容将出现在命令行中::'<,'>
要将缩进设置为3个空格,请键入le 3
并按Enter键。出现的内容如下::'<,'>le 3
所选文本会立即缩进为3个空格。
选项2:使用Visual Line模式将vi中的代码块缩进为三个空格:
处于正常模式时,请按以下键:
Vjjjj:le 3
解释您所做的事情:
V
表示开始选择文字。
jjjj
箭头向下4行,突出显示4行。
:
告诉vi您将输入突出显示文本的说明。
le 3
表示缩进突出显示的文本3行。
所选代码会立即增加或减少到三个空格缩进。
选项3:使用Visual Block模式和特殊插入模式增加缩进:
处于正常模式时,请按以下键:
控制+ V
jjjj
(按空格键5次)
ESC 切换+ I
所有突出显示的文字都缩进了5个空格。
答案 25 :(得分:4)
将所有文件缩进4:
esc 4G=G
答案 26 :(得分:4)
我使用块模式视觉选择:
这不是一个单一的任务者。它有效:
答案 27 :(得分:3)
来源:https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html
答案 28 :(得分:2)
对于代码块{}: = + %
对于选定的行: Shift + v 使用向上/向下箭头键选择,然后按 = 。
< / li>对于整个文件: gg + = + G
注意:'gg'表示转到第1行,'='是缩进命令,而'G'将光标移动到文件末尾。
答案 29 :(得分:1)
答案 30 :(得分:0)
假设|
表示光标在Vim中的位置。如果要缩进的文本包含在代码块中,如:
int main() {
line1
line2|
line3
}
您可以执行>i{
,这意味着&#34; 缩进(>
)内部(i
)阻止({
)&# 34;得到:
int main() {
line1
line2|
line3
}
现在假设这些行是连续的但在块之外,例如:
do
line2|
line3
line4
done
要缩进第2行至第4行,您可以直观地选择行并键入>
。或者甚至更快,您可以>2j
获得:
do
line2|
line3
line4
done
请注意,>Nj
表示从当前行缩进到下面的N
行。如果要缩进的行数很大,则用户可能需要几秒钟来计算N
的正确值。为节省宝贵的秒数,您可以使用set relativenumber
激活相对号码选项(自Vim 7.3版起可用)。
答案 31 :(得分:0)
对于喜欢现代编辑者使用<TAB>
和<S-TAB>
缩进所选行的人:
vnoremap <TAB> >gv
vnoremap <S-TAB> <gv
用法:
按下V
进入逐行可视模式,选择所需的行,然后按下Tab(可能带有shift键),然后根据需要应用缩进,并且选择保持不变...