理想的是通过smart-indent系统对代码进行“重新处理”。
是否有可能?例如,您将如何“修复”以下代码(从一个较大的块中提取的内容-我不想手动修复每一行...):
else
{
m[c] = 5;
Finished = true;
std::cout<<"(ID,R,E)"<<"-->"<<"("<<g[c]<<","<<r[c]<<","<<E1 <<")"<< std::endl;
std::cout << "\n"<<"finish-->" << r[c] << "\t" <<"E1-->"<< E1 <<"\n" ;
}
}
#1 楼
我可以通过以下两种方式之一进行操作。]p
的代码,它按原样粘贴代码,但缩进量发生了偏移,以使粘贴的第一行与我所在的行的深度相同。源已复制到缓冲区while (1) {
dostuff();
}
E.G.用
p
粘贴它的结果int myfunc() {
int i = 5; /* Cursor on this line before paste */
while (1) {
dostuff();
}
}
vim将while的缩进级别与
]p
相同。这是快速的,但仅在复制的代码在其自身中适当缩进的情况下才有效。 。对于简短的粘贴片段,我将使用int i
进入可视模式,选择我刚刚粘贴的行,然后按=
重新格式化它们。对于较大的粘贴,我利用了以下事实:光标移到第一条粘贴的行,并且vim表示类似“ 84条更多的行”。然后,我可以输入
v
来重排这84行(当然,用实际粘贴的行数替换84行)。 /> =
涵盖84==
,:help ]p
和:help =
,用于通过自定义或内置缩进规则进行过滤评论
您可以使用[[v]]很好地选择在可视模式下粘贴的代码
– Craigp
2015年2月4日在7:04
@Badger只是要澄清一下,是backtick-bracket-v-backtick-bracket吗?
–phatskat
2015年2月4日13:31
是的.. textarea对反引号感到震惊,所以我无法将其放在代码块中:P
– Craigp
2015年2月4日14:41
vim中的=运算符根据配置的格式规则(如果可以的话,我会给+100)重新格式化代码。我本可以节省几天。
–姓氏
17-6-25在14:37
我使用
–A --- B
17年7月12日在9:56
#2 楼
可以使用=
命令重新缩进。像大多数普通模式命令一样,它可以应用于运动,因此可以使用=']重新缩进刚粘贴的代码。这将从当前光标位置开始缩进到粘贴的最后一行
']
标记。=
也可以在可视模式下使用。 ] p,它以与当前行相同的缩进级别粘贴。这可以帮助粘贴适当的缩进文本,尽管缩进深度根据周围的文本有所不同。#3 楼
使用= ap(助记符是“设置段落格式”)将使vim尝试自动格式化当前段落。如果您要仔细注意可能要重新设置格式的内容,则可能会发现使用vap直观地选择当前段落更明智,更快捷(可以直观地看到正在重新设置格式的内容),然后是=。我发现这在文件中很有用,因为我知道vim会错误地重新格式化,并且我不想错误地错误地格式化其他行。
#4 楼
要重新缩进缓冲区中已经存在的文件,请使用gg=G
:有关重新缩进文件的一部分,请参见Fix Indentation ,可以对
=
过滤器应用各种范围(例如,==
仅修复当前行) )。要在粘贴文本时保持缩进不变,可以在将文本粘贴到缓冲区之前
:set paste
,这样可以防止vim自动缩进刚刚粘贴的文本。粘贴内容后,完成后可以使用set :nopaste
返回。在这里查看vimdoc。如果您发现自己经常粘贴东西,最好在VimWiki上使用此技巧,并通过将以下行添加到“粘贴模式”切换设置键您的
.vimrc
:nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode
然后您可以按
<F2>
切换粘贴模式。粘贴模式处于活动状态时,vim将在状态行中显示单词“ PASTE”。评论
这个问题不是关于带有缩进的代码的粘贴,而是关于修复缩进较差的代码的问题。
–rolfl
2015年2月4日,下午3:46
我没有看到您发布的评论。但是,您仍然可以使用gg = G重新缩进整个文件。
– Bhargav Bhat
2015年2月4日,下午3:48
@rolfl在这种情况下,我通常从这里开始:gg = G,然后看一下vim出错的部分。
–muru
15年2月4日在4:08
如果您想要更多控制(或减少重复的麻烦),请考虑在保存缓冲区时添加自动命令以调用诸如astyle之类的代码格式工具。有关详细信息,请参见此问题。
– Bhargav Bhat
2015年2月4日在4:11
#5 楼
要自动重新缩进括号或带括号的块的整个块,请将光标放在带括号的同一行上,然后尝试=%。要更改班次宽度,请使用:set sw=2
。如果无法按预期工作,请手动减小缩进量(outdent),请尝试<%并重复执行。 (如有必要)。用>%表示相反。
所以:
else
{
// some code
}
成为: />对于特定的代码,要自动缩进一行或几行,请尝试:
==重新缩进当前行
5 ==重新缩进5行
要手动增加/减少一行或几行的缩进,请尝试:
<<通过移位宽度空格缩进当前行
5 <<通过移位宽度空格缩进5行
>>通过shiftwidth空格缩进当前行
5 >>通过缩排空格缩进5行
。
还可以在可视模式(v)中进行缩进,方法是选择文本并按=(自动缩进),<(反缩进)或>(缩进)。 >
另一个技巧是通过gg = G来纠正整个文件的缩进。 :如何用空格替换制表符?)。
对于外部方法,您可以尝试:
pythonTity重新格式化Python代码,例如:
else
{
// some code
}
相关:
多行缩进在stackoverflow SE中快速在vi中实现
如何重新格式化源文件以将其从2个空格缩进到3个?在stackoverflow
缩进和对齐:在stackoverflow处合并空格和制表符
#6 楼
我最近安装了vim-pasta(https://github.com/sickill/vim-pasta),这似乎可以改善粘贴时代码的缩进性。 README还对各种代码粘贴策略进行了很好的讨论。#7 楼
现有答案中已经包含很多内容。我只想添加一个我经常用于缩进的映射。nnoremap <Leader>i mzgg=G`z
我看到一些vimrc将此映射到===。 br />无论哪种方式,这都是一个很棒的映射,我几乎每次都使用它,尤其是粘贴从其他地方复制的代码时。
甚至最好将其放在
autocmd
中,以便Vim在将更改写入磁盘之前就对其进行缩进。
评论
您是在谈论最初缩进的代码还是缩进正确的代码,将它们粘贴到Vim时会发生变化?粘贴的代码最初很难缩进。让我举一个例子。...