【发布时间】:2010-09-19 03:33:07
【问题描述】:
它应该是微不足道的,甚至可能在帮助中,但我不知道如何导航它。 vi如何快速缩进多行?
【问题讨论】:
标签: vim editor indentation vi
它应该是微不足道的,甚至可能在帮助中,但我不知道如何导航它。 vi如何快速缩进多行?
【问题讨论】:
标签: vim editor indentation vi
使用 > 命令。要缩进五行,5>>。要标记一行并缩进,Vjj> 缩进三行(仅限 Vim) .要缩进大括号块,请将光标放在其中一个大括号上并使用 >% 或从块内的任何位置使用 >iB.
如果您要复制文本块并需要在新位置对齐块的缩进,请使用 ]p 而不仅仅是 p 。这会将粘贴的块与周围的文本对齐。
此外,shiftwidth 设置允许您控制要缩进的空格数。
【讨论】:
shiftwidth 设置以了解更改方式。
这个答案总结了这个问题的其他答案和cmets,它根据Vim documentation和Vim wiki添加了额外的信息。为简洁起见,此答案不区分 Vi 和 Vim 特定命令。
在下面的命令中,“re-indent”的意思是“根据你的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 three 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
参考文献
【讨论】:
>} 时,这非常很有用。非常感谢
一个很大的选择是:
gg=G
速度非常快,而且所有内容都会缩进 ;-)
【讨论】:
gg=G 只是将每一行从位置1 开始。所有的空格都已被删除。还有什么特定于 XML 的吗?
set cindent 应该在 vimrc 中或者应该在运行该命令之前运行 :set cindent
也可以试试这个C-indenting缩进。更多信息请:help =:
={
这将自动缩进您所在的当前代码块。
或者只是:
==
自动缩进当前行。
【讨论】:
更多视觉人的按键:
进入命令模式:
Escape
移动到要缩进的区域的开头:
hjkl kbd>↑↓←→
开始一个区块:
v
移动到该区域的末尾以缩进:
hjkl kbd>↑↓←→
(可选)键入所需的缩进级别数
0..9
对块执行缩进:
>
【讨论】:
所有命令的主人是
gg=G
这会缩进整个文件!
下面是一些用于在 Vim 或 gVim 中快速缩进行的简单而优雅的命令。
缩进当前行
==
缩进当前行下面的所有行
=G
在当前行下面缩进n行
n==
例如,在当前行下面缩进 4 行
4==
要缩进一段代码,转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能强大的命令。
【讨论】:
vim,而不是vi。
vim 链接为vi 吗?
除了the answer already given 和接受之外,还可以放置一个标记,然后从当前光标缩进所有内容。
因此,在您想要缩进块顶部的位置输入ma,将光标向下移至您需要的位置,然后输入>'a(请注意,“a”可以替换任何有效的标记名称)。这有时比5>> 或vjjj> 更容易。
【讨论】:
转到正文的开头
【讨论】:
当您选择一个块并使用 > 缩进时,它会缩进然后返回正常模式。我的 .vimrc 文件中有这个:
vnoremap < <gv
vnoremap > >gv
它让您可以根据需要多次缩进您的选择。
【讨论】:
除了提供的解决方案之外,我还喜欢使用>} 一次处理一个段落
【讨论】:
假设您使用 2 个空格来缩进您的代码。类型:
:set shiftwidth=2
然后:
你明白了。
(空行不会缩进,我觉得这很好。)
我在 (g)vim 文档中找到了缩进块的答案:
:help visual-block
/indent
如果您想对命令进行计数,请在键入之前执行此操作 运算符字符:“v{move-around}3>”(将第 3 行缩进移动到 右边)。
【讨论】:
Vim 用户界面的美妙之处在于它的一致性。编辑命令由命令和光标移动组成。 光标移动总是一样的:
'。因此,为了使用 vim,您必须学会移动光标并记住一系列命令,例如,> 缩进(以及 “突出”)。
因此,对于从光标位置缩进到屏幕顶部的行,您可以执行 >H, >G 缩进到文件底部。
如果不是键入 >H,而是键入 dH,那么您将删除同一个块行数,cH 用于替换它,等等。
某些光标移动更适合特定命令。特别是,% 命令可以方便地缩进整个 HTML 或 XML 块。如果文件突出显示了语法 (:syn on),则将光标设置在标签的文本中(例如,在
这就是 Vim 的工作原理:人们只需要记住光标移动和命令,以及如何混合它们。 所以我对这个问题的回答是“转到要缩进的行块的一端,然后键入 > 命令并移动到块的另一端”如果 indent 被解释为移动行,= 如果 indent 被解释为漂亮打印。
【讨论】:
>* 会做一件有趣的事情,<header>ddd</header>,它会缩进整个块,因为* 会转到下一个header。
您可以使用norm i 命令在行首插入给定文本。在第 2-10 行之前插入 10 个空格:
:2,10norm 10i
请记住,命令末尾必须有一个空格字符 - 这将是我们想要插入的字符。我们还可以用任何其他文本缩进一行,例如用五个下划线字符缩进文件中的每一行:
:%norm 5i_
或者更花哨的东西:
:%norm 2i[ ]
更实际的例子是用#字符注释 Bash/Python/etc 代码:
:1,20norm i#
要重新缩进使用 x 而不是 i。例如,要从每行中删除前 5 个字符:
:%norm 5x
【讨论】:
:g/^@.\{-}{\n/,/^}\n}/norm >> 重新缩进特定模式块(css 文件),很难弄清楚这一点,这是一个巨大的帮助,谢谢
这样做:
$vi .vimrc
并添加这一行:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
这仅适用于 cpp 文件。您可以对其他文件类型执行此操作,也只需修改文件类型...
【讨论】:
:line_num_start,line_num_end>
例如,
14,21> shifts line number 14 to 21 to one tab
为更多选项卡增加“>”符号。
例如,
14,21>>> for three tabs
【讨论】:
:set number 来切换行号(默认情况下它们是关闭),或者将set number 放在您的vimrc 中。
使用VISUAL MODE 的快速方法使用与注释代码块相同的过程。
如果您不想更改 shiftwidth 或使用任何 set 指令并且足够灵活以使用 TABS 或 SPACES 或任何其他字符,这将非常有用。
-- VISUAL MODE --
:切换到提示符用 3 个前导空格替换:
:'<,'>s/^/ /g
或者用前导标签替换:
:'<,'>s/^/\t/g
简要说明:
'<,'> - 在可视范围内
s/^/ /g - 在整个范围内的每一行的开头插入 3 个空格
(或)
s/^/\t/g - 在整个范围内的每一行的开头插入Tab
【讨论】:
>} 或 >{ 从当前行缩进到下一段
<} 或 <{ 相同的取消缩进
【讨论】:
我喜欢为缩进标记文本:
PS:您可以使用 :'a,'z 技术来标记可能使用行、数字的任何操作(d、y、s/// 等)的范围, 或 %.
【讨论】:
对我来说,MacVim (Visual) 解决方案是,用鼠标选择并按“>”,但是在将以下行放入“~/.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 环境变量可能会变得很长。
【讨论】:
:help left
在ex mode 中,您可以使用:left 或:le 将行对齐指定数量。
具体来说,:left 将 左对齐 [范围] 中的行。它将行中的缩进设置为 [indent](默认为 0)。
:%le3 或 :%le 3 或 :%left3 或 :%left 3 将通过填充三个空格来对齐整个文件。
:5,7 le 3 将通过用三个空格填充第 5 行到第 7 行来对齐它们。
:le 没有任何值或:le 0 将左对齐,填充为 0。
这适用于 Vim 和 gVim。
【讨论】:
:'<,'>le4 插入空格。谢谢!
5== 将从当前光标位置缩进五行。
所以您可以在== 之前输入任何数字。它将缩进行数。这是在命令模式下。
gg=G 将整个文件从上到下缩进。
【讨论】:
我在cmets中没有找到我使用的方法,所以我会分享它(我认为只有Vim):
当您不想更改 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)
【讨论】:
经常使用 Python,我发现自己经常需要将块移动不止一个缩进。您可以使用任何块选择方法来执行此操作,然后只需在 > 之前输入您希望跳转的缩进数
例如,V5j3> 将 5 行缩进 3 次 - 如果您使用 4 个空格缩进,则为 12 个空格。
【讨论】:
要缩进文件类型中的每一行,Esc,然后是 G=gg。
【讨论】:
我使用块模式视觉选择:
I (Shift + I) 进入插入模式。这不是一个单一任务者。它有效:
c 而不是I)。【讨论】:
vim-prettier而不是默认缩进引擎)。否则,使用 > 会严重破坏 Prettier 完成的格式设置。
对于代码块,{}:= + %
对于选定的行:Shift + v 使用向上/向下箭头键选择,然后按 =。
对于整个文件:gg + = + G
注意:'gg' 表示转到第 1 行,'=' 是缩进命令,'G' 将光标移动到文件末尾。
【讨论】:
来源:https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html
【讨论】:
选项 1:使用可视块模式将 vi 中的代码块缩进三个空格:
选择要缩进的代码块。在正常模式下使用 Ctrl+V 并向下箭头选择文本。当它被选中时,输入: 对选定文本块发出命令。
命令行中会出现以下内容::'<,'>
要将缩进设置为三个空格,请键入 le 3 并按 Enter。这就是出现的内容::'<,'>le 3
所选文本立即缩进三个空格。
选项 2:使用 Visual Line 模式将 vi 中的代码块缩进三个空格:
进入正常模式并按以下键:
Vjjjj:le 3
您所做的解释:
V 表示开始选择文本。
jjjj 向下箭头四行,突出显示四行。
: 告诉 vi 你将为突出显示的文本输入指令。
le 3 表示将突出显示的文本缩进三行。
选中的代码立即增加或减少为三个空格缩进。
方案三:使用可视块模式和特殊插入模式增加缩进:
在正常模式下按以下键:
Ctrl+V
jjjj
(按空格键五次)
Esc Shift+i
所有突出显示的文本都缩进了五个空格。
【讨论】:
将所有文件缩进四:
esc 4G=G
【讨论】: