它应该是微不足道的,甚至可能在帮助中,但我不知道如何导航。如何在vi中快速缩进多行?
它应该是微不足道的,甚至可能在帮助中,但我不知道如何导航。如何在vi中快速缩进多行?
Answers:
使用>命令。要缩进五行,5>>。标记一行并缩进,Vjj>以缩进三行(仅Vim)。要缩进大括号块,请将光标放在大括号之一上,然后使用>%或从block use中的任何位置使用>iB。
如果要在周围复制文本块,并且需要在新位置对齐块的缩进,请使用]p代替just p。这会将粘贴的块与周围的文本对齐。
此外,该shiftwidth
设置还可以控制缩进多少空格。
shiftwidth
设置以更改此设置。
该答案总结了该问题的其他答案和评论,并基于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
您可以{
用}
或代替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 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
防爆命令
当您希望缩进特定范围的行而不移动光标时,这些功能很有用。
:< 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
它真的很快,并且所有东西都缩进了;-)
gg=G
只是将每一行从位置1开始。所有空白都已删除。还有XML特有的其他功能吗?
set cindent
应该在vimrc中:set cindent
运行,还是应该在运行该命令之前运行
也可以尝试这种方式进行C缩进缩进。执行:help =
以获取更多信息:
={
这将自动缩进您所在的当前代码块。
要不就:
==
自动缩进当前行。
吸引更多视觉人士的按键:
进入命令模式:
Escape
移至要缩进的区域的起点:
hjkl↑↓←→
开始一个块:
v
移动到该区域的末端以缩进:
hjkl↑↓←→
(可选)键入所需的缩进级别数
0..9
在块上执行缩进:
>
所有命令的主人是
gg=G
这会使整个文件缩进!
下面是一些简单而优雅的命令,用于在Vim或gVim中快速缩进行。
缩进当前行
==
缩进当前行下面的所有行
=G
缩进n
当前行下方的行
n==
例如,缩进当前行下方的4行
4==
要缩进一段代码,请转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能强大的命令。
vim
,不是vi
。
vim
链接为as的vi
吗?
除了已经给出和接受的答案外,还可以放置一个标记,然后缩进从当前光标到该标记的所有内容。
因此,输入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的UI的优点在于它的一致性。编辑命令由命令和光标移动组成。光标移动始终相同:
'
。因此,为了使用vim,您必须学习移动光标并记住一系列命令,例如>缩进(和<“ outdent”)。
因此,要缩进从光标位置到屏幕顶部的行>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文件。您可以为其他文件类型执行此操作,也只需修改文件类型...
您可以使用该norm i
命令在行首插入给定的文本。要在第2-10行之前插入10个空格:
:2,10norm 10i
请记住,命令末尾必须有一个空格字符-这将是我们要插入的字符。我们还可以缩进任何其他文本的行,例如缩进文件中具有五个下划线字符的每一行:
:%norm 5i_
或更喜欢的东西:
:%norm 2i[ ]
更实际的示例是使用#字符注释Bash / Python / etc代码:
:1,20norm i#
要重新缩进,请使用x代替i。例如,要从每行中删除前5个字符:
:%norm 5x
VISUAL MODE
使用此方法的快速方法是使用与注释代码块相同的过程。
如果您不想更改您的指令shiftwidth
或使用任何set
指令,并且对使用TABS或SPACES或任何其他字符足够灵活,这将很有用。
-- VISUAL MODE --
:
以切换到提示替换为3个前置空格:
:'<,'>s/^/ /g
或替换为前导标签:
:'<,'>s/^/\t/g
简要说明:
'<,'>
-在可视范围内
s/^/ /g
-在整个范围的每一行的开头插入3个空格
(要么)
s/^/\t/g
- Tab
在整个范围内的每一行的开头插入
: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
插入空格。谢谢!
对我来说,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
5==
将从当前光标位置缩进五行。
因此,您可以在之前键入任何数字==
。它将缩进行数。这是在命令模式下。
gg=G
将从顶部到底部缩进整个文件。
我不知道为什么很难找到像这样的简单答案...
为了了解这一点,我自己不得不付出很多努力。很简单:
.vimrc
在主目录下编辑文件。添加此行
set cindent
在您要正确缩进的文件中。
在普通/命令模式下
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
: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中。
选项1:使用可视块模式将vi中的代码块缩进三个空格:
选择要缩进的代码块。使用Ctrl+V普通模式并向下箭头选择文本来执行此操作。选中后,输入:
以对所选文本块发出命令。
以下内容将出现在命令行中: :'<,'>
要将缩进量设置为三个空格,请键入le 3
并按Enter。出现的内容是::'<,'>le 3
所选文本立即缩进三个空格。
选项2:使用可视行模式将vi中的代码块缩进三个空格:
处于正常模式,然后按以下键:
Vjjjj:le 3
您所做的解释:
V
表示开始选择文本。
jjjj
向下箭头四行,突出显示四行。
:
告诉vi您将输入突出显示文本的说明。
le 3
表示将突出显示的文本缩进三行。
所选代码立即增加或减少到三个空格缩进。
选项3:使用可视块模式和特殊插入模式增加缩进量:
在正常模式下,按以下键:
Ctrl+V
jjjj
(按空格键五次)
Esc Shift+i
所有突出显示的文本都缩进了五个空格。
我使用块模式视觉选择:
I
(Shift+ I)进入插入模式。这不是单任务程序。有用:
c
代替I
)。vim-prettier
而不是默认的缩进引擎)进行格式化,这是可行的方法。>
否则,使用将严重破坏Prettier所做的格式化。
要将所有文件缩进四倍:
esc 4G=G
资料来源:https : //www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html