应该是微不足道的,它甚至可能在帮助中,但我无法弄清楚如何导航它.如何在vi中快速缩进多行?
使用该>命令.缩进5行,5>>.标记一行和缩进,Vjj>缩进3行(仅限vim).要缩进花括号块,请将光标放在其中一个花括号上,并使用>%块内使用的任何位置>iB.
如果您正在复制文本块并需要在新位置对齐块的缩进,请使用]p而不是仅使用p.这会将粘贴的块与周围的文本对齐.
此外,该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您可以
{
使用}
或替换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 lineEx命令
当您想要缩进特定范围的行而不移动光标时,这些非常有用.
:< 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 shiftIndent by 4 spaces when using >>, <<, == etc. set softtabstop=4 "Indent by 4 spaces when pressingset 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参考
缩进代码块
视觉上移动块
缩进源代码
:help =
这个答案和上面的答案都很棒.但我为此加了1,因为它让我想起了'dot'操作符,它重复了最后一个命令.当需要将整个块缩进多个移位空间(或缩进)而不需要按下`>}时,这非常有用.谢谢你
> 42gg从第42行开始缩进.
3> Johan..:一个很大的选择是:
gg=G它真的很快,一切都缩进了;-)
http://stackoverflow.com/questions/7600860/getting-vim-to-recognize-xml
我认为必须首先设置cindent.和@asgs我认为这只适用于cstyle编程语言.
我认为`set cindent`应该在vimrc中,或者应该在运行该命令之前运行`:set cindent`
4> svec..:也可以尝试使用C-indent缩进,
:help =
有关详细信息:
={
这将自动缩进您当前的代码块.
要不就:
==
自动缩进当前行.
对我来说不起作用,只是将我的光标转移到'当前代码块我'的开头括号上方的行.
5> Kent Fredric..:为更多视觉人士提供按键:
进入命令模式:
Escape移动到区域的开头以缩进:
hjkl↑↓←→开始一个块:
v移动到该区域的末尾以缩进:
hjkl↑↓←→(可选)键入所需的缩进级别数
0..9在块上执行缩进:
>
如果它使用空格而不是制表符,那么可能是因为你有缩进设置使用空格.=).
当'expandtab'选项关闭时(这是默认值),Vim尽可能使用来进行缩进.(:帮助:>)
您要查看"空格与标签"的三个设置是1.tabstop 2. shiftwidth 3. expandtab.您可能有"shiftwidth = 5 noexpandtab",因此"tab"为3个空格,缩进级别为"5"空格,因此它组成5个带有1个选项卡和2个空格.
这很棒,但它使用空格而不是制表符.有没有办法解决这个问题?
6> Daniel Spiew..:除了已经给出和接受的答案之外,还可以放置标记然后缩进从当前光标到标记的所有内容.因此,输入
ma
您想要缩进块顶部的位置,根据需要向下移动光标,然后键入>'a
(注意"a
"可以替换任何有效的标记名称).这有时比5>>
或更容易vjjj>
.
这非常有用,因为它可以避免计算要缩进的行数.
7> Sagar Jain..:所有命令的主人都是
gg=G
这会缩进整个文件!
下面是一些简单而优雅的命令,用于在Vim或gVim中快速缩进行.
缩进当前行
==
缩进当前行下面的所有行
=G
缩进
n
当前行下方的行
n==
例如,缩进当前行下面的4行
4==
要缩进代码块,请转到其中一个大括号并使用命令
=%
这些是缩进多行的最简单但功能最强大的命令.
I love this kind of answers: clear, precise and succinct. Worked for me in Debian Jessie. Thanks, @SJain
这只是在'vim`中,而不是`vi`.
它不在我的Solaris或AIX机箱上.equals键一直是我标准的ad hoc宏分配之一.你确定你没有看到被称为"vi"的"vim"吗?
是的,在Linux上,vi几乎总是链接到vim.尝试在vi中运行:ve命令.
@rojomoke:不,它也适用于vi
8> Michael Durr..:转到文本的开头
按下v可视模式.
使用up/ down箭头突出显示文本.
按下=以缩进突出显示的所有行.
9> Paul Tomblin..:除了提供的解决方案,我喜欢一次做一个段落
>}
10> Michael Ekok..:当您选择一个块并用于>缩进时,它会缩进然后返回到正常模式.我在.vimrc文件中有这个:
vnoremap <>gv 它允许您根据需要缩短选择时间.
要多次缩进选择,您只需按.重复上一个命令.
的问题。在这种情况下,您必须动动手指。使用@mike的解决方案(与我使用的解决方案相同),您已经可以将手指放在缩进键上,并且可以不断对其进行修改以保持缩进,而不必进行切换和其他操作。使用周期需要更长的时间,因为您必须动动双手,并且需要更多的思考,因为这是另一种不同的操作。
11> John Sonders..:假设您使用2个空格来缩进代码.类型:
:set shiftwidth=2
键入v(输入视觉块编辑模式)
使用箭头键(或使用h/ j/ k/ l)移动光标以突出显示要缩进或取消的行.
然后:
键入>缩进一次(2个空格).
键入2>缩进两次(4个空格).
键入3>缩进三次(6个空格).
...
输入<一次(2个空格).
输入2<两次(4个空格).
键入3<unindent三次(6个空格).
...
你明白了.
(空行不会缩进,我觉得这很好.)
我在(g)vim文档中找到了缩进块的答案:
:help visual-block /indent如果要对命令进行计数,请在键入操作符之前执行此操作:"v {move-around} 3>"(向右移动第3行缩进).
12> Juan Lanus..:vim UI的美妙之处在于它的一致性.编辑命令由命令和光标移动组成.光标移动始终相同:
H屏幕顶部,L底部,M中间
n G转到行n,G单独到文件底部,gg到顶部
n转到下一个搜索匹配,N转到上一个
} 到段落结束
% 下一个匹配括号,括号中的任何一个或标签类型
enter 到下一行
'x 标记x,其中x是一个字母或另一个字母'
更多,包括w和W言论,$或0线的提示等,这里不适用,因为不是线条移动.
因此,为了使用vim,你必须学会移动光标并记住一系列命令,例如>缩进(和<"outdent").
因此,为了缩小从光标位置到屏幕顶部的行>H,>G缩进到文件的底部.如果>H您键入的是输入,而不是键入,dH则删除相同的行块,cH以替换它等.
某些光标移动适合特定命令.特别是,该%命令可以方便地缩进整个HTML或XML块.
如果文件突出显示语法('
),则将光标设置在标签的文本中(例如,在的"i"中,输入>%将缩进到结束 div>标签.这就是vim的工作原理:只需记住光标移动和命令,以及如何混合它们.
所以我这个问题的答案将是"去你要缩进的行块的一端,然后键入>命令和运动块的另一端,"如果缩进被解释为转移的线路,=如果缩进被解释为漂亮印刷.
我会说vi/vim几乎是一致的.例如,D的行为与S和Y不同!:)
13> 小智..:做这个
$vi .vimrc并添加此行
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent这只适用于cpp文件,你也可以通过修改文件类型来为另一种文件类型执行此操作...
14> Eric Kigathi..:使用快速方法
VISUAL MODE
使用与注释代码块相同的过程.如果您不想更改
shiftwidth
或使用任何set
指令并且足够灵活以使用TABS或SPACES或任何其他字符,这将非常有用.
将光标定位在块的开头
v切换到
-- VISUAL MODE --
选择要缩进的文本
键入
:
以切换到提示用3个前导空格替换:
:'<,'>s/^/ /g
或者替换为主要标签:
:'<,'>s/^/\t/g
简要说明:
'<,'>
- 在视觉选择范围内
s/^/ /g
- 在整个范围内的每一行的开头插入3个空格(要么)
s/^/\t/g
-Tab
在整个范围内的每一行的开头插入
15> Nykakin..:还有一种方法尚未提及 - 您可以使用
norm i
命令在行的开头插入给定的文本.要在第2-10行之前插入10个空格::2,10norm 10i请记住,命令末尾必须有空格字符 - 这将是我们想要插入的字符.我们也可以用任何其他文本缩进行,例如用5个下划线字符缩进文件中的每一行:
:%norm 5i_或者更奇特的东西:
:%norm 2i[ ]更实际的例子是用#字符注释Bash/Python/etc代码:
:1,20norm i#重新缩进使用x而不是i.例如,从每行中删除前5个字符:
:%norm 5x
16> 小智..:我喜欢为缩进标记文本:
转到文本行的开头然后输入ma(a是'm'ark的标签:它可以是任何字母)
转到文本的结尾行并键入mz(再次z可以是任何字母)
:'a,'z>或:'a,'z <将缩进或突出(这是一个字吗?)
瞧!文本被移动(空行保持为空,没有空格)
PS:您可以使用:'a,'z技术来标记任何操作(d,y,s ///等)的范围,您可以在其中使用行,数字或%
17> 小智..:
>}
或>{
从当前行缩进到下一段
<}
或<{
同样的缩进
18> zundarz..:
: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的填充对齐.这适用于
:help left
和ex mode
.
19> mda..:对我来说,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/binMacport使用"〜/ .profile"很多,因此PATH环境变量可能会变得很长.
20> rohitkadam19..:
5==
将从当前光标位置缩进5行.所以你可以输入任何数字==
,它会缩进行数.这是在命令模式下.
gg=G
将从上到下缩进整个文件.
21> NickSoft..:我没有找到我在评论中使用的方法,所以我会分享它(我认为只有vim):
Esc 进入命令模式
移动到要识别的最后一行的第一个字符
ctrl- v开始块选择
移动到要识别的第一行的第一个字符
shift- i进入特殊插入模式
键入尽可能多的spase/tabs以缩进(例如2
按Esc和空格将出现在所有行中
当您不想更改vimrc中的标识/选项卡设置或记住它们在编辑时更改它时,这非常有用.
为了取消我使用相同的ctrl- v块选择选择空格并删除它d.
22> Kamlesh Karw..:我不知道为什么很难找到像这样的简单答案......
我自己不得不挣扎很多才知道这很简单
.vimrc
在主目录下编辑您的文件添加此行set cindent在你要正确缩进的文件中
在正常/命令模式类型
10== (This will indent 10 lines from the current cursor location) gg=G (Complete file will be properly indented)
23> Abhishesh Sh..::line_num_start,line_num_end>例如
14,21> shifts line number 14 to 21 to one tab增加'>'符号以获得更多标签
例如
14,21>>> for three tabs
24> John La Rooy..:使用Python很多,我发现自己需要经常需要通过多个缩进来移动块.您可以使用任何块选择方法执行此操作,然后只需输入您希望在之前跳转的缩进数
>
例如.
V5j3>
将缩进5行3次 - 如果使用4个空格进行缩进,则为12行
25> kapil..:要缩进文件类型中的每一行, esc则G = gg
26> Eric Leschin..:如何通过#空格立即缩进vi中突出显示的代码:
选项1:使用Visual Block模式将vi中的代码块缩进到三个空格:
选择要缩进的代码块.Ctrl+V在正常模式下使用并向下箭头选择文本.选中它后,输入
:
以向所选文本块发出命令.以下内容将出现在命令行中:
:'<,'>
要将缩进设置为3个空格,请键入
le 3
并按Enter键.出现的是::'<,'>le 3
所选文本立即缩进为3个空格.
选项2:使用Visual Line模式将vi中的代码块缩进到三个空格:
在VI中打开您的文件.
将光标放在某些代码上
处于正常模式时,按以下键:
Vjjjj:le 3解释你做了什么:
V
意味着开始选择文字.
jjjj
箭头向下4行,突出显示4行.
:
告诉vi,您将输入突出显示文本的说明.
le 3
意味着缩进突出显示的文本3行.所选代码立即增加或减少到三个空格缩进.
选项3:使用Visual Block模式和特殊插入模式增加缩进:
在VI中打开您的文件.
将光标放在某些代码上
处于正常模式时,按以下键:
Ctrl+V
jjjj(按空格键5次)
Esc Shift+i
所有突出显示的文本都缩进了5个空格.
推荐阅读
如何解决《函数错误从数字列表返回3个最大值》经验,为你挑选了3个好方法。 ... [详细] 如何解决《如何查找时钟的秒针是在更大的区域还是更小的区域》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Qt和OpenGLWindow-调整大小的闪烁》经验,为你挑选了0个好方法。 ... [详细] 如何解决《vscode中的tasks.json文件在哪里?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《AVAudioEngine.start()崩溃,即使它包含在do/catch中》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何解决这个"索引0超出空数组的界限!"》经验,为你挑选了1个好方法。 ... [详细] 如何解决《IntelliJ中的调试gradle任务》经验,为你挑选了0个好方法。 ... [详细] 如何解决《正确处理PHP7返回类型的方法》经验,为你挑选了3个好方法。 ... [详细] 如何解决《选择一个选项时,显示组合框值而不是文本》经验,为你挑选了1个好方法。 ... [详细] 如何解决《414URI太长了.但不总是》经验,为你挑选了0个好方法。 ... [详细] 如何解决《在MicrosoftSQLServer中使用复合键》经验,为你挑选了0个好方法。 ... [详细] 如何解决《适用于iOS9+的Objective-CiOS日历视图》经验,为你挑选了1个好方法。 ... [详细] 如何解决《得到奇怪的'未定义方法'错误》经验,为你挑选了1个好方法。 ... [详细] 如何解决《jQueryload()不会在div中加载脚本标签》经验,为你挑选了1个好方法。 ... [详细] 如何解决《使用R到COUNT()和GROUP_CONCAT(DISTINCTx)》经验,为你挑选了2个好方法。 ... [详细] 如何解决《ProgressBar的颜色没有改变c#》经验,为你挑选了1个好方法。 ... [详细] 如何解决《ActiveDirectoryLDAP示例》经验,为你挑选了0个好方法。 ... [详细] 如何解决《方法的擦除与类型中的另一种方法相同》经验,为你挑选了1个好方法。 ... [详细] 吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1Java泛型 - 擦除概念
- 2如何使用gawk多次通过?
- 3这些ES6导入方法有什么区别?
- 4Ember Fastboot Jquery
- 5ScalaMock:如何模拟/存根方法每次调用返回不同的值?
- 6在android中分享APK通过分享选项
- 7为什么许多例子在Matplotlib/pyplot/python中使用"fig,ax = plt.subplots()"
- 8非法动态参考
- 9使用管道命令忽略Bash脚本中的HUP信号
- 10嵌套 - 被抄送的项目 - 范围澄清?
- 11Miminum对Google tensorflow图像分类器的要求
- 12如何停止Java或Hibernate缓存
- 13Angular UI Router单独的文件
- 14从pandas数据框中删除带有空列表的行
- 15如何在Angular2中为Http获取MockBackend进行单元测试?
- 16@SqlResultSetMapping列:具有子实体的实体
- 17Matlab R2015b中`toc`功能可能出现的错误
- 18从Jekyll的集合中获取特定项目
- 19宏未打开时自动运行
- 20我如何验证REST API调用是否正在使用Paw压缩响应?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有