我可能只是懒惰,但您是否发现从Stack Overflow上的一篇大型帖子中选择所有源代码进行复制会很烦人吗?

我想要一个功能,可能是Firefox扩展,但是最好是JavaScript脚本,用于将源示例自动复制到剪贴板。对于一小段代码来说,这没什么大不了的,但是要复制1000条以上的行就很麻烦。

你们有更好的方法来复制大型源代码吗?我正在Windows 7上使用Firefox 3.5.5。

评论

即使复制25行代码有时也很烦人。一个简单的“复制”链接将非常有用。

剪切/粘贴与复制按钮-出于多种原因,我将放下一个复制按钮。

难怪反馈很低-用[feature-request]重新标记。

相关:“取消格式化”代码块,该代码块使用Greasemonkey脚本(“预选择”)复制预块的内容。

另请参阅文件附件

在显示代码时,在其他站点上向用户呈现一个快速选项(按钮)来复制代码块中的所有代码似乎越来越普遍。我不理解为什么stackexchange网站也不能实现此功能的原因?

提交此功能请求已接近2年-有人在看吗?

最重要的是,当您最终选择所有内容并将其复制后,粘贴的代码都是未格式化的,并显示在一行中。有没有办法复制所有间距的格式化代码?

复制不是痛苦,而是选择。我在许多其他涉及源代码的站点(例如JavaScript压缩程序)中都看到了“选择”或“全选”按钮,我认为jsfiddle和YQL控制台中的一个或两个都可以。滚动选择糟透了,在上网本上糟透了)-:

那么这个想法是否考虑到了将来的表现呢?

我喜欢这个主意!但是为什么只用一个按钮呢?我建议了可能的按钮列表:meta.stackexchange.com/questions/169119/code-block-tools

@PeterAjtai回答问题时多花了整整2秒钟是很合理的论据

OP-我们所有人都可能也很懒,但是-但这并不意味着这不是一个好主意;-)

@IAbstract好了,史蒂夫走了,看来他还在等待答案(我坚决反对实施上述建议)

我们如何才能更改此功能请求,以便获得最终答案?我也希望有这样一个按钮,实现起来很容易。那么,为什么还不在那里(自提出此要求4年后)?

#1 楼

我认为遵循这些原则将是一个很好的选择:



具有复制按钮意味着:


代码块中的文本
我不必单击/拖动文本的全长
自动复制到剪贴板中

我不知道为什么人们会反对这一小小的附加功能。有一个复制按钮很有意义。我当然不希望这种舒适性控制获得优先考虑,但是正式声明是否会被认为是很好。

更新和替代方法
我了解到,此功能根本不会由于安全方面的考虑而实施。

我不介意的替代方法是“向我发送密码”按钮。一键完成!现在,我已经有了一些永久的代码记录,可以将其组织在邮件文件夹中并随时复制。

评论


我必须说老实话,按钮是90年代,但是这个主意很好。

–卡米洛·马丁(Camilo Martin)
2012年2月5日14:51

我不能同意...但是有一定的便利。

– IAbstract
2012年2月5日在23:09

从SO复制代码(尤其是长代码)真是让人头疼!!!

– Shimmy Weitzhandler
13年1月1日,下午4:42

仅当鼠标悬停在代码块的右上角附近时,该按钮才能显示。顺便说一下,我不确定在技术上是否可以干净的方式在剪贴板上放置代码。我记得,您不得不滥用Flash控件,这对任何理智的网站都是禁止的。

–安道尔
13年2月7日在10:27

ZeroClipboard似乎可以很好地抽象出实际的“复制到剪贴板”代码。

–ThinkingStiff
2013年2月25日在22:52



我同意Camilo Martin大声笑!使用纯js @Andomar绝对有可能,因为Syntax Highlighter做到了:code.google.com/p/syntaxhighlighter

–亚当B
13年2月26日在5:24

FWIW,我同意。我们只是在chat.stackexchange.com/rooms/41/tex-latex-and-friends中讨论了添加各种插件功能的利弊。提议者指出,latex-community.org / forum / viewtopic.php?f = 37&t = 22340拥有它们-但它始于“复制”功能。简而言之,这可能会打开一罐蠕虫,但它可能很强大/很酷。

–乔·科尼利(Joe Corneli)
13 Mar 7 '13 at 0:06

@Shimmy:不应有任何“长”。

–轨道轻赛
13年7月18日在9:22

@ LightnessRacesinOrbit,U得到我的投票,但我有时说。有些人粘贴了没有源代码的巨大代码。

– Shimmy Weitzhandler
13年7月19日在12:49

@Shimmy:这些帖子应该被删除然后删除。

–轨道轻赛
13年7月19日在12:52

我完全不同意。有时它们很有用,只是格式不正确。

– Shimmy Weitzhandler
13年7月19日在15:49

我真的想要这个功能。

– puretppc
2014年1月25日下午5:01

什么样的安全问题?有任何来源吗?

– Stijn
2014年7月4日14:11



@Stijn:由于复制功能必须复制到客户端剪贴板,因此存在安全性问题。我不记得我具体给出的细节。

– IAbstract
2014年7月5日在6:49

现在至少可以在2020年完成吗?还有安全性问题吗?

– Vishesh Mangla
20 Jun 30'12:25



#2 楼

简单而醒目的。 ZeroClipboard和sytaxhighlighter似乎都可以很好地抽象出实际的“复制到剪贴板”代码。



#3 楼

在某些情况下,所有代码都在一行中,并且很长,就像这篇文章的答案一样。这些行很难复制,最好有一个“复制代码”按钮。

评论


CTRL + C正常工作。我相信换行符必须已由原始海报添加,因为默认情况下,您将获得水平滚动条。

– bobobobo
2010-12-09 16:50

为什么要加休息时间?您应该能够从IDE复制并自动或适当地设置换行符的格式,或者如果没有可能,那么换行符就可以了。同样,您应该能够轻松地从答案或问题中复制代码。

–卡洛斯·穆尼兹(CarlosMuñoz)
2010-12-11 5:19

@bobobobo:CTRL + C可能工作正常,问题在于选择了代码示例块;并非总是容易正确,尤其是对于长代码块。

–casperOne
2011年8月11日下午13:14

如果您发现由于整行太长而难以选择整行,只需单击三下即可选择整行。

– JBurace
2012年5月30日14:32

#4 楼

我不理解人们对可用性的厌恶。 (查看有关MSO的一些问答,似乎有些人对任何类型的更改都感到厌恶。)

代码片段不必使用1000条以上的行即可创建垂直滚动条。更糟糕的是,带有水平滚动条的长行上的代码片段。这些都是难以复制的事情。

使事情变得容易一些的事情怎么会成为坏事呢?今天,在jQuery中实现应该相当简单。 SE已经使用jQeury了。我认为值得研究。

评论


事实是,您必须添加一个额外的UI元素的混乱情况才能获得相对较少的收益。只要复制代码有点困难(并非不可能,例如通过行号),我就反对添加

– Pekka
2011年9月16日上午10:01

但这是代码片段的相当标准的UI元素。我几乎不称它为混乱。

–赫伯特
2011年10月12日上午9:01

它不会比Share | Edit | Flag链接更混乱。这是一项基本且有用的功能,在许多编码站点上都是非常标准的功能,应在Stack Overflow上使用。

–martinjbaker
13年2月15日在12:48



@赫伯特:更改软件不是默认操作。这并不是对任何更改的普遍厌恶,而是您需要提出一个可靠的用例,以花费大量的工时实施新的软件功能,而在此尚未完成。

–轨道轻赛
13年7月18日在9:24

复制和粘贴代码超出答案是一种不常见的情况。如果不是这种情况,我们希望不鼓励复制和粘贴程序。

–科迪·格雷
13年8月4日在10:29

@LightnessRacesinOrbit我不同意工时,这太荒谬了。在不太有用的SO功能上花费的工时数量远远超过添加此功能所需要的时间。当一个建议在一个元站点上获得148次投票时,您仍然看到一些明确但无法解释的“否”,这称为强。

–奥利弗
2014年4月24日5:19在

@Schollii:并非每个人都同意您应该这样做。 “缺少有用的SO功能”是主观且值得商bat的。

–轨道轻赛
2014年4月24日在9:19

#5 楼

我也想看看复制功能。除了回答问题以外,我还提供更多答案-我看到的许多PHP问题都是由新用户编写的。他们对这种文化不熟悉,并且倾向于张贴代码块,后跟“我做错了什么?”。对于这些情况,将其复制到IDE并以查看自己的代码的方式进行查看通常要容易得多。 (特别是如果这些行超出了代码块的宽度。)

SO不应是摘录的网站,但它致力于帮助编码人员共享知识。这样的功能促进了交易。

#6 楼

我不明白为什么人们会反对单击一次(选择全部并复制)而不是执行许多步骤(如Shog9所建议的那样)。

以太的答案,我认为要复制多少行代码并不重要。如果只有几行,那会特别痛苦。

我已经使用“复制代码”按钮进入许多站点。 phpBB具有全选功能。

评论


选择一个文本块并按Control / Command-C是“痛苦的”吗?

–醚
2010-09-17在16:22

比点击一个“复制代码”按钮还要痛苦得多?是。比停留在11个代表还要痛苦吗?没有。

–郑浩然
2010-09-22 14:14

#7 楼



我实现了一个Chrome扩展程序,可以解决所有这些问题。
剪贴板是一个Chrome扩展程序,用于将stackoverflow.com,github.com和npmjs.com中发布的代码复制到剪贴板。它可以:


只需单击一下即可将源代码复制到剪贴板中
选择源文本
折叠源文本
显示剪贴板的历史记录用法
可配置的工具栏

从chrome商店安装扩展程序或阅读产品页面。
该应用程序是开源的,请参见存储库。随时报告问题或改进想法。
享受!

评论


谢谢!!!做得好!

–HåkonHægland
17-3-27在21:04



#8 楼


选择代码块按钮。

H.B.

用户可安装的脚本可以使想要该功能的任何人都拥有它,而不会遇到其他答案中提出的任何异议。

有关类似工具的进一步讨论,请参见此问题。

#9 楼

我真的很想要此功能,它可以使测试代码变得容易。

今天,我想复制以下内容:



评论


对于单行代码:只需双击即可将其全选。

– Alex
16年8月12日在23:39



#10 楼

我为同样的事情而苦苦挣扎,所以我决定创建一个浏览器扩展,在每个代码片段上向剪贴板按钮添加一个副本。

它适用于所有StackExchange网站,包括StackOverflow。

如果有兴趣,可以在Chrome或Firefox上使用它。



源代码可在GitHub上获得。

评论


做得好。易于使用。美丽的工作。

–Black Thunder
18年8月22日在9:19

#11 楼

拒绝的两个人给出了以下原因:


安全问题
在道德上令人不快

一种可以照顾到他们两个的替代方法:覆盖代码块行为,以在双击时选择该代码块中的所有文本。

这样,就不会有其他按钮在道德上令人不快;而且由于必须手动按CTRL + C,因此这与安全性无关。

#12 楼

Stack Overflow Extras(SOX)用户脚本包括此功能,以及许多其他有用的增强功能。

该设置称为“在帖子中添加代码按钮以使其复制”。

它是这样的:



只需单击按钮即可将代码保存到剪贴板。

首先需要安装Tampermonkey(Chrome,Microsoft Edge,Safari,Opera Next和Firefox)或Greasemonkey(Firefox)(有关详细信息,请参见上面的链接)。

#13 楼

如果问题中有太多源代码,以至于难以复制,特别是您觉得有必要将其全部粘贴到响应中,那么发问者和应答者都在做错事。很少需要大量的资源,您不必在响应中重复它。如果您这样做,我认为您应该经过一些额外的步骤。这不是我们要鼓励的事情。

评论


我不禁以为他不是复制大量代码以将其粘贴到响应中,而是粘贴到他的IDE中。

–比尔蜥蜴
2010-09-17 15:38



我认为复制按钮的主要目的不是简单地将问题代码块复制到响应中。它将用于将代码段复制到剪贴板并粘贴到编辑器中。

– IAbstract
2010-12-9 13:11

#14 楼

实际上,我创建了一个chrome扩展程序来解决此问题。您可以在这里尝试。

基本上,只要您双击一个代码段,它就会自动复制到剪贴板中。



#15 楼

如果所有这些“选择”和“剪贴板”功能都不可行/不安全,那么像GitHub一样,如何简单地链接到原始内容呢?



“原始”按钮链接到一个新页面,该页面包含纯文本形式的代码片段。这样可以轻松保存或复制/粘贴它。


免责声明:我不是UX专家;)

#16 楼

考虑到所有源代码都包裹在一个<pre><code>块周围,我怀疑编写一个Greasemonkey代码片段来查找这些代码块并将其复制到剪贴板中很容易。

或者类似地,我最近一直在使用EverNote,我发现突出显示问题/答案中的代码,然后按CTRL + ALT + V将为我抓取所选文本并放入新的注释条目中。然后,我可以轻松将其放在需要的地方。

评论


如您所说,这很容易。对于stackexchange的开发团队来说,实施起来非常容易。

–卡洛斯·穆尼兹(CarlosMuñoz)
2010-09-26 18:02

这不是那么容易,因为除非您在prettyprint脚本之前使用它,否则不再存在作为简单文本块的代码...

– Benjol
2010-12-09 13:43

请参阅“取消格式化”代码块,该代码块使用Greasemonkey脚本(“预选择”)复制pre块的内容,但是显示这需要一些调整才能摆脱Google Prettify的内容。

– Arjan
2010-12-09 16:16



#17 楼

LaTeX-Community.org如何允许用户在writeLaTeX(在线协作式LaTeX编辑器/编译器)中打开代码,该怎么办?有关其工作原理的详细信息和示例,请参见公告:

http://latex-community.org/forum/viewtopic.php?f=37&t=22340

已经为TeX SX提出了这种类型的集成,并且随着CircuitLabs最近与Electronics SX的集成,似乎有一些先例(和模型)可以实现这种功能。

评论


我应该补充一点,我是writeLaTeX的开发人员之一,很高兴讨论我们如何按照这些思路为SX进行集成

–约翰·哈默斯利(John Hammersley)
13年3月7日在0:19

#18 楼

如果您正在努力选择问题/答案中的所有代码,则正确的操作是编辑帖子以删除多余的代码。帖子中绝不应该存在太多代码以致引起可用性问题。

添加自动复制功能将使笨拙的笨拙代码成为我们所不希望的。

#19 楼


你们有更好的复制大型源文章的方法吗?


我的主要用例之一是直接将C ++代码下载到文件中,以便我对其进行编译并尝试重现该问题。因此,我写了这个简单的单行代码,从问题中下载代码块:

curl -sL https://stackoverflow.com/q/11227809/72178|xmllint --html --xpath "(//pre/code)[1]/text()" - 2>/dev/null|recode html..ascii


代码块号可以在XPath表达式的方括号中指定。对我来说,这比“复制”按钮更有用。这是一个单线示例,为什么处理排序数组比未排序数组更快?。

第一个代码块:

[ ~]$ curl -sL https://stackoverflow.com/q/11227809/72178|xmllint --html --xpath "(//pre/code)[1]/text()" - 2>/dev/null|recode html..ascii
#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c)
        {
            if (data[c] >= 128)
                sum += data[c];
        }
    }

    double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;

    std::cout << elapsedTime << std::endl;
    std::cout << "sum = " << sum << std::endl;
}


第二个代码块:

[ ~]$ curl -sL https://stackoverflow.com/q/11227809/72178|xmllint --html --xpath "(//pre/code)[2]/text()" - 2>/dev/null|recode html..ascii
import java.util.Arrays;
import java.util.Random;

public class Main
{
    public static void main(String[] args)
    {
        // Generate data
        int arraySize = 32768;
        int data[] = new int[arraySize];

        Random rnd = new Random(0);
        for (int c = 0; c < arraySize; ++c)
            data[c] = rnd.nextInt() % 256;

        // !!! With this, the next loop runs faster
        Arrays.sort(data);

        // Test
        long start = System.nanoTime();
        long sum = 0;

        for (int i = 0; i < 100000; ++i)
        {
            // Primary loop
            for (int c = 0; c < arraySize; ++c)
            {
                if (data[c] >= 128)
                    sum += data[c];
            }
        }

        System.out.println((System.nanoTime() - start) / 1000000000.0);
        System.out.println("sum = " + sum);
    }
}


#20 楼

没事杰夫在他的博客的某处特别指出,SO并非用于发布“大量代码”。以及方法。

应该使用的代码块是1.易于使用鼠标和CTRL + C突出显示它们。如您所见:

Code code code
Oh more code


另一部分是2:将其粘贴到某处时,烦人的行号不会溢出到您的代码中,到目前为止,不会不会发生的。

我想说SO正确地使用了代码块,因此不应该碰它们。如果它们看起来像这里的代码块,我会感到震惊。

我一直讨厌网站上的网站上的“复制”按钮,主要是因为您可以写入剪贴板,您还阅读了它。人们通常不喜欢那样。请参阅需要Flash来执行此操作。

评论


我希望不要插入行号。此外,MSDN是否使用Flash从其站点复制代码段?我不认为Flash是解决此问题的唯一方法。

– IAbstract
2010-12-09 17:50

上面的示例有效,但是复制和粘贴不适用于IE8中带有上下文颜色的代码示例。它确实可以在Chrome中运行。在IE8中,样本全部粘贴在一行中。请参阅此代码示例stackoverflow.com/questions/4308828/…

– Ed Greaves
2011年6月2日14:48



我实际上很喜欢您颤抖地链接到:)的代码块

–sehe
2011年7月4日在13:45

在我的iPad上找不到ctrl-c ... :(

– cormullion
2012年8月19日在9:54

按住手指并选择“复制”。

– bobobobo
2012年10月8日15:07

#21 楼


你们是否有更好的方式复制大型源帖子?


编辑->全选->复制->粘贴->编辑非源部分。

但是,我要复制1000多个行文章的唯一方法是无论如何都要对其进行编辑。对于SO来说确实很多...

评论


我想回答这个问题:meta.stackexchange.com/questions/73105/…您误解了我在实现“复制到剪贴板”按钮中的要求。

–xport
2010-12-23在22:34



目的是当有人回答包含代码时简化测试过程。它在tex.stackexchange.com中非常有用。在那里,我们集中提供了用于测试目的的最小代码段。对于生产,可能需要调整。

–xport
2010-12-23 22:41

编辑->全选->复制->粘贴将不起作用,因为如果选择全选,则整个页面都会突出显示。您需要复制整个页面,包括横幅,相关链接和其他不必要的东西吗?

–xport
2010-12-23 22:43

@xport:编辑步骤的重点是允许您在文本框中选择所有内容,即仅选择帖子本身的文本,而不是页面镶边。再说一次,如果有人发布1K LoC,那么就没有“简单”的解决方案-相当多的代码页,如果没有花费最少的时间,甚至太多,甚至无法理解。担心要多点击一下才能将其放入剪贴板,似乎有点像抱怨在游过大西洋之前必须一直走到码头尽头...

–Shog9
2010-12-23 23:52

如何选择一个人在他/她的答案中提交的所有单个代码段区域(或术语中的文本框)?

–xport
2010-12-24在0:42

双杀手删除全选

– bobobobo
2012年8月19日13:52

也许是时候拒绝这个功能较差的要求并将其永久休息了吗? :)

–影子向导正在接种疫苗
13年11月19日在7:54