在Visual Studio Code中复制粘贴带有正确缩进的设置

162
当我使用 Visual Studio Code 复制和粘贴代码时,在按下回车键创建新行后,会发生以下情况:

enter image description here

似乎会保留新行所创建的缩进,并在其顶部添加从复制片段中复制的先前信息。我希望代码在粘贴时可以自动美化。
这种行为是否可以通过设置进行更改?
编辑:我指的不是跨平台复制粘贴,而是在Visual Studio Code中在同一文件中复制和粘贴。

1
a) 不要复制源代码的第一行空格。 b) 粘贴时,请确保光标位于行首。基本上,VSC只会将其“原样”粘贴在那里。 - newBee
1
那么没有通过设置更改的方法吗? - Tiago
2
通过使用 ALT + Arrowkey 来突出显示文本并移动它,可以保留缩进。对于那些寻找替代更改设置的人来说,这是一个不错的选择。 - Daniel Thompson
将“自动缩进”设置从“完整”更改为“高级”对我有用! - rinogo
对于任何想要查看这个的人,请在Sublime Text中执行Ctrl + Shift + V。它可以正确地执行此操作。 - Gabriel Staples
8个回答

147

在vscode中,通过设置 "editor.formatOnPaste": true 属性即可集成此功能。


37
很遗憾,这也会格式化任何已粘贴的代码,而这并不总是您想要的。 - philraj
23
不,这两者并不相同。有一个长期存在的问题 https://github.com/Microsoft/vscode/issues/6392,虽然已经关闭,但实际上没有得到解决,请看注释。我们想要的只是保持或匹配目标行的缩进级别,而不是复制文本时的初始级别,而 "editor.formatOnPaste": true 进行格式化,例如 Python 的 PEP8。 - ololobus
4
这段话非常主观,并且在代码中添加了其他不必要的修改(或“美化”)。 - dan674
7
这并不是主观的,虽然我同意你其余陈述的观点。复制和粘贴不应该有任何主观性,它们只应该单向工作。 - TheArchitecta
3
将其设置为“false”(停用它)最终解决了这个令人讨厌的默认行为。 - Christian Bonato
显示剩余9条评论

60

这个插件可能会对您有所帮助:

paste-and-indent扩展

您只需要更改快捷键,它就可以工作。请记住,如果您使用的是Mac电脑,则可能需要使用 'cmd' 而不是 'ctrl'

{
    "key": "ctrl+v",
    "command": "pasteAndIndent.action",
    "when": "editorTextFocus && !editorReadonly"
},
{
    "key": "ctrl+v",
    "command": "editor.action.clipboardPasteAction",
    "when": "!editorTextFocus"
},
{
    "key": "ctrl+shift+v",
    "command": "editor.action.clipboardPasteAction",
    "when": "editorTextFocus && !editorReadonly"
}

18
使用此代码可以重新创建Sublime Text 3的行为,即使用cmd+shift+v进行粘贴缩进: { "key": "cmd+shift+v", "command": "pasteAndIndent.action", "when": "editorTextFocus && !editorReadonly" } - phocks
9
找到它后,进入“键盘快捷方式”,然后在屏幕右上角点击“打开键盘快捷方式JSON”图标,我认为这很难找到! - Matt Fletcher
2
这个扩展有一个很大的缺点:当粘贴时,它会格式化整个文件代码,而不仅仅是被粘贴的部分!我不得不卸载它。 - sdlins
2
你可能也想尝试这个 one。无需设置,只需安装即可。受上述扩展的启发,但删除了其他一些自动格式问题。 - infinite789
这个扩展程序对我来说已经不再起作用了,有什么替代方案吗? - undefined
显示剩余3条评论

38

Ctrl + V 接着按 Ctrl + Z 看起来可以直接使用。


8
这个方法出人意料地有效。虽然这样做有点烦人,但总比没有好。 - Nate Beers
2
你试过 Cmd+V 和 Cmd+Z 吗? - Philippe
2
留给微软产品无法处理复制和粘贴的能力...天哪,我很高兴我使用 Linux 笔记本电脑...感谢这个解决方法有效。 - Scott Stensland
1
这个有 Mac 版本吗? - level1807
哇,我已经和这个东西斗争了很久!太棒了,解决了。 - Peter Hollingsworth
显示剩余2条评论

6

这真让我烦恼,事实上我需要设置 "editor.formatOnPaste": false


1
这个!这也是对我有用的。谢谢你的建议。 - Mike Kormendy

4

试试我的paste-indent扩展程序。内容将根据当前行的缩进进行粘贴,并左对齐到该缩进。


2
谢谢 - 这对于YAML文件来说是开箱即用的! - aoee
1
这个很有效,而且比其他的还要好。干得好,先生! :-) - undefined

1
我正在使用 vs code 1.68.0ubuntu 20.04 上,以下方法适用于我。
按下 ctrl+[+V
但是,这只是将 ctrl+[ctrl+v 的组合使用(如果正常的 ctrl+v 是“右”运行)。 同样地,如果正常的 ctrl+v 是“左”运行,则可以使用 ctrl+]+V

0
在Windows/Linux机器上,在编辑器中按下Shift + Alt + F

-7
一个简单的解决方法是在复制代码后尝试使用Ctrl + Shift + V。这将正确地粘贴所有带有缩进的代码。

这个不起作用,完全一样。 你可以试试这个:选中段落 - CTRL C,CTRL+SHFT+V,CTRL+SHFT+V。 它看起来很丑陋!!! - TheArchitecta
“尝试”听起来有些奇怪。它到底是做什么的?如果用户更改了快捷键会怎样? - Nico Haase
2
这只能在Sublime Text中运行。 - Lawhatre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接