题
应该是微不足道的,甚至可能在帮助中,但我不知道如何导航它。如何在vi中快速缩进多行?
解决方案
使用 <!> gt; 命令。要缩进5行, 5 <!> gt; <!> gt; 。要标记一行和缩进, V j j <!> gt; 缩进3行(仅限vim)。要缩进花括号块,将光标放在其中一个花括号上并使用 <!> gt; %或从块中的任何位置使用 <! > GT; 我 乙
如果<!>#8217;重新复制文本块并需要在新位置对齐块的缩进,请使用] p 而不是只是 p 。这会将粘贴的块与周围的文本对齐。
此外, shiftwidth
设置可让您控制许多缩进的空间。
其他提示
这个答案总结了这个问题的其他答案和评论,并根据 Vim 文档 和 Vim 维基. 。为了简洁起见,这个答案不区分 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
您可以更换 {
和 }
或者 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 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
前命令
当您想在不移动光标的情况下缩进特定的线路时,这些都会有用。
:< 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 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
参考
一个很大的选择是:
gg=G
它真的很快,一切都缩进了; - )
还可以尝试 C-indenting 缩进,请执行:help =
了解详情:
<代码> = {代码>
这将自动缩进您当前的代码块。
或者只是:
<代码> == 代码>
自动缩进当前行。
更多视觉人士的按键:
-
进入命令模式: 点击 Escape
-
移动到区域的开头以缩进: 点击 ħ Ĵ ķ 升 &#8593; &#8595; &#8592; &#8594;
-
开始一个块: 点击 v
-
移动到区域末尾以缩进: 点击 ħ Ĵ ķ 升 &#8593; &#8595; &#8592; &#8594;
-
(可选)键入所需的缩进级别数 点击 0..9
-
执行块上的缩进: 点击 &GT;
醇>
除了已经给出和接受的答案之外,还可以放置一个标记,然后缩进从当前光标到标记的所有内容。因此,输入 ma
,你想要缩进块的顶部,向下光标,然后输入&gt;'a
(注意“ a
“可以替换任何有效的标记名称。这有时比 5&gt;&gt;
或 vjjj&gt;
更容易。
所有命令的主人是 点击 <代码> GG = G 代码>
这会缩进整个文件!
以下是一些用于在Vim或gVim中快速缩进行的简单而优雅的命令。
缩进当前行 点击 <代码> == 代码>
缩进当前行下方的所有行
<代码> = G 代码>
缩进当前行
下面的 n
行
<代码> n ==可代码>
例如,缩进当前行下面的4行
<代码> 4 == 代码>
要缩进代码块,请转到其中一个大括号并使用命令
<代码> =%代码>
这些是缩进多行的最简单但功能最强大的命令。
转到文本的开头
- 按 v 对于视觉模式。
- 使用 向上/向下 箭头突出显示文本。
- 按 = 缩进所有突出显示的行。
除了提供的解决方案之外,我喜欢用&gt;}
当您选择一个块并使用&gt; 进行缩进时,它会缩进然后返回到正常模式。我在.vimrc文件中有这个:
vnoremap < <gv
vnoremap > >gv
它允许您根据需要随时缩进您的选择。
假设您使用 2 个空格来缩进代码。类型:
:set shiftwidth=2
- 类型 v (进入可视块编辑模式)
- 使用箭头键移动光标(或使用 H/j/k/我) 以突出显示要缩进或取消缩进的行。
然后:
- 类型 > 缩进一次(2 个空格)。
- 类型 2> 缩进两次(4 个空格)。
- 类型 3> 缩进三次(6 个空格)。
- ...
- 类型 < 取消缩进一次(2 个空格)。
- 类型 2< 取消缩进两次(4 个空格)。
- 类型 3< 取消缩进三次(6 个空格)。
- ...
你明白了。
(空行不会缩进,我认为这很好。)
我在 (g)vim 缩进块文档中找到了答案:
:help visual-block
/indent
如果您想对命令进行计数,请在键入操作员字符之前执行此操作:“ V {Move-Around} 3>”(向右移动第3行凹痕)。
vim UI 的美妙之处在于它的一致性。编辑命令由命令和光标移动组成。光标移动始终相同:
- H 到屏幕顶部, L 到底部, 中号 到中间
- nG 去n号线, G 单独到文件底部, GG 到达顶点
- n 移至下一个搜索匹配, 氮 到上一个
- } 到段落末尾
- % 到下一个匹配的括号,括号或标签类型
- 进入 到下一行
- 'X 标记 x,其中 x 是字母或另一个 '
- 还有更多,包括 w 和 瓦 对于单词来说, $ 或者 0 线路提示等,此处不适用,因为不是 线 动作。
因此,为了使用 vim,您必须学习移动光标并记住一系列命令,例如, > 缩进(和 < 到“突出”)。
因此,为了缩进从光标位置到屏幕顶部的行,您需要执行以下操作: >H, >G 缩进到文件底部。
如果,而不是输入 >H, ,您输入 dH 然后你要删除相同的行块, CH 用于更换等
某些光标移动更适合特定命令。特别是, % 命令可以方便地缩进整个 HTML 或 XML 块。
如果文件突出显示语法(:syn on
)然后将光标设置在标签的文本中(例如,在 <div> 的“i”中并输入 >% 将缩进到结束 </div> 标记。
这就是 vim 的工作原理:人们只需记住光标移动和命令,以及如何混合它们。
所以我对这个问题的回答是“转到要缩进的行块的一端,然后键入 > 命令并移动到块的另一端”如果 缩进 被解释为移动线路, = 如果 缩进 被解释为漂亮打印。
这样做
$vi .vimrc
并添加此行
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...
使用 VISUAL MODE
执行此操作的快速方法使用与注释代码块相同的过程。
如果您不想更改 shiftwidth
或使用任何 set
指令,并且足够灵活,可以使用TABS或SPACES或任何其他角色,这将非常有用。
- 将光标定位在块的开头
- v切换到
- VISUAL MODE -
- 选择要缩进的文字
- 输入
:
切换到提示 -
用3个前导空格替换:
:'&lt;,'&gt; s / ^ / / g
-
或替换为主要标签:
<代码>: '&LT;,' &GT; S / ^ / \ T / G 代码>
-
简要说明:
'&lt;,'&gt;
- 在视觉选择的范围内s / ^ / / g
- 在整个范围内的每一行的开头插入3个空格(或)
s / ^ / \ t / g
- 在整个范围内的每一行的开头插入Tab
醇>
我喜欢标记文本缩进:
- 转到文本行的开头,然后输入 ma(a 是“m”ark 中的标签:可以是任何字母)
- 转到文本的末尾行并输入 mz (同样 z 可以是任何字母)
- :'a,'z> 或 :'a,'z< 将缩进或突出(这是一个单词吗?)
- 瞧!文本被移动(空行保持空白,没有空格)
附:您可以使用 :'a,'z 技术来标记任何可能使用行、数字或 % 的操作(d、y、s/// 等)的范围
&gt;}
或&gt; {
从当前行缩进到下一段
&lt;}
或&lt; {
相同的un-indent
还有一种方法还没有被提及 - 您可以使用 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
对我来说,MacVim(Visual)解决方案是,用鼠标选择并按“&gt;”,但是在将以下行放入“〜/ .vimrc”之后。因为我喜欢空格而不是标签:
set expandtab
set tabstop=2
set shiftwidth=2
能够从命令行(Terminal.app)调用MacVim也很有用,因为我有以下帮助目录“〜/ bin”,我在其中放置了一个名为“macvim”的脚本: / p>
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
当然在“〜/ .bashrc”中:
export PATH=$PATH:$HOME/bin
Macports与“〜/ .profile”混淆很多,所以PATH环境变量可能会很长。
我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):
- Esc 进入命令模式
- 移至要识别的最后一行的第一个字符
- ctrl - v 开始选择块
- 移至要识别的第一行的第一个字符
- shift - i 进入特殊插入模式
- 键入您需要缩进的任意数量的spase / tabs(例如
- 按 Esc ,所有行中都会出现空格 醇>
当您不想更改vimrc中的标识/标签设置或记住它们在编辑时更改它时,这非常有用。
要取消注意,我使用相同的 ctrl - v 块选择选择空格并使用 d 删除它。
我不知道为什么很难找到像这样的简单答案......
我自己不得不为了解这一点而奋斗 它非常简单
编辑主目录下的 .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
将从上到下缩进整个文件。
:help left
在 ex mode
中,您可以使用:left
或:le
将行对齐指定的数量。
具体来说,:left
将左对齐[range]中的行。它将行中的缩进设置为[indent](默认为0)。
:%le3
或:%le 3
或:%left3
或:%left 3
将对齐用三个空格填充整个文件。
:5,7 le 3
将第3行到第7行对齐,用3个空格填充它们。
:le
没有任何值或:le 0
将保持与0的填充对齐。
这适用于 vim
和 gvim
。
:line_num_start,line_num_end>
e.g。
14,21> shifts line number 14 to 21 to one tab
增加'&gt;'更多标签的符号
e.g。
14,21>>> for 3 tabs
使用Python很多,我发现自己需要经常需要通过多个缩进来移动块。您可以使用任何块选择方法执行此操作,然后在&gt;
EG。 V5j3&gt;
将缩进5行3次 - 如果使用4个空格进行缩进,则为12个空格
要缩进文件类型中的每一行, esc 然后G = gg
如何通过#空格缩进vi中突出显示的代码:
选项1:使用Visual Block模式将vi中的代码块缩进到三个空格:
-
选择要缩进的代码块。在正常模式下使用 Ctrl + V 并向下箭头选择文本。选择后,输入
:
命令给所选文本块。 -
以下内容将出现在命令行中:
:'&lt;,'&gt;
-
要将缩进设置为3个空格,请键入
le 3
并按Enter键。出现的是::'&lt;,'&gt; le 3
-
所选文本会立即缩进为3个空格。
醇>
- 在VI中打开文件。
- 将光标放在某些代码上
-
处于正常模式时,请按以下键:
Vjjjj:le 3
解释您所做的事情:
V
表示开始选择文字。jjjj
箭头向下4行,突出显示4行。:
告诉vi您将输入突出显示文本的说明。le 3
表示缩进突出显示的文本3行。所选代码会立即增加或减少到三个空格缩进。
醇>
- 在VI中打开文件。
- 将光标放在某些代码上
-
处于正常模式时,请按以下键:
控制+ V
jjjj
(按空格键5次)
ESC 切换+ I
所有突出显示的文字都缩进了5个空格。
醇>
选项2:使用Visual Line模式将vi中的代码块缩进为三个空格:
选项3:使用Visual Block模式和特殊插入模式增加缩进:
将所有文件缩进4:
esc 4G=G
我使用块模式视觉选择:
- 走到方块的前面移动(在顶部或底部)。
- 按 ctrl-v 进入视觉块模式。
- 导航以选择行前面的列。
- 按 I (shift i) 进入插入模式。
- 键入一些空格。
- 按 ESC 键。所有线路都会移动。
这不是一个单一任务者。有用:
- 在行的中间。
- 在所有行上插入任意字符串。
- 更改列(使用 c 而不是 I)。
- 猛拉、删除、替换等...
对于代码块 {}: = + %
对于选定的线路: 转移 + v 使用向上/向下箭头键选择,然后按 =.
对于整个文件: gg + = + G
笔记: 'gg' 表示转到第 1 行,'=' 是缩进命令,'G' 将光标移动到文件末尾.
假设 |
表示光标在Vim中的位置。如果要缩进的文本包含在代码块中,如:
int main() {
line1
line2|
line3
}
你可以在( i
)块( i
)中执行&gt; i {
,意思是“缩进(&gt;
)代码> {代码>)&QUOT;得到:
int main() {
line1
line2|
line3
}
现在假设这些行是连续的但在块之外,例如:
do
line2|
line3
line4
done
要缩进第2行至第4行,您可以直观地选择行并输入&gt;
。或者甚至更快,您可以执行&gt; 2j
来获取:
do
line2|
line3
line4
done
请注意,&gt; Nj
表示从当前行缩进到下面的 N
行。如果要缩进的行数很大,则用户可能需要几秒钟来计算 N
的正确值。为节省宝贵的秒数,您可以使用 set relativenumber
激活相对编号选项(自Vim版本7.3起可用)。